A. 利用sqlmap注入時,發現站點對空格進行了過濾,可以使用什麼腳本來繞過
0x00 前言
現在的網路環境往往是WAF/IPS/IDS保護著Web 伺服器等等,這種保護措施往往會過濾擋住我們的SQL注入查詢鏈接,甚至封鎖我們的主機IP,所以這個時候,我們就要考慮怎樣進行繞過,達到注入的目標。因為現在WAF/IPS/IDS都把sqlmap 列入黑名單了,呵呵!但是本文基於sqlmap 進行繞過注入測試,介紹至今仍然實用有效的技巧,以下策略在特定的環境能夠成功繞過,具體是否繞過,請仔細查看輸出的信息。
0x01 確認WAF
首先我們判斷該Web 伺服器是否被WAF/IPS/IDS保護著。這點很容易實現,因為我們在漏掃或者使用專門工具來檢測是否有WAF,這個檢測,在nmap 的NSE,或者WVS的策略或者APPSCAN的策略中都有,我們可以利用這些來判斷。在此我們,也介紹使用sqlmap 進行檢測是否有WAF/IPS/IDS
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --thread 10 --identify-waf#首選
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --thread 10 --check-waf#備選
0x02 使用參數進行繞過
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --random-agent -v 2 #使用任意瀏覽器進行繞過,尤其是在WAF配置不當的時候
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --hpp -v 3#使用HTTP 參數污染進行繞過,尤其是在ASP.NET/IIS 平台上
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --delay=3.5 --time-sec=60 #使用長的延時來避免觸發WAF的機制,這方式比較耗時
root@kali:~# sqlmap -u "http://yiliao.kingdee.com/contents.php?id=51&types=4" --proxy=211.211.211.211:8080 --proxy-cred=211:985#使用代理進行注入
B. php如何防止sql注入
額,這是我老師給的答案
答:過濾一些常見的資料庫操作關鍵字,
select ,insert,update,delete,and,*等或通過內系統函數addslashes對內容容進行過濾
php配置文件中register_globals=off;設置為關閉狀態.(作用將注冊全局變數關閉);如接收POST表單的值使用$_POST['user'],假設設置為ON的話$user才接收值
sql語句書寫的時候盡量不要省略小引號(tab上面那個)和單引號
提高資料庫命名技巧,對於一些重要的欄位根據程序的特點命名,使之不易被猜中
對於常的方法加以封裝,避免直接暴漏SQL語句
開啟PHP安全模式safe_mode=on
打開magic_quotes_gpc來防止SQL注入,默認為關閉,開啟後自動把用戶提交sql查詢語句進行轉換把"'"轉換成"\'"
控制錯誤信息輸出,關閉錯誤信息提示,將錯誤信息寫到系統日誌
使用MYSQLI或PDO預處理
C. 如何防止SQL注入,並通過腳本來過濾SQL中注入的字元
如果您通過網頁獲取用戶輸入的數據並將其插入一個MySQL資料庫,那麼就有可能專發生屬SQL注入安全的問題。
本章節將為大家介紹如何防止SQL注入,並通過腳本來過濾SQL中注入的字元。
http://e.cnzz.cn/201509/96863872.shtml
D. sql注入如何繞過單引號過濾非常感謝!
sql注入現在基本上不用了 後台稍微處理下sql注入就沒有作用了。放棄吧。
E. 【模擬環境】SQL注入時如何繞過逗號和百分號
UNION 跟 UNION ALL 是交集跟並集的寫法
select * from a union select * from b --這種是A表與B表結果的交集寫法,合並專表,沒有重復行;屬
select * from a union all select * from b --這種是A表與B表結果的並集寫法 有重復行;
a表和b表結構一樣,合並兩個表,沒有重復行,如果要重復行用union all
F. 如何手動繞過SQL注入過濾器
開始。運行.services.msc,服務管理的,這么多服務,那如何找到那個才是呢,
那可以去運行VM虛擬機,會提某某服務被禁用,請開啟的字樣,那首字母按下即可。
G. 求助,關於SQL注入如何繞過SELECT語句的過濾
1,:轉換來個別字母大小寫,無自效
2:輸入SESELECTLECT之類的語句來代替SELECT,無效
3:用轉義的URL編碼來代替SELECT(不知道這么表述對不對,就是%後面跟上16進制的ascii碼……),無效
4:用/**/來隔開SELECT中的各個字母,無效
H. 【web安全】怎麼進行sql注入
1.POST注入,通用防注入一般限制get,但是有時候不限制post或者限制的很少,這時候你就可以試下post注入,比如登錄框、搜索框、投票框這類的。另外,在asp中post已被發揚光大,程序員喜歡用receive來接受數據,這就造成了很多時候get傳遞的參數通過post/cookie也能傳遞,這時如果恰好防注入程序只限制了get,因此post注入不解釋
2.cookie注入,原理同post注入,繞過相當多通用防注入
3.二次注入,第一次注入的數據可能不會有效,但是如果將來能在某個頁面裡面被程序處理呢?注入來了……
4.csrf,適合後台地址已知並且存在已知0day,可以試試用csrf劫持管理員來進行操作(這招其實不屬於sql注入了)
5.打碎關鍵字,比如過濾select,我可以用sel/**/ect來繞過,這招多見於mysql
6.有時候也可以sELeCT這樣大小寫混淆繞過
7.用chr對sql語句編碼進行繞過
8.如果等於號不好使,可以試試大於號或者小於號,如果and不好使可以試試or,這樣等價替換
9.多來幾個關鍵字確定是什麼防注入程序,直接猜測源碼或者根據報錯關鍵字(如"非法操作,ip地址已被記錄")把源碼搞下來研究
10.記錄注入者ip和語句並寫入文件或資料庫,然而資料庫恰好是asp的,插馬秒殺
I. SQL注入問題
通用的asp防注入程序.杜絕SQL注入隱患.提升網站安全
一般的http請求不外乎 get 和 post,所以只要我們在文件中過濾所有post或者get請求中的參數信息中非法字元即可,所以我們實現http 請求信息過濾就可以判斷是是否受到sql注入攻擊。
IIS傳遞給asp.dll的get請求是是以字元串的形式,當傳遞給Request.QueryString數據後,asp解析器會分析Request.QueryString的信息,然後根據"&",分出各個數組內的數據所以get的攔截如下:
首先我們定義請求中不能包含如下字元
'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|xp_cmdshell
各個字元用"|"隔開,,然後我們判斷的得到的Request.QueryString
具體代碼如下
程序代碼:
Dim sql_injdata
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|xp_cmdshell"
SQL_inj = split(SQL_Injdata,"|")
If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
If InStr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write("<script language=""javascript"" type=""text/javascript"">alert(""提交的信息中包含非法字元!"");</script>")
Response.End()
End If
Next
Next
End If
這樣我們就實現了get請求的注入的攔截,但是我們還要過濾post請求,所以我們還得繼續考慮request.form,這個也是以數組形式存在的,,我們只需要再進一次循環判斷即可。代碼如下
程序代碼:
If Request.Form<>"" Then
For Each SQL_Get In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
If InStr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write("<script language=""javascript"" type=""text/javascript"">alert(""提交的信息中包含非法字元!"");</script>")
Response.End()
End If
Next
Next
End If
現在已經實現了get和post請求的信息攔截,只需要在conn.asp之類的打開資料庫文件之前引用這個頁面即可。
實例:
Option Explicit
'//SQL注入攔截開始
Dim SQL_injdata, SQL_inj, SQL_Get, SQL_Data
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = Split(SQL_Injdata,"|")
If Request.QueryString<>"" Then Call KillSQLinj(Request.QueryString)'//get方式攔截
If Request.Form<>"" Then Call KillSQLinj(Request.Form)'//post方式攔截
Sub KillSQLinj(fashion)
For Each SQL_Get In fashion
For SQL_Data=0 To Ubound(SQL_inj)
If InStr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write("<script language=""javascript"" type=""text/javascript"">alert(""提交的信息中包含非法字元!"");</script>")
Response.End()
End If
Next
Next
End Sub
'//SQL注入攔截結束
要是回答的內容有問題,或認為不妥,請發送網路消息給我,消息內容加上本頁網址哦。。
·
J. sql注入 form過濾怎麼繞過
我常用的三種方法復:
1,參數制過濾,過濾掉 單引號,or,1=1 等類似這樣的 。
2,使用 參數化方法格式化 ,不使用拼接SQL 語句。
3,主要業務使用存儲過程,並在代碼里使用參數化來調用(存儲過程和方法2結合)