2018-05-08 漏洞1SQL注入

SQL注入的三种类型:
数字型
分析注入产生的原因:

访问测试地址:

http://192.168.3.35/sql/shuzi/index.php?id=1

输出页面

image.png

查看源码文件

<html>

<head>

<meta charset="utf-8" />

<title>sql注入测试</title>

<style>

body{text-align:center}

</style>

</head>

<body >

<br />

<?php

    include "./conn.php";

    $id=@$_GET['id'];//id未经过滤

    if($id==null){

        $id="1";

    }

    mysql_query('set names utf8');

    $sql = "SELECT * FROM sqltest WHERE id=$id";//定义sql语句并组合变量id  

    $result = mysql_query($sql,$conn);//执行sql语句并返回给变量result

    if(!$result)

    {

        die('<p>error:'.mysql_error().'</p>');

    }

    echo "<font size='10' face='Times'>sql注入测试</font></br>";

    echo "<table border='2'  align=\"center\">";

    echo "<tr><td>id</td>";

    echo "<td>标题</td>";

    echo "<td>内容</td>";

    echo "</tr>";
`
    //遍历查询结果
`
     while ($row = mysql_fetch_array($result))

    {

    if (!$row){

        echo "该记录不存在";

        exit;

    }

            echo "<tr>";

            echo "<td>".$row[0]."</td>";

            echo "<td>".$row[1]."</td>";

            echo "<td>".$row[2]."</td>";

            echo "</tr>";

    }

    echo "<td  colspan=\"3\" >sql语句:&nbsp;>".$sql."</td>";

    echo "</table>";

    ?>

<a href='./admin.php'>点我进入后台</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<a href='http://pmd5.com/'>md5解密可以点我</a>

</body>

</html>

$id=@$_GET['id'];//id未经过滤 接受参数id的值,ID的值没有做任何限制的情况下输出到下面sql语句中并带入数据库进行执行

    if($id==null){

        $id="1";

    }

    mysql_query('set names utf8');

    $sql = "SELECT * FROM sqltest WHERE id=$id";//定义sql语句并组合变量id  

    $result = mysql_query($sql,$conn);//执行sql语句并返回给变量result

操作相当于直接在数据库执行SQL语句,并输出到页面。

SELECT * FROM sqltest WHERE id=1

利用方法:

1.判断方法:

正常访问

image.png

1.单引号直接报错

主要是因为单引号在大部分数据库中作为分隔符,所以当单引号带入数据库内就会导致数据库内sql语句被截断导致数据库错误返回。

image.png

2.and 1=1 和 and 1=2 返回数据不同的判断

(原理:1=1 为true的条件,1=2 为false的条件,and 连接前面查询为真的条件形成 true and true 和 true and false 两种判断。)

image.png
image.png

Or 也是使用上面的方法进行判断,但当在数字后输入or 1=1为永真条件,所以返回应该是所有的数据,or 1=2 返回的为真条件查询的结果。

image.png
image.png

3.加减法判断,加减法的判断主要是用于判断sql注入为数字型和字符型。也可以根据参数后的数字和字符进行判断。

但因为+号在sql语句中有特俗含义所以需要使用url编码%2b 减号则不用。

image.png
image.png

字符型
字符型

源码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>sql</title>

</head>

<body bgcolor="">

<font size="3" color="#000000">

<?php

  $name=$_GET['username'];

  $conn=mysql_connect("127.0.0.1","root","root");

  if($conn){

    echo "连接数据库成功!";

  }

  echo "<br>";

  mysql_select_db('test',$conn);

  $sql="select * from user where username = '$name'";

  $result=mysql_query($sql);

  while($row = mysql_fetch_array($result))

    {

       echo "用户ID:".$row['id']."<br >";

       echo "用户名:".$row['username']."<br >";

       echo "用户密码:".$row['password']."<br >";

       echo "用户邮箱:".$row['email']."<br >";

    }

     mysql_close($conn); //关闭数据库连接

   echo "<hr>";

   echo "你当前执行的sql语句为:"."<br >";

   echo $sql;

?>

</body>

</html>

数据库:

-- phpMyAdmin SQL Dump

