mysql 联合查询
寻找注入点
1.在参数后边加 ‘, “, ), )), ‘),’)), “),”)), %,%),%))等等尝试进行闭合 看是否会报错。报错就一定存在sql注入。
2.在参数后边加 and 1=1,and 1=2, or 1=1,or 1=2, Xor 1=1, Xor 1=2, ^ 1=1, ^ 1=2 =也可以替换为like 如果显示不一样也存在sql注入漏洞。
3,还有时间检测, 有时候页面可能没有变化 mysql可以尝试 sleep(5) benchmark(10000000,md(5)), sqlserver使用 wait delay ‘0:0:5’ ,PostgreSQL尝试 PG_sleep(5),Generate_series(1,1000000)尝试。 通过页面响应时间 判断是否存在sql注入。
输入:1’报错,说明此处存在SQL注入
确定注入类型(联合查询)
- union 运算符可以将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示,即执行联合查询,但当使用 union select 的时候,需要保证前后查询的列数相同
- 用到 order by 来查询字段数
1 |
|
- 获取数据库版本和操作系统
查询数据库名
1 |
|
- database()将会返回当前网站所使用的数据库名字
- user()将会返回执行当前查询的用户名(查看是否有root权限)
查询数据库表名
- information_schema 是 MySQL 自带的数据库,这张数据表保存了 MySQL 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。
1 |
|
- dvwa 数据库有 2 个数据表
- 表名为 guestbook 和 users
猜解数据库字段名及爆库
1 |
|
这些字段中最敏感的是 user,password 这两个字段,所以输入:1’ union select user,password from users#进行查询。
成功爆出用户名和密码
https://i3eg1nner.github.io/2023/06/a671dd67ea4a.html