php代码审计-sql注入初级篇

概述

代码审计顾名思义就是检查源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞,并提供代码修订措施和建议。这篇文章的目的是为了让小伙伴们对php代码审计有一个基本的了解,采用的代码都是自己写的仅仅能体现出漏洞所以会略显简洁。并且这次文章的主要内容为代码审计所以不会写太多的注入语句,更多的是对代码的分析,有兴趣的同学可以百度查查资料。

环境要求

phpstudy和一篇简单易懂的php源码

sql注入

SQL 注入(SQL Injection) 是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。 主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。 简而言之,SQL 注入就是在用户输入的字符串中加入 SQL 语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的 SQL 语句就会被数据库服务器误认为是正常的 SQL 语句而运行,攻击者就可以执行计划外的命令或访问未被授权的数据。

一、union查询注入

union查询注入是MySQL注入中的一种方式,在SQL注入中说了注入漏洞存在的相关条件,而联合查询注入这种方法需要满足查询的信息在前端有回显,回显数据的位置就叫回显位。

源代码

<?php

        require 'db.php';

        header('Content-type:text/html;charset=utf8');

        $username=$_POST["username"]; //获取用户输入

        $password=$_POST["password"];

        $dl="SELECT * FROM xs WHERE username='$username' and password='$password'"; //登录界面后台处理

        $ck=mysqli_query($db,$dl);

        $row = mysqli_fetch_array($ck);

        if($row) {

      echo "你的账号为:".$row['username'];

      echo "你的密码为:".$row['password'];

        } else {

echo "你的输入" .$username;

}

这段代码一上来加载了一个文件db.php根据名字可以判断是连接数据库文件,接着设置编码为UTF8,然后获取用户输入的账号和密码设置为变量,赋入sql查询语句判断账号密码是否输入正确,利用query执行sql语句,再用mysqli_fetch_array把结果作为数组输出到row中。最后用if语句判断sql语句是否执行,执行成功输出用户的账号和密码,执行失败会输出用户输入的账号。代码没有任何防御,有两个回显位所以直接union注入。

注入语句为-1' union select 1,2  #

二、sql盲注

所谓的盲注就是在服务器没有错误回显的时候完成的注入攻击。服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息

源代码

<?php

        require 'db.php';

        header('Content-type:text/html;charset=utf8');

        $username=$_POST["username"]; //获取用户输入

        $password=$_POST["password"];

        $dl="SELECT * FROM xs WHERE username='$username' and password='$password'"; //登录界面后台处理

        $ck=mysqli_query($db,$dl);

        $row = mysqli_fetch_array($ck);

        if($row) {

            echo "你的输入" .$username;

        } else {

echo "输入错误" ;

}

代码和上面联合查询基本一样只是执行成功以后没有了回显,只返回成功和失败,我们可以使用用布尔盲注通过返回构造的注入语句正确与否来获取数据库里的信息。

注入语句

1' and length(database())=3 # 

三、sql延时注入

时间差注入也叫延迟注入,是一种盲注的手法提交对执行时间铭感的函数sql语句,通过执行时间的长短来判断是否执行成功,比如:正确的话会导致时间很长,错误的话会导致执行时间很短,这就是所谓的高级盲注。

源代码

<?php

        require 'db.php';

        header('Content-type:text/html;charset=utf8');

        $username=$_POST["username"]; //获取用户输入

        $password=$_POST["password"];

        $dl="SELECT * FROM xs WHERE username='$username' and password='$password'"; //登录界面后台处理

        $ck=mysqli_query($db,$dl);

        $row = mysqli_fetch_array($ck);

        if($row) {

            echo "你的输入" .$username;

        } else {

            echo "你的输入" .$username;

}

这次执行成功和失败返回的结果一模一样布尔盲注的方法也不行了,我们可以使用延时注入语句让浏览器语句执行成功的同时延时五秒,延时注入一般用if()加sleep语句配合burpsuite。

注入语句

1' and if((length(database())=3),sleep(5),1) #

四、报错注入

报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。

源代码

<?php

    require 'db.php';

    header('Content-type:text/html;charset=utf8');

    $username = $_POST["username"]; //获取用户输入

    $password = $_POST["password"];

    $dl = "SELECT * FROM xs WHERE username='$username' and password='$password'"; //登录界面后台处理

    $ck = mysqli_query($db, $dl);

    $row = mysqli_fetch_array($ck);

if($row)

{

  echo "登录成功";

  }

else

{

print_r(mysql_error());

}

}

报错注入就是利用返回错误信息的函数,把注入的结果通过错误信息返回来,这里可以看到代码执行失败以后会调用报错函数,可以直接在账号框里构造报错注入代码,下面示范采用的updatexml语句。报错注入常用的有floor,updatexml,extractvalue这三种。

注入语句

admin") and updatexml(1,concat(0x7e,(select database()) ,0x7e),1) #

五、cookie注入

Cookie注入简单来说就是利用Cookie而发起的注入攻击。从本质上来讲,Cookie注入与传统的SQL注入并无不同,两者都是针对数据库的注入,只是表现形式上略有不同罢了。

先来看看源码


require 'db.php';

header('Content-type:text/html;charset=utf8');

$username=addslashes($_POST['username']);

$password=MD5($_POST['password']);

$dl="SELECT * FROM xs WHERE username='$username' and password='$password'"; //登录界面后台处理

$ck=mysqli_query($db,$dl);

$row = mysqli_fetch_array($ck);

if($_POST['login']){

if($row) {

setcookie('uname',$row['username']);

$cooke=$_COOKIE['uname'];

$ql="select * from xs where username='$cooke'";

$qk=mysqli_query($db,$ql);

$row1 = mysqli_fetch_array($qk);

if($row1){

echo "nidecooke 创建成功";

}

}

}?>

可以看到cookie注入和上面的代码有很大的区别。前面一大段是正常的登录判断语句,账号用了addslashes()语句进行转义,密码通过MD5加密。而cookie语句在if($row)主体里,也就是说只有我们绕过了或者输入正确的账号和密码才会去创建cookie。创建cookie以后带入了sql语句里直接执行。从代码上面来看注入位置不在登录框在cookie里。cookie查询语句执行完以后也没有回显,所以我们在cooki位置用布尔盲注试试。先用burpsuite抓包就能看见cookie了。切记在注入的时候一定要输入正确的账号和密码也就是if($row)需要返回正确的值下面的语句才会执行。


可以看到uname=1 uname是上面代码中创建的cookie我们只需在在这个位置进行布尔盲注就可以拿到想要的数据。

构造这个获取当前数据库长度语句返回成功说明当前数据长度为3.


sql注入初级篇就完结了,这一篇只是小打小闹让对代码审计还不了解的同学有一个初步的认识,接下来几篇会为大家讲解一些比较难和有防御措施的代码。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容