0x00 序言
厂商:74cms
下载地址:http://www.74cms.com/download/index.html

关于版本:
新版的74cms采取了tp3.2.3重构了,以是可知底层是tp,74cms新版升级是后台升级的,以是先将将升级方法。
注:此漏洞不用升级至最新版本也可利用。
0x01 74cms升级到最新版
1, 先辞官网下载 骑士人才系统根本版(安装包)
2, 将下载好的包进行安装
3, 进入后台点击查看如果不是最新版的话,请点击升级!
5, 如果是本地环境的话,会提示 域名不合法升级失落败,这个问题很好办理
6, 搜索文件74cms\upload\Application\Admin\Controller\ApplyController.class.php
7, 查找所有$_SERVER['HTTP_HOST'] 改为 http://baidu.com 即可
0x02 数据添补不然没得测试
注:这个漏洞须要在有职位数据的情形下,才能利用。正式环境中,由于都是有数据的以是直接注入即可。不过由于我们是测试环境以是须要我们自己添加一些数据来担保网站的正常运行
0x02.1注册商家账号方便测试
首先先注册一个商家用户然后发布一条,注册商家直接去后台注册最大略了
注册完成往后将此商家用户登录前台
登录完毕往后跳转到:http://74cms.test/index.php?m=&c=company&a=com_info
设置商家书息
然后跳转到:http://74cms.test/index.php?m=&c=Company&a=jobs_add
随便发布一条事情即可
0x02.2注册普通账号方便测试
一样的前台注册须要短信,我穷,付不起短信费
注册完成往后登录前台即可
注:一定要登录,由于数据量太少,不登录,过不去验证
0x03 sql漏洞演示
然后输入地址:
http://74cms.test/index.php?m=&c=jobs&a=jobs_list&lat=23.176465&range=20&lng=113.35038%27
注:x,y 不超过 1即可
详情页new BMap.Point 搜索出来的值便是 x,y 值
可能上面的内容有人会以为奇怪,便是这个url实战中你是怎么得到的?实在你可以这样。
这样的话只要点击完往后有数据 你在 lat lng 字段都可以正常的进行注入
Payload: http://74cms.test/index.php?m=&c=jobs&a=jobs_list&lat=23.176465&range=20&lng=113.35038 PI() / 180 - map_x PI() / 180) / 2),2))) 1000) AS map_range FROM qs_jobs_search j WHERE (extractvalue (1,concat(0x7e,(SELECT USER()), 0x7e))) -- a
剩下的自己注 :)
0x04 漏洞事理
老样子一步步剖析吧。
先从地址开始剖析
地址:http://74cms.test/index.php?m=&c=jobs&a=jobs_list
范例的mvc构造
m 层可以看到为空,我们可以打开目录
74cms\upload\Application\Common\Conf\config.php 查看DEFAULT_MODULE 参数
因此可以确定
M = home
C = jobs
A = jobs_list
翻译一下的意思便是 Home 目录 下面的jobs 文件里面的jobs_list 方法
跟进去
跟进来往后,创造我们的lng 参数并没有在jobs_list 方法,但是在外部的时候的却是这个类。
这是由于74cms 利用了 thinkphp 的 tag 也便是标签库驱动 。
以是我们在这里并没有看到干系的代码快,由于他是直接嵌了V层中实行也便是我们常说的视图层。
想理解这一块的
上官网下载thinkphp3.2手册 搜索tag
即可得到详细信息
跟进视图层进行查看
找到了视图文件:
74cms\upload\Application\Home\View\default\Jobs\jobs_list.html
根据图中的条件可得知详细目录名为
74cms\upload\Application\Common\qscmstag\jobs_listTag.class.php
解释我们的猜想是没有错的。
为了不摧残浪费蹂躏大家的韶光,我就只管即便选重点讲,避免摧残浪费蹂躏大家韶光!
这里我们须要理解一下。
首先是我们可外部掌握的值
以是终极我们符合条件的内容都会赋值为$this->params
知道这个接口,我们连续注入点,由于前面的东西有太多和我们的这个注入无关的东西了以是我们忽略掉
我上图中还圈出来的第二个圈圈,可以看到 $this->params[lat] 与 $this->params[lng] 赋值并且没有过滤给了$this->field 而大部分的php框架在 field 可掌握的情形下大部分都是有注入问题的,以是这里我基本可以通过履历确定,只要带入了进行查询那便是一个注入漏洞。
这里的布局方法知道这些即可,其他的都不是很主要
这里我们打印一下,终极处理的内容
好了知道这些前置条件往后我们连续。
在实行完这个布局函数往后,还会自动的实行run() 方法
0x05 修复方法
$this->field = \"大众id,ROUND(6378.1382ASIN(SQRT(POW(SIN((\公众.floatval($this->params['lat']).\"大众PI()/180-map_yPI()/180)/2),2)+COS(\公众.floatval($this->params['lat']).\公众PI()/180)COS(map_yPI()/180)POW(SIN((\公众.floatval($this->params['lng']).\公众PI()/180-map_xPI()/180)/2),2)))1000) AS map_range\"大众;
强转为浮点型,防止注入
作者:phpoop&先知社区