目录
写在开头
第一步:主机发现和端口扫描
第二步:FTP渗透
第三步:Web渗透
第四步:ssh登录与提权
总结与思考
本篇博客根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。本文的打靶过程涉及到关于FTP匿名登录、strings命令、密码喷射crackmapexec、定时任务提权等。完整打靶思路详见:
「红队笔记」靶机精讲:Tr0ll - 没有大招的一次渗透,却包含10多种技巧。_哔哩哔哩_bilibili
本文针对的靶机源于vulnhub,详情见:
Tr0ll: 1 ~ VulnHub
下载链接见:
https://download.vulnhub.com/tr0ll/Tr0ll.rar
本靶机的目标是拿到/root下的proof.txt文件。下载成功后用vmware打开,跳出提示框请选择“我已移动该虚拟机”,然后设置为NAT模式,否则可能无法扫描到靶机!
靶机启动后的界面如下:
常规思路,不细讲了。有关主机发现和端口扫描的命令详见我的这篇博客中关于nmap的部分:渗透测试:主机发现和端口扫描的思路方法总结(nmap+ping命令+nc.traditional+伪设备连接)
nmap -sn 10.10.10.0/24
nmap --min-rate 10000 -p- 10.10.10.133
nmap -sT -sV -O -p21,22,80 10.10.10.133
nmap -sU --min-rate 10000 -p- 10.10.10.133
nmap --script=vuln -p21,22,80 10.10.10.133
扫描出来靶机的ip是10.10.10.133,仅开放了21,22,80三个端口,具体服务版本和操作系统扫描结果如下:
漏洞扫描也没太多发现,有几个目录枚举的文件出来:
入手点基本上就是80的Web和21的FTP,由于FTP的内容比较容易操作,因此我们先从FTP入手,尝试FTP匿名登录。首先匿名登录靶机FTP,输入anonymou,在输入密码的位置直接回车。
ftp 10.10.10.133
anonymous
直接登录成功。然后ls查看文件,发现有一个名为lol.pcap的文件,输入binary转化为二进制模式后把这个lol.pcap文件get下来。这里需要注意的是,如果目录下的文件不是文本.txt文件的话,需要先运行binary指令(即输入binary然后回车)转换为二进制格式,以保证通过FTP下载的文件不会损坏。
FTP再无其他信息,下一步就是对这个pcap文件的分析,先用file查看这个文件的类型信,就是个常规的包捕获文件。
file lol.pcap
如果分析包捕获文件的话,可能需要使用wireshark,这里只需要输入指令wireshark lol.pcap即可。此处我们重点是要关注这个pcap文件中的文本信息,因此我们只要关注其中的字符串即可,使用strings查看:
strings lol.pcap
其中的信息有很多。重点就是提到了一个名为secret_stuff.txt的文件,并显示了这个文本文件的内容:
RETR secret_stuff.txt
W150 Opening BINARY mode data connection for secret_stuff.txt (147 bytes). WWell, well, well, aren't you just a clever little devil, you almost found the sup3rs3cr3tdirlol:-PSucks, you were so close... gotta TRY HARDER!
大概就是说我几乎已经找到了sup3rs3cr3tdirlol,需要更进一步继续努力。sup3rs3cr3tdirlol是一种leetspeak的表达形式,就是类似于英语的象形文字,数字3就代表字母e,因此这个字符串的英文形式就是supersecretdirlol,由英语名字可以看到,这个文件有超级秘密目录lol的意思,估计这个字符串是一个比较关键的目录之类的吧,咱也不确定,一会Web渗透的时候试一试。
打开浏览器访问靶机ip,是一个表情包:
查看网页源代码也没啥收获,回到最初nmap进行漏洞脚本扫描的时候,有一个secret目录,我们进入看看:
啊这...感觉又被嘲讽了。再看一下扫出来的robot.txt
也没什么有用信息,那就试试刚才FTP渗透的pcap包中得到的哪个超级秘密目录。把sup3rs3cr3tdirlol作为一个目录,看看有没有信息:
果然是个关键的目录,里面有个文件rofmao,我们把他下载下来。wget下载链接或直接点击这个roflmao都可。接着先用file查看一下这个文件的信息:
是一个ELF32位的可执行文件,总之有很多信息,当我们拿到可执行文件的时候,不要贸然执行(可能会有安全问题)。我们再用binwalk看看有没有什么相关的捆绑文件。
binwalk roflmao
没有什么捆绑文件,下一步就是用strings查看这个可执行文件的字符串信息:
strings roflmao
果然信息有很多,其中有一些指令、编译信息,我们重点关注提示的文本信息Find address 0x0856BF to proceed,提示我们找到地址0x0856BF,0x0856BF是什么地址?有可能是内存地址,让我们构造溢出等poc,也有可能只是个url的地址。我们此处现在url试一试,将其视为一个web目录:
还真是个目录,里面又有两个目录,good_luck和this_folder_contains_the_password,我们挨个看,先进入good_luck中:
又一个文本文件which_one_lol.txt,我们把这个文件下载下来看一看:
查看发现,这可能是一些用户名,可能可以用于ssh登录,至于里面的ps-aux这种感觉又像是命令,管他呢,先保留下来。下面进入目录this_folder_contains_the_password,目录名就告诉我们这个文件中包含了密码:
里面果然有一个名为Pass.txt的文件,再把这个文件下载下来查看:
喜提一个密码Good_job_:) 可是这个密码是哪个账号的密码呢?可以枚举尝试,这里我们用crackmapexec的方法进行尝试。首次使用crackmapexec是在红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_Bossfrank的博客-CSDN博客
-u指定用户名的文件,-p指定密码的文件,--continue-on-success参数用于保证当寻找到首个账号与密码的对应关系后继续碰撞。
crackmapexec ssh 10.10.10.133 -u which_one_lol.txt -p Pass.txt --continue-on-success
非常遗憾,并没有找到对应关系,在进行了前五次尝试失败之后,后面的尝试都无法连接了,看看ssh做了安全措施,短时间内只能尝试五个账号的登录。没关系,我们再把剩下没有尝试ssh登录的用户名命名为一个文件,然后再次尝试账号和密码的碰撞:
可恶,竟然还是没有,这10个账号,没有一个账号的ssh密码是Good_job_:) 真是奇怪了。然后回看which_one_lol.txt这个文件,里面有一个账号比较可疑:
也就是genphlux这一行,他说肯定不是这一个,感觉此地无银三百两呀!我们再进行ssh密码喷射的时候,把这一整行视为一个ssh登录的用户(即genphlux < -- Definitely not this one),这回我们只用genphlux作为用户名,尝试使用密码Good_job_:) 进行登录:
可恶,依旧不对。刚刚的web目录的文件夹this_folder_contains_the_password提示这个目录存在密码呀,可咱们尝试了一圈,没有一个用户名能够使用密码Good_job_:)登录。那么如果这个提示没错的话,有可能Pass.txt文件名本身就是密码,因此我们再尝试用Pass.txt作为密码进行ssh密码喷射:
成功了!看来Pass.txt是用户overflow的ssh登录密码。下一步就是ssh登录了。
使用overflow账号登录ssh,密码是Pass.txt,成功登录:
ssh [email protected]
查看一些信息:
然后我们通过python增加shell的交互性:
python -c "import pty;pty.spawn('/bin/bash')"
然后sudo -l查看当前用户的权限:
提示这个用户不能允许sudo,此路不通。我们下一步就是看看有没有敏感信息,先看看有没有定时任务:
cat /etc/crontab
权限不被允许,无法查看。可能是有的。进入web目录/var/www/html查找一番:
也没有什么有用信息呀。那再进入home目录试试:
home目录进入只有troll一个目录!正当我准备进入troll查看的时候,突然ssh登录自动退出了!
必有蹊跷呀!很肯能是系统设置了什么定时任务,连接一定时长后自动退出,结合之前的crontab无法查看,定时任务应该是一个关键的点。重新登录ssh,发现/home/troll目录下啥也没有,我们可以再搜索搜索定时任务相关的日志cronlog,命令如下(其中2>/dev/null表示将错误信息扔掉,在搜索的时候,由于可能因为权限不被允许等原因,无法查找到结果,会有很多报错,因此添加2>/dev/null方便查看结果):
find / -name cronlog 2>/dev/null
发现cronlog在/var/log目录下,我们查看这个文件:
关键信息来了!这里有一个定时任务,会每两分钟运行一个名为cleaner.py的文件。我们搜索这个文件,找找在哪个目录下:
find / -name cleaner.py 2>/dev/null
发现该文件的位置是/lib/log/cleaner.py,查看这个文件:
这个文件可以执行系统指令(os.system)!会每两分钟执行对目录/tmp的删除,那么我们只要把os.system()中的指令修改为:
echo "overflow All=(All)NOPASSWD:ALL" >> /etc/sudoers
即可相当于为overflow用户追加了最高ALL权限,使用vim修改cleaner.py:
这个overflow的shell非常难用,尤其是使用vi和vim的时候,有很多诡异的现象,想正确操作os.system这一行还挺费劲的,再加上这个shell会几分钟自动退出,导致我登录了两三次才成功的修改成功。第一次出现echo "overflow All=(All)NOPASSWD:ALL" >> /etc/sudoers这样的提权命令是在红队打靶:pWnOS1.0打靶思路详解之ssh私钥破解+shellshock漏洞提权_Bossfrank的博客-CSDN博客
上篇博客是用shellshock漏洞在sudoers给某个用户追加了高权限,而我们这里是用到了定时任务,殊途同归。等待最多两分钟后,再次运行sudo -l,即可发现overflow的用户变为了最高权限:
然后运行sudo /bin/bash即可拿到root的bash:
进入/root目录拿flag:
至此打靶完成。
这个靶机也不复杂,但关键是有一些命令的操作。包括strings查看文件的文本信息、binwalk查看捆绑文件、file命令查看文件信息。如果不使用这些命令,可能会遗漏很多重要信息。在进行ssh登录寻找密码的时候,由于找到的密码无法匹配任何一个用户名,因此需要一些CTFer的脑洞,可能文件名就是密码。同时再初始进入ftp查看lol.pcap的时候,如果急于使用wireshark分析,可能会耗费很多时间,数据包也很多,不容易抓到重点。最后做一个打靶总结:
1.主机发现和端口扫描。
2.FTP渗透:匿名登录FTP,发现文件lol.pcap,用string命令查看其中字符串发现有一个提示sup3rs3cr3tdirlol,看名字很可能是个目录。
3.Web渗透:尝试访问目录sup3rs3cr3tdirlol发现了一个名为molfmao的文件,下载下来之后发现是个可执行文件,再用strings查看其中的字符串,发现有个地址0x0856BF,尝试把这个地址0x0856BF放入url中,成功发现了有关用户名和密码的信息。
4.SSH登录尝试:使用crackmapexec寻找ssh用户名和密码的对应关系,发现没有一个账号可以与我们找到的Pass.txt中的Good_job_:) 匹配,想到可能Pass.txt本身就是密码,再次经过crackmapexec找到了Pass.txt是用户overflow的ssh登录密码。
5.定时任务提权:登录overflow的shell后,sudo -l发现无法查看权限,一番搜索无果,查看定时任务crontab发现权限不够,shell过了一会自动退出了,提示存在计划任务。搜索cronlog,找到了定时运行的文件cleaner.py,该文件可以执行系统命令,修改这个文件的内容,等待定时任务执行之后即可提权。
到此这个靶机就讲解完毕了。靶机不难,总结不易,也有很多自己的思考,希望读者能够点赞关注多多支持!