

80 端口

31337 端口

分别访问扫描出的网页
说有三个不允许看的内容

尝试访问
第一个 flag

访问 .ssh 文件

继续根据提示访问

获取了三个 ssh 文件
在下载的 id_rsa_pub 公钥文件中发现了用户名

尝试利用 id_rsa 私钥文件免密登录
ssh -i id_rsa simon@10.4.7.142
提示权限太高

修改权限
chmod 600 id_rsa
再次登录
提示需要密码

john 解密
ssh2john id_rsa > pas
john pas

sudo -l

没权限
查找敏感文件

查找 suid 权限
find / -perm -u=s -type f 2>/dev/null

缓冲区溢出漏洞
此程序中
- 定义了一个长度为20的字符数组
buf作为输入缓冲区。- 使用
gets函数来读取用户的输入,并将输入存储到buf中。gets函数没有对输入的长度进行检查,如果用户输入的字符数超过了buf的容量,就会发生缓冲区溢出。- 之后,程序通过
strncmp函数将buf中的前5个字符与authorized数组中的内容进行比较。如果相等,则认为用户输入的是"Simon",程序会执行execve函数来执行/usr/local/sbin/message程序。- 如果输入的字符数超过20个,并且第20个字符以后的字符是合法的可执行命令,那么缓冲区溢出会导致程序执行第20个字符以后的命令。
这种缓冲区溢出漏洞的原理是,当用户输入的字符数超过了缓冲区的容量时,多余的字符会覆盖到缓冲区之外的内存区域。在这段代码中,覆盖到的内存区域包括了函数返回地址以及其他重要的数据。
由于
execve函数的调用是通过函数返回地址实现的,如果覆盖到的内存区域中的内容是合法的可执行命令,那么程序就会执行这段命令。
运行程序,输入
SimonAAAAAAAAAAAAAAA/bin/bash

提权成功