前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >渗透基础之SQL注入

渗透基础之SQL注入

作者头像
天钧
发布2019-07-26 15:53:22
8280
发布2019-07-26 15:53:22
举报
文章被收录于专栏:渗透云笔记渗透云笔记

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透云笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档