1.SQL注入产生原因
2.SQL注入的本质
把用户的输入当成了代码来执行
3.SQL注入存在的前提
1)用户可以自定义输入内容
2)用户输入的内容会被带到数据库执行
4.SQL注入的危害
1)盗取网站的敏感信息(构造SQL语句查询数据库)
2)万能密码(登陆后台)
'or '1' = '1'#
3)读写服务器系统上文件
4)借助SQL注入提权(涉及到提升权限部分,之后会详细展开讲解)
5.SQL注入的分类
1)根据注入位置:GET型、POST型、Head头注入(cookie、UA、xff、referer)
2)根据返回的结果:有回显、无回显
3)根据数据类型:数字型(整型)、字符型(多为字符串)
6.SQL注入的攻击流程
1)寻找注入点:一般为搜索框,登陆注册,输入框,凡是与数据库有交互的地方都可能存在
2)判断闭合:
以GET型注入为例,一般都是这种
http://xxx.xxx?id=1
先试探添加and 1=1 和and 1=2
http://xxx.xxx?id=1 and 1=1
http://xxx.xxx?id=1 and 1=2
and1=1正确,and1=2错误 ------------>判断为数字型
and1=1和and 1=2返回一致-------------->判断为字符型
解释一下为什么?
select uname from user where id = 1 and 1=1
select uname from user where id = 1 and 1=2
select uname from user where id = '1 and 1=1'
select uname from user where id = '1 and 1=2'
上述也能看出来,如果是数字型的话,1=1或1=2会单独成为一个逻辑判断的条件,所以后者会爆粗,但是字符型是相当于拼接成了字符串,并没有参与逻辑运算,只不过查询了id为1 and 1=1和id为1 and 1=2的值罢了。
如果是字符型,就开始寻找它查询语句的闭合方式
常见的字符型SQL语句查询有(后边会更新常见SQL语法)
SELECT id FROM Student WHERE name='white hat wolf'
SELECT id FROM Student WHERE name="white hat wolf"
SELECT id FROM Student WHERE name=(white hat wolf)
SELECT id FROM Student WHERE name=('white hat wolf')
可以尝试在后边添加单引号、双引号、括号、组合拳(指多个一起)干扰闭合嗅探出是何种闭合
http://xxx.xxx?id=1'
http://xxx.xxx?id=1"
http://xxx.xxx?id=1)
http://xxx.xxx?id=1')
哪种报错后再尝试添加注释符(Mysql常用--或#,SQL server常用--)
比如添加单引号报错了
http://xxx.xxx?id=1'--
然后加上--又不报错了,证实了是单引号闭合
这里解释一下为什么?
正常的SQL语句是这样
SELECT uname FROM user WHERE id='1'
加入单引号干扰闭合,会报错
SELECT uname FROM user WHERE id='1''
加入注释符,注释掉后边原来的单引号就可以了
SELECT uname FROM user WHERE id='1'--'
标签:web,http,xxx,uname,-----,SQL,id,注入 From: https://blog.csdn.net/ofwolves/article/details/143257141这样我们就判断出网站是否存在sql注入了,相信聪明的你一定能看懂,但是不要去未经授权测试网站哦,下节我将带着大家一起通关sql-labs的靶场,去感受实际的sql注入过程