目录
写在开头
近期b站上看到大佬红队笔记的视频,详述了其打靶的思路,感觉豁然开朗。不同于简单的writeup,红队笔记在渗透测试的每一步中的做法都有阐释。逻辑明确,纵然是简单的靶机也有很多知识点,故此做一个总结。红队笔记的视频在下方:
「红队笔记」靶机精讲:W1R3S 1.0.1 - 细节多到即使对于纯萌新也能无感入圈。_哔哩哔哩_bilibili
我是个刚刚开始学习渗透的菜鸟,想找些靶机练习却没有很好的入门思路。正好看到了这篇红队笔记的视频,故这里做一个打靶的复现,将打靶的全过程、踩到的坑都做一些记录。不同于简单的靶机writeup,本文也详细阐释了每一步操作的思路,为什么这么做,当有许多分岔路口的时候该怎么尝试。并非直通flag,而是有逻辑的寻找flag。
本文打靶的靶机是vulhub上的,链接见
靶机下载链接见:
https://download.vulnhub.com/w1r3s/w1r3s.v1.0.1.zip
下载好之后,用vmware打开即可,别忘了将网络适配器设置为NAT模式,否则可能在主机发现模块找不到靶机ip
开启虚拟机,可以看到靶机是一个Ubuntu的登录界面:
我们开启kali,准备开始打靶。首先是第一个阶段,主机发现。
第一步:主机发现
先看一下自己的kali的ip:
ip a
易得kali的ip为192.168.200.131,所在网段为192.168.200.0/24,因此进行主机发现的时候,扫描此网段即可,命令如下,其中-sn表示采用ping的方法进行扫描,这是主机发现的常规思路(-sP是老版本nmap的ping扫描,建议还是用-sn)。
另外顺道一提,红队笔记大佬说道,不建议在渗透过程中使用kali的root权限,还是用普通用户更好,需要root的时候sudo即可,在进行扫描阶段的许多nmap指令都是需要root权限的,因此我就直接用root了,大家不要模仿!更规范的方式是每次都sudo。
nmap –sn 192.168.200.0/24
由nmap的扫描结果可发现靶机的地址为192.168.200.139 。实际测试过程中,应当在靶机上线之前进行一次扫描,靶机上线之后再扫描一次,对比发现上线的主机,更方便确认靶机的ip。下一步即针对这个ip进行端口扫描。
第二步:端口扫描
已经拿到靶机的ip了,那我们下一步就是用nmap对这个ip进行端口扫描,看看开放了哪些端口和服务。命令如下:
nmap –min-rate 10000 –p- 192.168.200.139
这个代码是以最小速率10000对全部端口(1-65535)进行扫描,10000是权衡的结果,数字过大扫描速度快,但容易遗漏端口,数字过小则扫描时间过长,经验表明10000就是扫描的合适速度。-p是端口参数,-p-表示对所有端口进行扫描。理论上应该对靶机的ip扫描两次,对比结果,保证没有信息的遗漏。
扫描结果表明,开放了21,22,80,3306这四个端口,我们再具体看看这几个端口的服务和操作系统版本。命令如下:
nmap –sT –sV -O –p21,22,80,3306 192.168.200.139
-sT表示进行TCP扫描(三握手),-p表示待扫描的端口(后跟待扫描的端口21,22,80,3306)-sV表示探测开放服务的版本,-O表示探测操作系统版本,扫描结果如下:
可以看到每个开放端口的服务版本和操作系统linux。紧接着我们再进行UDP扫描,保证没有遗漏信息。虽然UDP端口暴露的攻击面是比较小的,但在信息搜集阶段就应该搜集较全的信息,当TCP端口没有找到突破口的时候,说不定UDP也是一条路。 命令如下:其中-sU表示使用UDP扫描
nmap –sU –p21,22,80,3306 192.168.200.139
UDP扫描结果如上图,结果表明3306端口关闭,其他三个端口是开放/被过滤状态。然后我们再使用nmap中自带的脚本vuln进行漏洞扫描。nmap里面的脚本会对端口的历史常见漏洞进行扫描探测,如果这一步就能发现可利用的漏洞,对后续的操作会很有启发。 --script=vuln表示使用脚本vuln进行扫描,vuln是vulnrability的缩写,这个脚本也会更新,不断加入新的漏洞检测。
nmap –script=vuln –p21,22,80,3306 192.168.200.139
如上图所示,nmap的漏洞扫描发现21,22,3306都没什么漏洞,80端口发现一个DOS拒绝服务攻击的漏洞,同时还发现了一个CMS为Wordpress的登录页面。然而拒绝服务这种攻击方式对我们没啥启发,一会可以重点关注一下Wordpress的cms有啥漏洞。
下一步我们就要进入渗透过程了。从哪里入手呢?分析如下:
一共有四个端口:21,22,80,3306。
(1)80端口是http的web端口,且已经知道里面可能有wordpress的cms,具有较大的攻击面。这应该是最有可能的突破口
(2)22是ssh远程登录端口,通常没啥漏洞,但是也不绝对,有可能存在弱口令或者暴力破解登录啥的,但这不是我们直接入手的角度,应该放在最后考虑。
(3)21端口是ftp文件传输协议的端口,有可能存在匿名登录,FTP服务器中也可能有一些信息,也有一定的攻击面。FTP的突破口比较单一,操作比较容易。
(4)3306端口是MySQL数据库的端口,前面漏洞扫描也并没有发现太多的思路,不过如果能登录数据库,应该也有信息。
综上,80端口是最有可能的突破口,但是由于FTP可能存在匿名登录,21端口的操作比较容易,我们不妨先试试21端口,再看80端口,接着看3306数据库,最后尝试22远程登录。
综上,我们首先对21端口的FTP进行尝试。
第三步:FTP渗透
先试试FTP能不能匿名登录,用户名anonymous ,密码为空,输入密码的时候直接敲回车。
ftp anonymous
非常nice,还真登录进来了,那我们找找里面有什么线索先ls看看有啥文件或者目录,发现三个目录,都是有读和执行权限。
我们一个一个进入看看。
cd content
ls
content目录中有三个文本文件,不管那么多,都先下载下来。这里需要注意的是,如果目录下的文件不是文本.txt文件的话,需要先运行binary指令(即输入binary然后回车)转换为二进制格式,以保证通过FTP下载的文件不会损坏。如果本身就是txt文件,则运不运行binary都可。下载的命令是:
mget 0*.txt
然后再进入第二个目录docs
cd ../docs
ls
发现又有一个文本文件worktodo.txt,也拿走。
get worktodo.txt
再进入第三个目录new-employees
cd ../new-employees
ls
也有一个文件,我们把employee-names.txt也拿走
get employee-names
所有东西都拿走了,我们可以溜了。回到kali,看看刚才拿到的文件内容。
cat 01.txt就显示了一句话,没有太多启发:
cat 02.txt 发现里面有两行东西。其中一行疑似md5,另外一行疑似base64编码。
我们用hash-identifier识别一下01ec2d8fc11c493b25029fb1f47f39ce,看看这行是不是md5。
hash-identifier '01ec2d8fc11c493b25029fb1f47f39ce'
还真是md5,那我们再看看下一行:
很遗憾,这一行没啥结果,那么估计并不是某种加密方式,估计就是个编码方式
下面要进行解密了,找个在线网站,试试能不能把md5解密了。谷歌搜索一下md5 crack,找个能破解md5的网站,如下
Decrypt MD5, SHA1, MySQL, NTLM, SHA256, SHA512, Wordpress, Bcrypt hashes for free online
解密成功,结果为一句话:
This is not a password
感觉也没啥信息,耍我呢?下一步我们再看看哪个疑似base64编码的一行,kali中直接进行base64解码
echo 'SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==' | base64 –d
其中-d意思是进行base64解码
直译的意思是说:是容易的,但不是那种容易。一头雾水,管他呢,再看下一个文件吧。
cat 03.txt结果是这个公司的文字logo,好像也没啥用
那我们再看看cat worktodo.txt
这是个啥玩意,感觉像倒着的英文,可以截个图反过来看看,或者直接吧脑袋倒过来。为了结果显示清晰,我在google上搜索了updownside text,看看有没有在线解密网页。确实有,网址如下
Upside Down Text | Flip Text, Type Upside Down, or Backwards Text
先把第一行复制进去
ı pou,ʇ ʇɥıuʞ ʇɥıs ıs ʇɥǝ ʍɐʎ ʇo ɹooʇ¡
仅仅进行上下镜像,勾选Upside Down Effect,结果如下:
喜提一句话:I don’t think this is the way to root
直译是说,我并不认为这是通往root的路。估计靶机作者暗示我们走FTP这条路获取root权限的前途不大。再试试下一句话吧,这回上下翻转和左右翻转都得勾选。
....punoɹɐ ƃuıʎɐןd doʇs ‘op oʇ ʞɹoʍ ɟo ʇoן ɐ ǝʌɐɥ ǝʍ
又喜提一句话:we have a lot of work to do, stop playing around...
直译意思是:我们有许多事要做,别到处晃悠了!整的我又是一头雾水。我们再看最后一个文件,cat employee-names.txt
拿到了职工的一些信息和职位,说不定有用,先存着。其实这个信息再渗透测试过程中可能是有用的。针对每个人的名字和职位,我们就可以做针对性的渗透。比方说经理Naomi的权限说不定会更高,Web Design网页设计者可能在web开发中有一些自己的习惯。HR是我们社工的主要对象等等。FTP就先探索到这里了。下一步我们看看web有啥问题。
第四步:Web渗透
对web渗透就是针对80端口,此处我们先浏览器访问一下靶机ip,发现了一个apache服务,通常这个页面不会有太多的漏洞。 但也不排除可能在这个页面有后门啥的,我们先干别的,不细究这里了。
之前进行nmap漏洞扫描的时候,提示我们可能有Wordpress的CMS,那么我们先要找出这个cms部署在哪里,可以先进行目录爆破。可选用的工具有dirsearch,dirb,gobuster,feroxbuster等等。我这里先用dirb试一试,如果不行再换,命令为:
dirb http://192.168.200.139
扫描结果很长,我们可以看到扫描出了三个子目录adminstrator,javascript和wordpress。如下图:
我们最感兴趣的应该是Wordpress这个cms系统,因此浏览器先访问http://192.168.200.139/wordpress试试
结果访问之后,网址就跳回localhost了,我们将localhost手动修改为192.168.200.139,还是会跳回这个页面,看来也没太大希望。那么我们再访问http://192.168.200.139/adminstrator试试吧,j结果页面自动跳转到了/administrator/installation
这个页面就有意思了,暴露了CMS是Cuppa,同时这是一个cms安装界面。由于安装界面暴露了权限和配置信息,安装是有写权限的,这个界面很可能有漏洞,我们要重点关注。点一下next试试。发现了一个安装和配置页面:
题外话:数据库名这个栏目的databases他拼错为databas,这有可能是一个特别特征。因为错误的拼写具有独特性,可能通过互联网搜索这个拼错的信息可能会得到针对性的结果。如下图,不过我们在打靶的时候就先不管这个错误了。
我们自己设立一个数据库名cuppaTest、密码helloword和邮箱a@b.com,你可以随便设置,下面这个管理员账户的账号和密码都是默认admin我们不做修改,点击next试试。界面如下:
很遗憾,没太大收获。反复试了几次,也不成,显示安装失败installation error。上述这个界面还有可能有SQL注入漏洞,但是可能性不大,我们先不整了。但我们还想找这个adminstrator界面的漏洞。可以先到kali中的searchsploit找找有没有cuppa这个cms的漏洞 :
searchsploit cuppa
发现有一个远程文件包含漏洞,我们把这个25971.txt下载下来看看怎么利用 :
searchsploit cuppa –m 25971.txt
下载之后我们cat 25791.txt如下图所示,发现了这个文件包含漏洞,这个cms用request函数进行了文件包含,可能造成文件包含漏洞泄露信息。
图中有一行是:
http://target/cuppa/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd
url中的target应该就是靶机的ip,我们换为192.168.200.139试试,浏览器访问:
http://192.168.200.139/cuppa/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd
很遗憾,路径不存在。那我们再试试其他路径吧,最后发现如下的路径的页面有所不同,应该是读取到了文件。
http://192.168.200.139/administrator/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd
然而这个界面并没有暴露出/etc/passwd的信息。那我们再会看一下漏洞利用的25971.txt,发现可能会有编码问题,我们借助curl请求一下,进行url编码,试一试能不能暴露出/etc/passwd的信息
此处相当于是用curl方法取访问http://192.168.200.139/administrator/alerts/alertConfigField.php ,且参数为urlConfig=../../../../../../../../../etc/passwd 。请求时要对数据进行url编码,指令为:
curl --data-urlencode urlConfig=../../../../../../../../../etc/passwd http://192.168.200.139/administrator/alerts/alertConfigField.php
显示了一些前端代码,往下翻,成功发现了/etc/passwd文件
在现在linux系统中,passwd文件里面所有账户的密码都是用x代替的,真正的密码(加密后)放在/etc/shadow中,同样的curl方法,我们改一下参数,看看etc/shadow
curl --data-urlencode urlConfig=../../../../../../../../../etc/shadow http://192.168.200.139/administrator/alerts/alertConfigField.php
成功找到了密码的hash结果,再shadow文件中,有三个账号有密码,分别是root,www-data和w1r3s
第五步 密码爆破
我们试试能不能对密码进行解密。先把这些存为一个名为hash的文件。把含有上述三个用户名的hash后的密码复制,vim创建一个文件,名为hash(随便起名),至于其他的行,可以不用复制进hash,仅仅保留www-data,w1r3s,root三行即可,我这里图复制方便,把一些其他的行也复制进hash里面了,创建的hash文件如下
然后我们用john解密,可能需要一定时间
john hash
john显示可能是使用了sha512加密,由于我第一次破解时忘了截图了,下图为红队笔记视频中的运行结果:
成功爆破出了两个密码,www-data的密码也是www-data,w1r3s的密码是computer。root密码始终爆破不出来,等待良久后ctrl + c先退出算了。
注意:如果重复破解相同的密码哈希,john是不会显示结果的,可以用john –show hash ,查看历史破解记录,可得到两个密码。
通常情况w1r3s的权限应该是高于www-data的,因此我们用w1r3s远程登录ssh的22端口,试试能不能用密码computer登录。
ssh w1r3s@192.168.200.139
输入密码computer 成功登录了!
此处已经拿到了w1r3s的权限,非常nice!
第六步 提权
先看看w1r3s自己是什么权限 :
whoami
uname –a
id
sudo -l
发现w1r3s已经具有了all:all:all的权限,那么我们能够以系统的权限运行/bin/bash
sudo /bin/bash
成功获得了root权限!如下图:
成功拿到了flag!
至此打靶完成。
总结与思考
打靶完成后,再进行一下总结。这个打靶的全过程思路如下:
1.主机发现,nmap扫描发现靶机是192.168.200.139
2.端口扫描,发现开放了21,22,80,3306四个端口。并针对这四个端口进行漏洞扫描,发现有名为wordpress的cms
3.综合考虑决定先从21端口FTP开始入手,进行匿名登录,查看里面的信息,发现了许多.txt文件,包括了一些提示信息和人员名单。虽然这些信息最后貌似没有用上,但我们打靶的时候还是要把这些信息记录下来,毕竟在当时我们不知道这些信息是否有利用价值。
4.web渗透,查看web页面,发现apache默认界面,扫描目录发现有wordpress,adminstrator,javascript,逐一访问,发现adminstrator子目录的cms为cuppa,用kali中的searchsploit进行利用,发现文件包含漏洞,/etc/shadow暴露了登录密码。
5.使用join破解密码hash,得到登录账号w1r3s的密码为conputer,尝试对22端口进行ssh登录,成功登录,查看权限,发现已经是系统权限了。
6.提权,以系统权限运行bash,成功升级为root。
如果就打靶拿flag的角度来讲写writeup,似乎只要端口扫描出80,直接爆破目录,查找cuppa的cms漏洞并利用即可,完全不需要进入ftp。 然而这样并没有渗透思考的全过程,本文详细阐述了整个打靶思路和过程。
感谢读者阅读。如果喜欢这篇文章,欢迎点赞转发或私信。后续我也会继续写写红队打靶的博客,希望大家多多支持。