网络安全 频道

[攻防手记]IT168攻防大赛漏洞分析及修补

    IT168 专稿】大家好,我是陆羽,最近无意中发现了这个活动,所以就来看看,下面是我的简单漏洞分析和修补报告。

    活动地址:http://59.151.29.110/index.asp
    使用程序:冠龙科技多风格企业网站管理系统
    下载地址:http://www.glgk.com/dfg.rar

    这里我只分析和修补漏洞,不提供最后的32位md5社工过程。
    好,我们开始:
    1. 检测是否存在旁注;
    2. 分析是否存在现在比较流行的注入漏洞;
    3. 后台地址已知,尝试是否可以’or’=’or’绕过验证;
    4. 使用工具或者手工检测是否存在上传;
    5. 检测后台是否存在可以插入一句话木马的漏洞;

    1,3,4,5均告失败,最后手工检测发现ProductShow.asp?ID=102存在注入点,http://59.151.29.110/ProductShow.asp?ID=102’返回提示不存在商品。继续使用工具提示存在注射,通过猜解得到后台的帐号密码。
   
    帐号admin
    密码77169


    如果通过手工注射没找到注射点的兄弟是否有直接考虑社工?猜到密码是和IT168合作的华夏有关?呵呵网页中很多的版权,还有连接地址都直接指向的www.77169.com,使用得到的密码,顺利进入后台。

    很happy的发现使用的是ewebeditor 在线编辑器,呵呵,查看源代码,得到ew的路径是admin\Editor,大家应该都尝试了ewebeditor常见的漏洞了吧?

    漏洞1.长传漏洞,允许上传asa文件,但是需要在后台添加模块,添加允许上传asa类型
    否则提示:

    上传类型过滤了asp,但是没有过滤asa,这个是ewebeditor的早期版本存在过滤不完整漏洞,但是默认数据库db/ewebeditor.mdb被改名了,而且ewebeditor的管理登陆页面admin_default.asp也已经被删除了,所以使用后台添加asa是不可能的,还好我们发现原来在上传文件模块,允许上传asa文件。

    但是在这里我最早开始检测的时候,发现不管是在“产品管理”、 “下载中心”还是其他允许上传文件的栏目里,都无法上传asa ,仅管提示上传成功了,连名字都给你了,开起来还是无法访问。进入上传文件管理。发现不存在刚才上传的asa文件。

    一开始以为是IT168官方把权限设的太死弄的,结果发现原来只有新闻管理上传文件的目录Uploadnews 目是有写权限的。所以我们在新闻管理的地方可以上传写入asa木马,于是上传得到webshell。

    得到webshell以后我们来回想下,大赛要求:

    得到webshell并不是我们最终的成果,因为得到这个webshell是在太容易了,截图里的那2句话告诉我们,要得到指定文件。就是要得到藏在很深目录里的保存通关后联系方式的rar文件,还有保存密码用的inc文件。呵呵,不废话。经验告诉我,文件应该隐藏在inc目录或者 admin目录里,当然大家也可以使用asp写一个搜索站内文件的程序,搜索出所有*.rar和*.inc的文件。好多asp木马好像都有带这个功能,海洋2006貌似就有。这里就不演示了。我们直接来到admin/inc目录。

    发现目标文件hacker.rar 下面还有一个it’spassword.inc呵呵。一看就是保存密码的文件,我们把hacker.rar文件下载下来。然后查看it’spassword.inc里保存的32位md5密码为
892183d93e9bc438eba95c501b04eb24。

    这里破解的办法有很多,暴力破解(下辈子也出不来,那个X小云写的md5碰撞不知道有没人尝试过?或许可以哦)、google hack? 搜索没结果!cmd5.com查询?抱歉 Not Found!最后还是社工吧。有没发现比赛里带有规律?后台密码是77169 华夏的域名,数据库里管理员名字也有一个huaxia。华夏是这次活动的合作伙伴,同样是合作合作伙伴的还有中国X黑客小组,所以密码社工的话肯定是和“IT168”、“华夏”、“ 中国X黑客小组”有关的呵呵。这个就是比赛关键的地方了——社工。最后的密码是 hackerit168。

    一开始没办法上传的时候逼我不得不到官方下载程序来分析。结果居然让我发现,一个任意文件目录浏览漏洞。

    通过分析admin/Editor/uploadfile.asp文件居然发现对外部提交的内容居然没有任何的过滤。

    这段代码大家发现什么?EW用来管理上传文件的程序是通过request来获取操作的参数的
Action=后面是提交的地址和参数,因为是提交到uploadfile.asp文件本身,所以直接用了
<form action='?id=" & sStyleID & "&dir=" & sDir & "&action=del' method=post name=myform>
Id是使用的模板iD,Dir则为路径,Action=del表示执行删除操作,只要我们提交一段特定的参数,就可以直接跳转浏览任意目录,比如我们提交http://59.151.29.110/admin/Editor/uploadfile.asp?id=&dir=../

    则马上来到了admin目录,

    因为每次我们点返回上一级目录的时候,注意到地址栏都会吃掉一个../,所以我们多提交几个../ 就可以顺利返回到根目录,我们构造提交http://59.151.29.110/admin/Editor/uploadfile.asp?dir=../../
点返回上层。就来到根目录了。根据经验,我们开始到inc和admin目录寻找目标文件,最后得到

    Hacker.rar就是我们要的文件,32位md5加密的密码保存在it’spassword.inc。这里比较郁闷的事情是,比赛官方把服务器设置的太死。不允许执行未知的扩展名。所以无法直接在浏览器里直接查看it’spassword.inc,即使知道了,一个不可破解的32位md5给你有意义吗?所以大家还是考虑社工吧。这里不做其他说明。废话不多少。我们开始修补漏洞。

    漏洞修补

    首先第一个:sql注射漏洞
    漏洞存在文件:ProductShow.asp
    我们发现代码

    使用的request()方式获取 id这个参数,然后完全不加过滤就直接提交给数据库。存在很明显的注入漏洞。但是同样的问题我们发现在其他页面也存在。可是其他页面却不存在注入漏洞,而且我从官方下载来的ProductShow.asp文件也同样不存在注入漏洞。到底是怎么回事?一开始还想要去好比赛官方直接拿他那份修改过的。呵呵。后来考虑到是否ProductShow.asp的包含文件中存在的注射漏洞?

    比较官方下来的ProductShow.asp和比赛官方服务器上的ProductShow.asp

    发现顶部调用的文件被修改了<!--#include file="Inc/SysProduct.asp" -->被修改成了<!--#include file="Inc/SysProduct.asp" -->于是分析到目录里找到了这2个文件,再次进行对比

    终于发现了问题所在,原来这里的sysproduct1.asp把用来防止sql注射的检测文件check_sql.asp去除了,于是讲代码补上。在sysproduct1.asp的顶部加入<!--#Include File="Check_Sql.asp"-->,即可防止注入了。关于check_sql.asp这个文件中使用的过滤防注入的方法,这里就不做详细的说明了。有兴趣的朋友可以google一下相关的文章。

    这里给大家提示一个写程序的小技巧,现在注入是每个程序员最担心的漏洞,但是平时在写程序的过程中,如果对每个文件的每个参数都去过滤防止注入的话,显然费时费力,不但加大了程序开发的难度,更容易出现疏漏。所以“冠龙科技多风格企业网站管理系统”在这点做的不错。

    漏洞2:上传过滤不严格漏洞
    漏洞存在文件:admin\Editor\Upload.asp
    存在漏洞的代码部分如下

 

    说明很清楚,只过滤了asp文件,完全不考虑其他可执行的程序,记事本开启Upload.asp找到这段漏洞代码将其替换为:
    sAllowExt = UCase(sAllowExt)
    Do While InStr(sAllowExt, "ASP") or InStr(sAllowExt, "CER") or InStr(sAllowExt, "ASA") or InStr(sAllowExt, "CDX") or InStr(sAllowExt, "HTR") or InStr(sAllowExt, "php") or InStr(sAllowExt, "jsp")
    sAllowExt = Replace(sAllowExt, "ASP", "")
    sAllowExt = Replace(sAllowExt, "CER", "")
    sAllowExt = Replace(sAllowExt, "ASA", "")
    sAllowExt = Replace(sAllowExt, "CDX", "")
    sAllowExt = Replace(sAllowExt, "HTR", "")
    sAllowExt = Replace(sAllowExt, "PHP", "")
    sAllowExt = Replace(sAllowExt, "JSP", "")

     Loop
    这样就过滤掉 asp asa cer cdx htr php jsp等文件类型了其他大家自己发挥咯。

    漏洞3:任意目录浏览
    存在漏洞文件:admin\Editor\uploadfile.asp
    admin\Editor\ Admin_UploadFile.asp
    存在漏洞的代码段:

    漏洞存在原因:
    使用了request的方法来获取参数,允许用户直接从浏览器地址栏提交参数。
    解决方法一:改用request.form()获取。如果在本地构造一个form会不会一样继续浏览?所以抛弃。
    解决办法二:使用程序自带的过滤。
    如果你尝试过直接在地址栏输入后台文件名的话,你会发现是不被允许的。这段过滤的代码存在在admin/admin.asp里,所以,我们只要在uploadfile.asp和Admin_UploadFile.asp文件的顶部加上<!--#include file = "../admin.asp"-->,这样做可以避免从外部提交参数,就彻底解决这个任意目录浏览的问题,当然我们还要考虑,如果存在XSS怎么办?那还不是可以自己构造一个内部连接?是的,这个我也考虑了。所以在后台添加新闻的地方测试了下
 


    然后点预览,得到的结果一样。


 
    好分析结束,如果还有什么遗漏,还有错误的地方,欢迎大家指证、交流。

0
相关文章