IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    【综合】nginx解析漏洞拿下shell,但提权无果!

    -Y.c发表于 2016-05-19 15:06:18
    love 0

    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  实战开始

    1

    上传图马,触发解析漏洞了,然后去用菜刀连接:

    1.1

    显然有360主机卫士,绕过思路:

    1.直接用post方式提交数据,360主机卫士不拦截!

    2.过狗刀:朋友傀儡给了一份过狗刀以及教程,等我研究会了,会发表相关文章的!

    直接上过狗刀

    2

    哦了,就是这么esay!下面就难了,虽然没拿下服务器,但是也学到了很多东西!

    0x3  提权前奏–信息探测:

    1>是否可以执行cmd命令:whoami探测权限

    12

    2>systeminfo看系统号、版本、补丁数量:

    13

    3>netstat探测端口:

    14

    4>tasklist查看进程:

    15

    5>net user探测是否可执行net以及用户情况:

    16

    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

    3

    居然是以root用户连接数据库的,胆子不小啊!上大马,执行命令走人!PS:以为就这样完了吗?不可能的!

    4

    执行任何命令都被拦截!

    【思考解决方案】

    1.想办法让马儿过360,傀儡大表哥帮忙实现了,但是马儿仍有问题!

    2.phpmyadmin或者adminer,这个是官方的吧,执行命令应该不拦截!

    3.开启外联,用navicat去执行命令即可!

    【方法实践】

    1.开启外联:当时脑子打结了吧,怎么先去测试是否开启外联呢,因为开启外联是需要执行sql命令的,不过还好,发现一个东西:在菜刀里面执行普通命令并不被拦截(但是建立文件夹,导出文件均被拦截)!

    查看是否开启外联:show variables like '%skip_networking%';

    5

    没有开外联,我们去开启外联:

    开启外联:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'rootpass' WITH GRANT OPTION;

    6

    执行成功,再看有没有开外联:

    7

    开不了,被拦截了,思路已断!

    2.phpmyadmin或者adminer

    思路1不同走思路2

    8

    adminer果真能执行命令,那么去尝试建立文件夹:

    9

    这可爱的360又跑出来了!额,突然想到我如果能够把udf.dll直接上传到指定目录,后面的sql语句应该可以执行吧,因为创建函数是对数据库的操作了,360大大应该不管了吧!

    10

    的确可读写,我上传了udf马子,然后创建函数试试   /*心中早已祈祷:360大大,您休息一下吧!*/

    11

    可以创建函数,并且执行命令,whoami一看傻眼了,怎么不是system,那这个用户权限够不够呀?

    此处发问:UDF提权的原理是啥?网上说udf提权的原理是用udf创建cmd来执行命令,但是那udf创建的cmd为什么是system权限呢?后来问了某大表哥,大表哥说:udf执行cmd的权限是继承启动mysql的用户的,默认的mysql启动用户是system,但是也可以降权启动(建立普通用户来启动mysql)!奥,懂了!我估计自己拿到的权限还是普通用户吧!

    反弹shell看看    /*因为返回结果显示不全*/

    0x5  信息再次收集 /*主要收集计算机用户的!*/

    12

    net user 试试:

    12.1

    可以看出权限是增加了一些,起码可以执行net系列命令了!

    心不死,看看自己是什么权限了/*继承了mysql_sf_mszaol的权限,所以看mysql_sf_mszaol*/

    13

    玻璃心嘎吱碎了!

    同样我也看到了mssql的用户了,估计mssql也是降权启动的!

    探测guest,万一有人入侵过呢

    14

    得到的信息:guest无密码,guest属于administrator,guest未启用!    /*不知道你有想法了吗?*/guest既然拥有administrator的权限,估计是有人来过,那么虽说guest未启用可能是假象/*见某书说:用户克隆直接将administrator权限赋给guest,看guest也是未启用–留后门方法!*/那就用guest登陆试试

    15

    没提示guest用户被停用,莫非是密码错了?/*测试结果:1.如果直接把administrator的权限赋值给guest的确guest账户仍然显示未启用!2.guest用户被停用的时候,登陆提示guest被停用!*/

    求助攻!

    转载请注明:AdminTony's Blog » 【综合】nginx解析漏洞拿下shell,但提权无果!



沪ICP备19023445号-2号
友情链接