渗透基础之SQL注入

SQL 注入是WEB安全领域中的一种常见的攻击方式。

注:其实xss[跨站脚本攻击]也是对HTML的一种注入哦

什么是注入,这要先了解到SQL注入的发家史,SQL注入第一次出现是在1998年的黑客杂志《Phrack》第54期,一名叫做rfp的黑客发表的一篇文章中,之后注入攻击被大众所知。

也可以去自行百度,去官网下载

累死了,给个支持呗,您长期以来的新任是我们前进的动力

我们是渗透云笔记,是个非营利公众号

我们致力于分享学习的过程

去帮助那些与我们一样在安全路上的朋友们

如果条件允许的话,请帮忙宣传

同学们长期的关注,才是我们前进的动力

在这里,由衷的感谢你们。

全体作者鞠躬

谢谢自2005年后随之WEB安全的不断提高,SQL注入漏洞也急剧减少,同时变得更加难以检测与利用,但是这阻挡不知去细心的发现它

SQL注入是怎么产生的

  • WEB开发人员无法保证去过滤所以提交的数据
  • 数据库未做相应的安全配置
  • 攻击者利用发送给SQL服务器的输入参数构造可执行的SQL代码(可加入到get请求、post请求、http头信息、cookie中)

环境搭建概括[注意概括两个字哦,我要整你们一下]

这里推荐这个环境软件,很不错,比其他的软件更容易上手,软件连接后台回复124获取

在下载公众号工具库里的环境分享里的DVWA

或者可以进入github下载: https://github.com/ethicalhack3r/DVWA

下载后是这个样子滴

这个样子滴然后点击config文件夹

敲黑板:在GitHub下要进入config进行数据库设置,还有文件名尽量与教程一样,截图中config文件里有两个文件,是在对比,修改留有php后缀名的即可。

打开之后就可以自行修改数据库用户名与数据库密码了哦[注;因为启动环境的不同,非教程启动环境的同学可以修改,如果按照教程一步步来的话请勿修改]

本教程数据库账号密码如下

账户:root

密码168168

打开网站是这个样子滴[注在启动默认环境里要注意自己的8080端口是否被占用哦]

点击重置数据库

注;这不是乱码这不是乱码,是游览器的翻译插件,未来更加直白地讲解所以我使用英文版

输入账号密码就进入咱的环境了

点击创建数据库会跳转到DVWA的登录界面,DVWA的默认用户名是"admin",密码“password”登录。[敲黑板,不要用数据库账号密码登陆哦]

注;如果Web返回消息会出现乱码,进入\DVWA-1.9\dvwa\includes 打开DVWA目录includes文件夹中dvwaPage.inc.php,将dvwaPage.inc.php中charset=utf-8全部更改为charset=gb2312然后保存。

打开之后是这个样子的

看不懂没关系先放一张汉化后的帮助理解

还有的汉化错的,真是汗颜

设置难易度

依次点击,测试之前先查看源代码

<?php

if( isset( $_REQUEST[ 'Submit' ] ) ) {
    // Get input
    $id = $_REQUEST[ 'id' ];

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    // Get results
    while( $row = mysqli_fetch_assoc( $result ) ) {
        // Get values
        $first = $row["first_name"];
        $last  = $row["last_name"];

        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
    }

    mysqli_close($GLOBALS["___mysqli_ston"]);
}

?> 
发现这条查询语句$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

综合整体代码发现并没有对其实现过滤的一个机制,那就好办了

回到之前的页面输入1,发现查询成功

输入1 and 1=1也查询成功

这样输也成功,为什么?

看一下查询语句

SELECT first_name, last_name FROM users WHERE user_id = '$id';";

我们输入语句后会成

SELECT first_name, last_name FROM users WHERE user_id = '1' and '1' = '';";

找到不同之处了吗这就是典型的字符型注入

在这里不去太过详细的去讲这个玩DVWA网上的教程很多,这里只把安装的坑点列出来,在这里着重讲原理多一些[不知道整到没有(小声逼逼)]

同学们闲暇时间可以对照网上的教程去游戏

可能现在有人说了,哇,一步步按教程来的,怎么说不玩就不玩了呢,不讲怎么玩DVWA那讲什么,其实,我也是有想法的,搭建一下实验环境,

乐呵乐呵,但是大佬们看得懂,小白们还是一知半解啊,我们则终于对小白的......

情不自禁又打一波广告,快点讲吧,要不有人说我废话多了。

注入攻击的分类分为两种[这里引用了张炳帅的WEB深度剖析一书,我的WEB启蒙书推荐给你们,别抬杠啊,告诉你们]

  • 数字型注入
  • 字符型注入

首先数字型注入形如这样的 www.sssss.com/tist.php?id=12

就可以猜测是否有数字型注入

测试流程

在域名后添加 '

英文状态下的单引号这时假设SQL语句如下

select * from admin id=12'

他肯定会因为SQL语句的不正确而报错

这证明了他把咱提交的单引号代入数据库去查询了,那么就好办了,现在一些网站的SQL防御机制大多数对单引号进行过滤从而去防御SQL注入的攻击

那咱常见的and 1=1 与and 1=2 是干什么的啊

这个要看两个语句

select * from admin id=12 and 1=1

select * from admin id=12 and 1=2

这两条语句有什么区别呢,其实最重要的就是真假的问题

and 1=1为真 添加域名后请求与不添加请求无差异

and 1=2 为假添加域名后请求与不添加请求有差异

那有人就开始问了什么语言,出现的最多呢,答案是ASP与PHP等弱类语言编写的程序中常常出现,弱类型语言会自动识别ID后面的数据类型如12为int型,12 and 1 = 1 属于string型

小提示[int型为整型,string型为字符串]

字符型注入

引用上方的语句做案例

"SELECT first_name, last_name FROM users WHERE user_id = '$id';";

看起来好复杂啊,没有事情,咱把它简化一下

SELECT first_name, last_name FROM users WHERE user_id = '$id';

这样还看不懂怎么办,没事我还能变[泪目]

如下我提交了admin

select name from users where id = 'admin'

上述环境中我们使用了

提交了1' and '1' = ''为值,这种提交方式只是 让双引号去闭合,避免他报错如下

select name from users where id = 'admin  'and '1’='1'

有小伙伴问为什么1被单引号圈起来而and不用呢,这里要说了and你可以先当做是个连接符 上述字符与数字一起提交会报错,用单引号引起来那么环境语言会识别为string型,这样不会报错哦

当然你也可以这样

select name from users where id = 'admin and1=1'

也可以这样

select name from users where id = 'admin 'and 1=1 --'

去注释这个单引号

这些的效果都是一样的

当然最简单的

直接丢进sqlmap去扫扫看呗

这样,虽然很简单但是很厉害,嘿嘿嘿。突然有一句话传来,啥是sqlmap

。。。。。。。。。

短暂沉默,我给你打包,首先要布置Python环境注意版本为2.7,别下3.的那个版本不对会报错的

然后设置环境变量如图

添加path

SQLmap下载链接

链接:https://pan.baidu.com/s/17Y_oM8cSOJCdUhweWCPrdg

提取码:wld2

Python

链接:https://pan.baidu.com/s/14_1Rfe8tnd_MkLAA7KLSow

提取码:ikss

原文发布于微信公众号 - 渗透云笔记(shentouyun)

原文发表时间:2019-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券