Web安全攻防 学习笔记
一、绕过 SQL 注入
1.1、绕过去除注释符的 SQL 注入
注释符用于标记某段代码的作用,起到对代码功能的说明作用,但是注释掉的内容不会被执行。
Mysql中的注释符:
-
单行注释:
--+
或--空格
或#
-
多行注释:
/* 多行注释内容 */
对于正常的 SQL 语句中,注释符起到说明作用的功能。但是对于在利用 SQL 注入漏洞过程中,注释符起到闭合单引号、多单引号、双引号、单括号、多括号的功能。
利用注释符过滤不能成功闭合单引号,换一种思路利用 or '1' = '1
闭合单引号。
http://127.0.0.1/sqli/Less-23/?id=1' --+
http://127.0.0.1/sqli/Less-23/?id=1' or '1' = '1
1.2、绕过剔除 and 和 or 的 SQL 注入
MySQL 基础知识补充:
-
MySQL 中的大小写不敏感,大写与小写一样
-
MySQL 中的十六进制与 URL 编码
-
符号和关键字替换
and → &&
,or → ||
sqlmap 探测
$ python sqlmap.py -u "http://127.0.0.1/sqli/Less-25/?id=1" --dbs --batch
1.3、绕过去除空格的 SQL 注入
编码:hex,urlencode
-
空格
URL编码:%20 -
TAB
URL编码:%09
url 编码:https://www.w3school.com.cn/tags/html_ref_urlencode.html
sqlmap 探测
# 有时候字符编码的问题, 可能导致数据丢失, 可以使用 hex 函数来避免
$ python sqlmap.py -u "http://127.0.0.1/sqli/Less-25/?id=1" --dbs --batch