0x0 前言
最近在收集一些存在nginx解析漏洞的站点,给学员们录点实战,找了好久,才找到一个存在的,服务器上还装了360主机卫士和安全狗!突破突破!
0x1 nginx解析漏洞
1>产生原理:php cgi中的cgi.fi:x_pathinfo默认开启,x_pathinfo开启意味着:www.admintony.top/logo.png/a.php先检测是否存在a.php,如果不存在,接着检测logo.png是否存在,如果logo.png存在的话,将以php格式解析logo.png。此漏洞产生于php cgi,涉及到nginx<8.03以及iis 7.x || 其实漏洞是php cgi的,由于nginx与php cgi联系比较紧密,也成为nginx的解析漏洞
2>漏洞检测:在站点中随便找一个图片,在url中加上/a.php如果返回乱码就可能存在解析漏洞!/*为什么把”可能”标注了一下,我之前遇到过一个站点,就是能解析成乱码,但是图片中的php代码并不执行!*/
3>利用过程:找上传点,上传图马拿到图马的url,然后在图马的url后面直接加上/a.php构造地址,用菜刀直接连接url/a.php。
0x2 实战开始
上传图马,触发解析漏洞了,然后去用菜刀连接:
显然有360主机卫士,绕过思路:
1.直接用post方式提交数据,360主机卫士不拦截!
2.过狗刀:朋友傀儡给了一份过狗刀以及教程,等我研究会了,会发表相关文章的!
直接上过狗刀
哦了,就是这么esay!下面就难了,虽然没拿下服务器,但是也学到了很多东西!
0x3 提权前奏–信息探测:
1>是否可以执行cmd命令:whoami探测权限
2>systeminfo看系统号、版本、补丁数量:
3>netstat探测端口:
4>tasklist查看进程:
5>net user探测是否可执行net以及用户情况:
6>总结信息:
系统版本:windows2008 x64
补丁情况:很少 /*但是有360主机卫士,exp提权基本没戏!*/
开放端口:21 80 81(未知服务) 135(RDP(远程过程调用)服务) 445 1433 3306 3389
进程情况:有安全狗和360主机卫士!
突破方案:3306和1433入侵几率可能较大,exp提权基本没戏,360主机卫士把补丁估计都补上了!135端口入侵不熟悉,3389爆破有点……(你懂的)!
ps:mysql和mssql提不下的话,估计我搞不定了!
0x4 寻找root
居然是以root用户连接数据库的,胆子不小啊!上大马,执行命令走人!PS:以为就这样完了吗?不可能的!
执行任何命令都被拦截!
【思考解决方案】
1.想办法让马儿过360,傀儡大表哥帮忙实现了,但是马儿仍有问题!
2.phpmyadmin或者adminer,这个是官方的吧,执行命令应该不拦截!
3.开启外联,用navicat去执行命令即可!
【方法实践】
1.开启外联:当时脑子打结了吧,怎么先去测试是否开启外联呢,因为开启外联是需要执行sql命令的,不过还好,发现一个东西:在菜刀里面执行普通命令并不被拦截(但是建立文件夹,导出文件均被拦截)!
查看是否开启外联:show variables like '%skip_networking%';
没有开外联,我们去开启外联:
开启外联:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'rootpass' WITH GRANT OPTION;
执行成功,再看有没有开外联:
开不了,被拦截了,思路已断!
2.phpmyadmin或者adminer
思路1不同走思路2
adminer果真能执行命令,那么去尝试建立文件夹:
这可爱的360又跑出来了!额,突然想到我如果能够把udf.dll直接上传到指定目录,后面的sql语句应该可以执行吧,因为创建函数是对数据库的操作了,360大大应该不管了吧!
的确可读写,我上传了udf马子,然后创建函数试试 /*心中早已祈祷:360大大,您休息一下吧!*/
可以创建函数,并且执行命令,whoami一看傻眼了,怎么不是system,那这个用户权限够不够呀?
此处发问:UDF提权的原理是啥?网上说udf提权的原理是用udf创建cmd来执行命令,但是那udf创建的cmd为什么是system权限呢?后来问了某大表哥,大表哥说:udf执行cmd的权限是继承启动mysql的用户的,默认的mysql启动用户是system,但是也可以降权启动(建立普通用户来启动mysql)!奥,懂了!我估计自己拿到的权限还是普通用户吧!
反弹shell看看 /*因为返回结果显示不全*/
0x5 信息再次收集 /*主要收集计算机用户的!*/
net user 试试:
可以看出权限是增加了一些,起码可以执行net系列命令了!
心不死,看看自己是什么权限了/*继承了mysql_sf_mszaol的权限,所以看mysql_sf_mszaol*/
玻璃心嘎吱碎了!
同样我也看到了mssql的用户了,估计mssql也是降权启动的!
探测guest,万一有人入侵过呢
得到的信息:guest无密码,guest属于administrator,guest未启用! /*不知道你有想法了吗?*/guest既然拥有administrator的权限,估计是有人来过,那么虽说guest未启用可能是假象/*见某书说:用户克隆直接将administrator权限赋给guest,看guest也是未启用–留后门方法!*/那就用guest登陆试试
没提示guest用户被停用,莫非是密码错了?/*测试结果:1.如果直接把administrator的权限赋值给guest的确guest账户仍然显示未启用!2.guest用户被停用的时候,登陆提示guest被停用!*/
求助攻!