使用“--”注解后面的sqli语句的时候,如果“--”后面没有空格,可能会失败
"#" 需要编码为%23
有时候注入之后会有多个条目显示,但是返回条件会判断是不是只有1条,这个时候可以使用limit关键词,一条一条显示
通过在输入参数里面,输入"\"字符,破坏原先sql语句结构,达到sql注入的目的,例如sql语句:
SELECT * FROM users WHERE username='[username]' and password='[password]',把username内容输入为"\",把password内容设置为 "or 1=1 -- ",那么sql语句变为:
SELECT * FROM users WHERE username='\' and password=' or 1=1 --'
上面的sql语句查询条件,username为"\' and password" 但是后面的 "or 1=1"
sql语句会总是执行成功,达到注入的目的了
在移动应用中,有时候会把查询条件作为参数传递,这时候进行sql注入就更简单了,例如:/sqlinjection/example4/?req=username%3d%27hacker%27
LIMIT后面的内容页可能作为参数传递给数据库去查询,但是order by关键词必须在limit前面,因此如果在limit的内容后面加"--"是无法注释掉order by的,这种注入点,可以使用union关键词来实现注入
group by后面的内容可能作为参数传递给数据库去查询,在sql语句中,group by位于order by 之前,因此如果在group by的内容后面加"--"是可以注释掉order by的
当sql语句的错误信息不返回,或者说在输入参数中加入的注入内容没有反应的时候,可以使用sql盲注,例如加入sleep函数,如果存在注入点,那么执行时就会sleep一定时间
字符集设置有可能导致mysql-real-escape-string转码发生问题,在验证输入参数有可能导致不能去掉单引号转义等,导致sql语句判断条件恒成立,例如设置成gbk字符集之后,“%bf%27 or 1=1 -- ”会恒成立