-- version phpStudy 2014

-- http://www.phpmyadmin.net

--

-- 主机: localhost

-- 生成日期: 2017 年 11 月 01 日 07:19

-- 服务器版本: 5.5.53

-- PHP 版本: 5.4.45

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

--

-- 数据库: `test`

--

-- --------------------------------------------------------

--

-- 表的结构 `user`

--

CREATE TABLE IF NOT EXISTS `user` (

  `id` int(3) NOT NULL AUTO_INCREMENT,

  `username` varchar(10) COLLATE utf8_unicode_ci NOT NULL,

  `password` varchar(32) COLLATE utf8_unicode_ci NOT NULL,

  `email` varchar(32) COLLATE utf8_unicode_ci NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;

--

-- 转存表中的数据 `user`

--

INSERT INTO `user` (`id`, `username`, `password`, `email`) VALUES

(1, 'admin', '3f230640b78d7e71ac5514e57935eb69', 'asaass@qq.com'),

(2, 'admin1', 'e10adc3949ba59abbe56e057f20f883e', '123@123.qq.com'),

(3, 'asaass', 'e10adc3949ba59abbe56e057f20f883e', 'asd123@qq.com'),

(4, 'asaass', 'asaass123', 'asaass@qq.com');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

原理:

$query="select user from users where username='$_GET['name']'"; 

数据库执行的语句为

select user from users where username='name'

当开发人员对用户的输入过滤不严,造成了用户可以通过输入SQL语句控制数据库,就会产生SQL注入漏洞。

基于字符型的SQL注入即存在SQL注入漏洞的URL参数为字符串类型(需要使用单引号表示)

字符注入区别于数字注入的主要区别在于sql语句的闭合

注入的实现在于跳出字符串的限制,实现sql语句在执行

字符型和数字型的区别:

字符:除数字之外都是字符

数字:0-9

两种SQL语句的区别:

数字型: SELECT 列 FROM 表 WHERE 数字型列=值

字符型: SELECT 列 FROM 表 WHERE 字符型列=’值’

注入点的判断:

返回正确和错误进行判断,1=1返回正常页面,1=2 错误返回错误页面。表示存在

username=xxx' and 1=1 --'

username=xxx' and 1=2 --'

或者

uername=xxx' and '1'='1

uername=xxx' and '1'='2

或者

username=admin' or '1'='1     返回其他查询信息

username=admin' or '1'='2     返回正常页面相等  注:返回数据多少判断是否存在
image.png
image.png

搜索型

源码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>搜索型注入</title>

</head>

<body bgcolor="">

<font size="3" color="#000000">

<?php

  $pwd=$_GET['pwd'];

  $conn=mysql_connect("127.0.0.1","root","root");

  if($conn){

    echo "连接数据库成功!";

  }

  echo "<br>";

  mysql_select_db('test',$conn);

  $sql="select * from user where password like '%$pwd%' order by password";

  $result=mysql_query($sql);

  while($row = mysql_fetch_array($result))

    {

       echo "用户ID:".$row['id']."<br >";

       echo "用户名:".$row['username']."<br >";

       echo "用户密码:".$row['password']."<br >";

       echo "用户邮箱:".$row['email']."<br >";

    }

     mysql_close($conn); //关闭数据库连接

   echo "<hr>";

   echo "你当前执行的sql语句为:"."<br >";

   echo $sql;

?>

</body>

</html>

1.原理:

首先我们看SQL语句:

select * from user where password like '%asaass123%' order by password

执行的sql语句带入字符因为通过%%通配符匹配模糊查询,想要执行SQL语句需要跳出搜索字符的限制。然后构造后执行SQL语句。

2.判断搜索型注入的方法:

1 搜索keywords‘,如果出错的话,有90%的可能性存在漏洞;

2 搜索 keywords%,如果同样出错的话,就有95%的可能性存在漏洞;

3 搜索keywords% 'and 1=1 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=1)看返回的情况

4 搜索keywords% 'and 1=2 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=2)看返回的情况

5 根据两次的返回情况来判断是不是搜索型文本框注入了

%'and 1=1 and '%'='

%' and 1=1--'

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

推荐阅读更多精彩内容