打开靶机,如图,并不知道密码,所以无法登陆
打开kali,使用netdiscover命令 netdiscover -r 你的ip/24
命令来探测靶机,比如你kali的IP是192.168.153.54,那么输入netdiscover -r 192.168.153.54/24
注意的24代表探索IP的D段,表示子网位数,即子网掩码为255.255.255.0,转成二进制为:11111111 11111111 11111111 00000000,有24个1,如果24改成16,就可以探索IP的C段了,改成8,就能探索B段。有时候探测不到是网段的问题,一开始我没有探测到
后来发现是网络适配器的问题,桥接改为net
现在就可以了,192.168.199.163就是靶机
用nmap扫一下,发现开了一个特殊端口
dirb http://ip:port/
进行探测
用浏览器访问一下robots.txt目录
访问一下taxes看看
查看敏感目录.ssh
秘钥泄露,把秘钥和认证关键字下载下来
对id_rsa 赋予权限 chmod 600 id_rsa,ls -alh
查看权限,chmod 600 文件名
使用ssh2john 将id_isa密钥信息转换为john可以识别的信息,使用ssh2john时提示没有该命令,所以使用locate ssh2john 查看文件在那里,然后直接使用python直接执行。
命令john rsacrack
解出密码starwars
ssh -i 私匙 用户名/id@IP
,用户名在认证关键字中,登陆成功
什么也没有,进root目录看一下,发现flag.txt,没有读取权限
先查看一下具有root权限的文件:find / -perm -4000 2>/dev/null
发现也有一个read_message,运行read_message.c看一下
我们要执行read_message然后验证数组前5个字符,限定字符数为最多20个 ,前5个为Simon即可,之后再接/bin/sh提升下权限,最后有详解
读取flag
为什么没有权限却可以执行read_message呢?为什么也这么做呢?
read_message被设置了s属性,使得用户执行read_message时,具有文件拥有者的权限,这样在执行read_message时,实际上是以root权限执行的,所以当构造栈溢出时,通过字符串覆盖,把program[] = "/usr/local/sbin/message"的原内容替换成了program[] = “/bin/sh”。最终程序在执行时,就是通过root权限fork /bin/sh的程序。
我们所执行的任何行程,都是由父行程(parent process)所产生出来的一个子行程(child process),子行程在结束后,会返回到父行程去。这个现像在Linux 中被称为 fork 。我们执行这条语句的目的在于提升权限,因为执行完毕就返回到父进程root中。