SQL注入 通過注入得到已知使用者名稱的密碼

2021-08-13 04:25:16 字數 2249 閱讀 1693

·php**如下:

<?php 

//error_reporting(0);

$link =mysqli_connect('localhost', 'root', 'root', 'test');

if (!$link)

$link->set_charset("utf8");

function clean($str)

return htmlentities($str, ent_quotes);

}$username =@clean((string)$_get['username']);

$password =@clean((string)$_get['password']);

$query='select *from user where username=\''.$username.'\' and password=\''.$password.'\';';

echo "

";$result=mysqli_query($link,$query);

if(!$result ||mysqli_num_rows($result) < 1)

$row = mysqli_fetch_assoc($result);

echo "hello".$row['username']."

";echo "yourpassword is:".$row['password']."

";?>

分析:(1)觀察**行:

$query='select *from user where username=\''.$username.'\' and password=\''.$password.'\';';

var_dump($query);

其中username和password都是字串型別的變數,所以輸入的內容是包含在字串內的,即包含在兩個單引號中間。

(2)如果使用引數是整型的那樣的注入方法,結果會很尷尬……

後面一串全都顯示出來了……

(3)右鍵檢視網頁源**,那麼這串**的形式就顯示出來了,使用者名稱密碼都被單引號包含起來了,說明使用者名稱密碼都是字串,在最後還有

乙個';'……

(4)在遇到了帶有引號的sql查選時,本能的反應就是要逃脫單引號,要麼就是生成乙個單引號,要麼就是省略掉乙個單引號。生成單引號的方法我們試過了已經不能實現了,因為htmlentities函式的作用,那麼就要考慮省掉乙個單引號,上網查閱資料,省掉單引號的一種方法就是使用反斜槓,而本題正好沒有過濾掉反斜槓,那麼就考慮使用反斜槓。這屬於一種sql注入方式——沒有正確過濾轉義字元。

此處參考**:

例如,將使用者名稱變數(即username)設定為:

a' or 't'='t(為什麼要這樣寫?應為name='username' -->name='a' or 't'='t' 這樣單引號剛好閉合)

,此時原始語句發生了變化:

select * from users where name = 'a' or 't'='t';

如果這種**被用於乙個認證過程,那麼這個例子就能夠強迫選擇乙個合法的使用者名稱,因為賦值't'='t永遠是正確的。

於是我試圖構造邏輯式進行注入,記得學長上課的時候講過用1=0和1=1的判斷注入點,那麼1=1是乙個恆成立的邏輯式,跟上面的形式有一丟丟相似,於是又上網查閱相關資料。

相關**:

利用編碼技術進行繞過是本題的乙個思路,or 1=1即%6f%72%20%31%3d%31

試一試,發現,咦?成功了????於是試了試1=0……emmmm不行,再試試2=2?3=3?……凡是恒等式,n=n均可以,n為整數。

通過User agent進行SQL注入

宣告 本文由bypass整理並翻譯,僅用於安全研究和學習之用。我發現了乙個sql注入漏洞 dashboard datagov csv to json,可以通過user agent http請求頭利用它。我沒有從資料庫中提取任何資料,我已經使用具有算術運算的sleep sql查詢確認了漏洞。sleep...

SQL注入 報錯注入

乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...

SQL注入 報錯注入

sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...