通过旁注渗透拿下F国司法部

首先看了一下网站,没看出是什么程序写的,也没发现值得深入下手的地方。于是便旁注了,很快,拿到了一个旁站的shell。
这才发现,服务器支持asp,aspx,php,但是限制很多。
简单试了下没提权成功。反正拿服务器不是首要任务,首要任务是挂菊花聊天室,先挂上聊天室再提权(后来事实证明,还是先提权才能把主页挂上菊花的)。

**************************好了,正文开始*****************************
很庆幸,这个vhost网站能跨站读取源码,但是权限不够,可以用webshell跨站读取一部分网站的源码,但是不能直接拷贝或者上传文件到目录
当然,意思就是不能直接对doj.xx这个网站的目录中写入文件或者修改文件代码
简单翻了一下网站目录,没有明显的后台登陆地址的标记
登陆了一下MySQL账户,不是root,还是4.x,用处不大
这几个目录中比较可疑的是:
http://www.doj.xx/doj2.0/c0ntent/login.php
访问这个地址,这个目录明显就是后台,这货后台隐藏的也够深的。
如果这是注入拿站,拿站的人是要死的,MySQL 4.x的版本,管理员表是doj_auth_users,字段是pangalan,密码是n位SALT的SHA512加密,后台又这么深,真的是基霸管理员啊

后台隐藏这么深,我很怀疑是之前新闻说的F国要求各部门加强网站安全性通知以后管理员抽风给做成这样的

我先看了一下登录文件login.php的代码:

这段是密码验证部分的代码,简单来分析一下代码好了

Calculate hashed password前面的部分是验证输入的不为空,这个很简单,Calculate hashed password后面是加密密码和验证的部分,这里就比较郁闷了

pangalan应该是用户名的表段,而password明显就是密码的表段了。管理员字段是在:TBL_LOGIN 这个常量中存放的
$password这个变量是经过加密的,看加密格式:

先将POST提交的密码一次处理(初步判断是去空格引号转义等功能)后,和SALT常量结合,然后hash加密

那么我们再登陆数据库看看,登陆信息在include.php文件中,数据库的信息如下:

用dojmis和密码P@ssw0rd123登陆数据库成功(我很怀疑P@ssw0rd123就是FTP密码)执行以下SQL语句:

上面的管理员表段名也是从include.php中找出来的,自己仔细看一下

得到:bWJi:bb376d2738b4561ad15973058f7a5b420a644cf2a29e997e9a656268c2bbfa9337ea7b2032129c8e74aa13cefeaf2294d1f7a784cb5d8864a7c80ba17a10f83b

我了个去,这么长的密文,跟md5看来是没关系了,直接逆向恐怕更不可能了

那咱们就分析分析他的加密方式,根据他的加密方式,咱们自己制作一个密码,直接给他改密码好了,然后用咱们自己的密码登陆后台

这中间有个clean_field()函数,这个函数在function.php中,其实看名字就知道是去空格等操作了,所以我们直接忽视
上面的加密方式中有个SALT,那就先找SALT
在include.php文件中:

这么长的SALT,如果不提前知道,怎么能跑的出来密码。不过好在我们已经知道了

假定我要将密码设置为:silic,那么根据他的算法,加密前先和SALT混合,就是:
Th1sSp3rL0ngStr1ngW1llPr0t3ctMyUs3rsAg@1nst1ns3cur3P@ssw0rdssilic

然后看看怎么进行hash加密
看了这行代码:

应该是sha512八九不离十了。于是将
Th1sSp3rL0ngStr1ngW1llPr0t3ctMyUs3rsAg@1nst1ns3cur3P@ssw0rdssilic进行SHA512加密以后就得到:c42c6c5c1e85c1ed0237576d4ff8ef3a7c145455a350fd43a489ce92f62f0633484b8b0c9b0ba8f5cad4401ef1c5285b6396d24ba144616127f2376d61459a6a

得到了我们特定的密码的加密,然后就该修改数据库密码为我们的密码了。
在数据库中执行SQL语句:

就将后台的登陆密码修改为silic了

但是这还没有结束,因为我们的目的是取到Webshell
(其实这是图省事,因为咱们目的就是给他挂挂首页,取到Webshell足矣。但是。。。千万别抱这种想法,因为这个网站目测不提权是改不了主页的)

在登陆后台前,需要注意一个地方:

这里的用户名字段是pangalan,但是用户名是经过了base64加密的,数据库中的pangalan字段数据是bWJi,实际上的密码需要经过base64解密,解密后得到实际登陆用户名为:mbb
用户名解出来了,密码自己给他改上去了。登陆后台

后台很简陋(但是很牛逼,居然会封ip,而且从头至尾居然封了我好几个ip,最后一不小心把index.php文件删了,也算是解了封我ip的气)

拿到webshell的话,发现只有一个fileedit.php可以加以利用,其他都是纯数据库操作
我看了半天没看明白怎么用,两个输入框,左边长右边短

还是仔细分析一下代码:

仔细搜一下,果然又有一个密码验证,当POST的变量comment为密码时,就可以操作文件了

这次看清楚了,应该是没有加密了,直接密码就是:L@br@d0r
再来看一下这个功能框里面的源码,看看哪个是comment变量:

第一个输入框是文件名(titlepage变量),第二个输入框是密码(comment变量)
当第二个框的变量通过了系统的密码验证,就将第一个变量接收并读取这个文件

那么第一个框输入test.php第二个框输入L@br@d0r就能修改test.php这个文件了

done。

[via@习科论坛-Mr.Cool]