1.探测ip地址
netdiscover
netdiscover -r ip/mask //探测指定网段 如:netdiscover -r 192.168.31.1/24
2.测试连通性
ping 172.19.27.167
能够ping通,接下来使用nmap扫描一下开放的端口
3. 使用nmap扫描主机开放端口,版本信息
nmap -sV 172.19.27.167 // nmap各参数详解:[这里](https://blog.csdn.net/qq_26090065/article/details/80285088)
端口信息如下
4.探查大端口信息
ip:port
使用浏览器访问,特别是大端口
5.探查隐藏页面
查看网页源码也未发现有用信息,这时需要使用工具来探查隐藏页面
dirb http://172.19.27.167:31337
发现了几个页面,可以访问看一下具体内容,其中在robots协议文件中发现一个特殊文件
172.19.27.167:31337/robots.txt
访问发现第一个flag
172.19.27.167:31337/taxes/
查看.ssh,
172.19.27.167:31337/.ssh
这可能是ssh密钥与公钥,于是尝试在地址后加上看能否发现相关文件
172.19.27.167:31337/.ssh/id_rsa
172.19.27.167:31337/.ssh/authorized_keys
果然,能够下载密钥文件,同样的方法,访问下载 (关键字)authorized_keys,至于公钥id_rsa.pub就不需要了
而接下来的文件中也没什么有用的信息了,进行下一步。
6.查看文件寻找用户信息
在关键字authorized_keys文件中发现了用户名,接下来就可以通过ssh使用用户名 simon 来远程登录
7. 尝试使用私钥进行远程连接
先查看一下文件的权限
然后尝试使用密钥进行远程访问
提示 没有权限,给id_rsa授权
chmod 600 id_rsa
授权后再次连接,提示要输入密码
走到这一步,就需要再找到密码才能进行远程登录了,接下来,可以尝试从ssh密钥中解密出密码来
8.解密ssh密钥
使用ssh2john将id_rsa的密钥信息转换为john可识别的信息
python /usr/share/john/ssh2john.py id_rsa > john
然后使用字典解密john中的信息
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules john // --pipe管道前一个输出作为后一个的输入, --rules 使用john文件中的规则进行解密
解出密码为:starwars
9.再次尝试连接
成功登录到目标主机
10.寻找第二个flag
到root目录中,发现flag.txt 却由于没有root权限而无法打开,此时需要将用户权限提升到root权限
但是在read_message.c中发现了flag2
11.提权
查找具有root权限的文件
find / -perm -4000 2>/dev/null
发现有一个命令与root/目录下的read_message.c文件同名,很有可能有关系,接下来仔细看一下read_message.c的代码
可以发现,如果输入的字符串前5个字符与“Simon”一样,就会提示相关信息,并且调用执行程序函数execve来执行程序。用来存放输入字符的数组buf[20] 长度只有20,那么如果我们使数组溢出,是否会执行溢出后的命令呢?
果然,进入了root用户权限下,接下来可以获取flag3了
成功获取3个flag。