covfefe
信息搜集
存活检测
详细扫描
后台网页扫描
80 端口
31337 端口
网页信息搜集
-
分别访问扫描出的网页
-
说有三个不允许看的内容
-
尝试访问
-
第一个 flag
-
访问 .ssh 文件
继续根据提示访问
-
获取了三个 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
提权成功
- 定义了一个长度为20的字符数组
总结
- ssh 私钥登录
- 缓冲区溢出提权