下载地址:https://download.vulnhub.com/corrosion/Corrosion.ova
1.配置环境
kali:NAT
CORROSION: 1:NAT
2.主机发现
我们通过粗略的扫描可以看到吧唧的ip为192.168.139.143
经过较为详细的扫描我们可以看出他开启了22ssh服务和80http服务
3.访问服务
这个http服务长得就很抽象
这样看起来没有那么抽象了,我们可以看到他是一个平平无奇的apeach服务器
我们扫描出了他的目录我们就挨个儿进行访问
访问/tasks目录时看到了这些东东,我们应该先想办法完整这些任务,但我此时毫无头绪,我决定进行一番沉淀
经过一番沉淀,我学会了使用dirsearch工具扫描目录的时候还可以使用-w参数指定扫描的字典,这里我把kali自带的DirBuster扫描工具中的字典整过来放在dirsearch目录下进行的扫描(DirBuster工具自带的字典目录为:/usr/share/dirbuster/wordlists)
我们访问这个目录发现他并没有什么用处,我们平时扫描网站都是python3 dirsearch.py -u http://ip/ -w 指定字典这样的命令,但是,我们这样子扫描的是网站的根目录,我们现在已经知道有个二级目录blog-post,我们就可以利用dirsearch进行继续扫描二级目录
我们挨个儿进行访问
这里我们访问到了/blog-post/archives/目录下有东东,reandylogs.php是空的,另外一个/blog-post/uploads是返回到了博客页面并没有什么特别的东东
经过一番沉淀之后我大概明确了思路,上文提到,有个tasks_todo.txt文件中第一个提示是什么玩意儿日志什么玩意儿的,关于日志,就有一个日志包含,所以我们应该尝试进行文件包含。那么在哪里包含?用什么包含?我学会了一个新的工具——ffuf,我们用ffuf工具进行模糊测试(FUZZ),这类似与爆破,因为我们将会使用字典去爆破指定位置。这条命令中我们使用了ffuf工具,-w是指定字典文件(/usr/share/wordlists/dirb/big.txt是linux自带的字典文件),-u是指定请求的url,这个url中的FUZZ就是占位符,他会依次进行请求字典中的值,所以他的请求将会是"URL?admin=/var/log/auth.log"、"URL?passwd=/var/log/auth.log"这样式儿的,至于/var/log/auth.log是日志文件之一用于存储用户身份验证和授权相关的信息(这里我是经过沉淀之后知道要包含这个文件的,正常的思路是准备一个字典爆破一下),幸运的是,我们找到了一个有效的变量file(ffuf下载参考:ffuf安装与使用教程-FancyPig's blog)
既然话已至此,那我们就记录一下怎么使用字典包含的吧
首先我们还是使用ffuf命令测试出变量为file,因为是文件包含,所以我们先随便包含一个文件测试出变量名为file
我本来开始也想用ffuf用字典爆破出来的,但是用ffuf的话不能像bp这样直观的看见每一个可以成功包含的文件的具体内容,这里成功爆破出来的/var/log/auth.log长的就很像字典(目录字典参考:https://github.com/ClutchReboot/SecLists/blob/fb4298a4cbcb59a337968f6eb812ec20dd3a6cc2/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt)
言归正传,我们在尝试访问他的时候发现他属实长了一副不太好审计的样子,我们这时候可以Ctrl+U查看源代码来查看,会相对来说比较好审计
上文我们提到/var/log/auth.log是存储用户身份验证和授权相关信息的文件,那我们在kali上尝试登录吧唧,看看这边是否有反应
可以看到这里记载了我们刚刚ssh三次尝试登录root的行为,这我们就应该想到我们可以写点儿东西进去利用——一句话木马
这里我们在ssh登录的时候趁机写入一句话木马
回到网站,传入对应的参数后我们可以看见他是成功RCE的了!我们就要想办法弹一个shell到本地,我们该怎么用命令执行进行rce呢?请出我们的老朋友——nc
可以看到我们成功的弹回了本地,取得突破性进展(好诶)
4.信息搜集
nc弹回来的shell长得有点丑,我们使用一系列方式操作一下,最后键入reset按下回车后即可拿到一个正常的交互式shell(可以用上下箭头切换历史命令,较为详细的原理在我之前的《vulnhub吧唧——RAVEN: 1》这篇文章中提到过)
言归正传,我们进行一番简单的信息搜集,可以看到他是ubuntu操作系统的吧唧,以及拥有/bin/bash权限的仅只有root
进行一番基本的信息搜集,我们暂时没有发现什么特别的东西
经过一番沉淀以及一个weber敏锐的嗅觉,这个文件用我那蹩脚的英语翻译过来是备份的意思,这个名字就很有说法的
我们直接就是把他下载到本地的kali,活学活用,直接用nc
这里我们成功的把他下载到了kali里面
5.密码爆破
/usr/share/wordlists/rockyou.txt是一个非常著名的密码字典,来源于曾经泄露的数据中,我的kali里面的这个字典被压缩了,不过没有关系,我们解压之后尝试爆破zip文件
我们可以看到已经成功解压文件(unzip filename.zip、tar -xvf filename.tar、gunzip -d filename.gz、bzip2 -d filename.bz2、xz -d filename.xz等等等等)
当然,我们还可以使用别的命令比如fcrackzip破解zip文件
同样我们得到了密码,randy:!randybaby
可以看到我们得到了一个密码,猜测是最开始randy用户的密码
运行了一下easysysinfo.c这个程序,他就是查看一些系统的配置,先放这儿
6.再次搜集
我们成功登录randy,我们进行一番基本的信息搜集
我们这里找到的user.txt应该是第一个flag
flag{98342721012390839081}
然后我们这里看得到randy可以无密码以root的权限执行/home/randy/tools/easysysinfo这个东东,这个文件名似曾相识
这个东东的运行结果跟刚刚easysysinfo.c的结果虽然不能说两模两样,简直就是一模一样
我们查看一下easysysinfo的源代码,是pyhton3.9写的,经过一番审计不难发现一个的试试——程序在执行的时候具有root的权限
那么我们就可以干一些坏坏的事情了
7.滥用变量
我们直接就是开始将但当前目录加入进当前环境变量中去
我们先是将/bin/bash写入当前目录的cat中,然后更改其权限,运行easysysinfo的时候调用到了cat命令的时候,他会在当前系统环境变量中寻找,因为是从左至右左结合,一找一个准儿,直接就是找到了我们的/bin/bash,以root的权限新开了一个shell就提权成功啦
直接就是拿到我们的flag
flag{4NJSA99SD7922197D7S90PLAWE}
8.gcc编译文件提权
我们回到最初的程序,既然randy可以无密码运行easysysinfo这个程序,那我们可以偷梁换柱,我们搜索了一下发现没有vim但是有vi,一样的,我们先用一个文本编辑器(我这里用的vi)写一个以root权限开启shell的脚本
我们编译后以root权限执行可以发现提权成功啦
总结:学会了一些新的命令,dirsearch可以-w指定参数列表还可以扫二级目录,ffuf可以进行模糊测试可以扫目录可以爆破变量名,还有日志包含,利用ssh写入一句话木马执行命令,nc反弹shell,/usr/share/wordlists/是kali自带的密码目录,zip2john爆破压缩包密码,fcrackzip爆破zip文件密码,滥用环境变量用cat提权,还有gcc编译成可执行文件覆盖对应的文件以至提权,总的来说学到的小知识点非常的多,很开心能学到这些东西,多多积累啦
新手上路,请多指教