1. 程式人生 > 實用技巧 >sqli-labs第十八題

sqli-labs第十八題

檢視題目


基於錯誤的請求頭注入

一個登入表單,顯示了ip地址。
測試一通毫無頭緒。。。看看原始碼

審計原始碼

使用者名稱和密碼都做了輸入檢查

if(isset($_POST['uname']) && isset($_POST['passwd']))

	{
	$uname = check_input($_POST['uname']);
	$passwd = check_input($_POST['passwd']);

提供正確的使用者名稱和密碼後,uagent,IP地址,使用者名稱會被插入資料庫中。

$sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
	$result1 = mysql_query($sql);
	$row1 = mysql_fetch_array($result1);
		if($row1)
			{
			echo '<font color= "#FFFF00" font size = 3 >';
			$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
			mysql_query($insert);

注入測試

首先要獲得一個使用者名稱和密碼
試了半天,一個也不對,直接去查資料庫

使用BP抓包,方便修改請求頭

在user-agent引數後加一個單引號,然後放走資料包,可以看到頁面報出一個錯誤

原始碼也看到了,直接構造payload:',NULL,(select updatexml(1,concat(0x7c,user()),1)))#
這裡先使用單引號閉合第一個引數,然後提供空的第二個引數,在第三個引數構造一個updatexml的報錯,最後閉合括號,註釋掉剩下的語句。
打卡BP,輸入使用者名稱,密碼後提交。在BP中修改請求頭的user-agent引數,然後關閉攔截。

成功爆出資料庫使用者名稱