注入攻击的本质就是把用户输入的数据当作代码来执行。所以注入攻击有两个必要条件
1.用户能够控制的输入。
2.原本程序要执行的代码,拼接了用户输入的数据。
按照请求方法可以分为:GET请求、POST请求
按照参数类型可以分为:数字型、字符型
按照数据返回结果分为:回显、报错、盲注
盲注又分为:布尔盲注、延时盲注
or 1=1 --+ | ‘or 1=1 --+ | "or 1=1 --+ |
)or 1=1 --+ | ‘)or 1=1 --+ | ")or 1=1--+ |
"))or 1=1 --+ |
ps: # url编码后为 %23 ,可以用 --+ 替换
函数名 | 作用 |
version() | 数据库版本 |
user() | 数据库用户名 |
database() | 数据库名 |
@@datadir() | 数据库路径 |
@@version_compile_os | 操作系统版本 |
这里是在本地搭建的一个 sqli 的靶场,用来自己做练习,感觉还不错。
文章最后附带的有链接,小伙伴们可以自行下载。
直接在url处添加 单引号 发现网站报错、说明sql语句出错,就可能存在注入
一般有两种方法:
a.使用 # 号,把本行 # 号后面的内容注释调,这样就可以避免sql语句出错,使我们构造的 payload 可以正确执行
b.根据sql语句,用符号进行闭合
这里就直接用 # 进行注释了,可以看到网站的页面回复了正常
假设列数为 4 进行测试,页面出错,说明小于 4 列
然后列数为 3 进行测试,页面正常,说明存在 3 列
可以看到数据库的版本信息,说明存在sql注入漏洞
数据与代码分离
对用户输入的数据进行严格过滤
对特殊字符进行转义
使用预编译语句
使用安全函数
检查数据类型
原文:https://www.cnblogs.com/Excellent-person/p/11721468.html