单引号导致的网站崩溃 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前面的网址补充完整。继续往下看,来到如下代码处:
|
这段代码就是让用户在修改个人资料时选择自己的性别,从正常的页面中我们可以看到,“性别”这一栏中是“男,女,保密”三个选项的单选框,那么我们又如何将恶意数据从“性别”这一栏写入呢?
选中上文中的这段代码,将其替换为“< input name="mem_Sex" type="text" size="36" value="0" >”,然后保存这个文本文档,接着将这个文本文档的后缀名改为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中的数据库连接地址.