Web-CTF-SQL注入刷题总结
本文最后更新于:2024年5月13日 晚上
1. 区分数字型注入和字符型注入
了解数值型注入和字符型注入 - 知乎 (zhihu.com)
数字型注入:
输入的参数为整形,输入参数一般为ID值,年龄,页码等,一般不需要单引号闭合。
字符型注入:
输入的参数为整形,将输入值作为字符串进行传递,一般需要单引号闭合。
区分SQL注入漏洞类型:
1 |
|
数字型注入判断:
使用经典的and 1=1 and 1=2
?id=1 and 1=1 显示正常
?id=1 and 1=2 显示错误
说明存在数字型注入
字符型注入(需闭合)判断:
?id=1' and 1=1 --+ 回显正确
?id=1' and 1=2 --+ 回显错误
说明存在字符型注入
判断的时候直接把上面的四个都试一遍,看符合哪个
1 |
|
2. --和#在sql有什么区别
在字符型注入中,会用到下面的语句,?wllm=1' order by 3--+
在SQL中, -- 和 # 都用作单行注释,但它们的使⽤环境和数据库系统兼容性有些不同。
-
:这是SQL标准的单行注释符号。大多数SQL数据库,包括SQL
Server、PostgreSQL和MySQL,都⽀持使⽤ -
进⾏单⾏注释。通常, - 后⾯需要跟⼀个空格。
1 |
|
#
:这是MySQL特有的单⾏注释符号。它不是SQL标准的⼀部分,所以在其他数据库系统(如SQL
Server或PostgreSQL)中可能不会被识别。
1 |
|
如果你的代码只需要在MySQL中运行,使用 #是没有问题的。但如果你希望你的SQL代码能在不同的数据库系统中运行,最好使用标准的 -- 注释。
总结一下, -- 更具有通用性,而 #是MySQL特有的。如果你在编写数据库无关的代码,最好使用--。
3. 为什么要加+
在字符型注入中,会用到下面的语句,?wllm=1' order by 3--+
在某些SQL解析器和数据库管理系统(如MariaDB、MySQL等)中,--
后面需要跟一个空格才能被识别为SQL注释。在URL中,由于空格通常会被去掉或需要编码(通常为%20
或+
),所以直接使用一个空格可能会导致SQL语法错误。
在这种情况下,添加+
实际上是在确保注释--
后面有一个空格,这样数据库就能正确解析这个SQL注释。因此,--+
实际上是--空格
(两个短划线后面跟一个空格)的URL编码形式。
这就解释了为什么在这个具体例子中,不加+会导致SQL语法错误:数据库在解析SQL时没有把--
识别为注释,因为它后面没有跟空格。而加上+后,数据库就能正确地把--
识别为注释。
4. Burp Suite2023完美安装
本人自从知道了新版本有高亮,就再也不想用老版本,搞了半天,终于在各种乱七八糟的教程中搜到了我能实操的
感谢下面的两位师傅: