sql手工注入原理

判断是否存在注入

纯粹一些个人练习心得,所以今天就写一篇博客记录一下

数值型
1.URL输入 and 1=1 / and 1=2 回显页面不同(整形判断)

如果页面运行错误,则说明此 Sql 注入为数字型注入。
因为当我们输入 and 1=1时,后台执行 Sql 语句:

如:select * from <表名> where id = x and 1=1

没有语法错误且逻辑判断为正确,所以返回正常。

当输入 and 1=2时,后台执行 Sql 语句:

select * from <表名> where id = x and 1=2

语句被带进数据库进行查询,虽然没有语法错误但是逻辑判断为假,所以返回错误,这时候我们就可以基本确定页面存在sql注入。


字符型

如这是一条后台语句:$sql=“SELECT * FROM users WHERE id='1 ’ LIMIT 0,1”;
可以看出,id被单引号包裹住

如果后台语句是:GET_id=’$id’这样子传

那么 ?id=’1’ 1就是$id 里面的值 这时候要注入可以这样

  ?id=’   1 然后在id的引号里面构造攻击语句    ’
  如?id=1' union select 1,2,3,4 --+'    // 这条语句的作用是联合查询第1,2,3,4列, 空格--+的作用是注释后面的内容

如 在URL地址栏输入?id=1’ 这时候 1后面的单引号把原本语句的一对单引号隔开了,所以页面会出现异常或者报错
但这时候,如果我们在1’后面加–+注释掉它后面的单引号( ?id=’1 ‘ --+ ’),让它语句后台的语句一致,这样子就不会报错了,同理,也可用这个方法来验证是不是属于字符型sql注入

正常的URL:http://127.0.0.1/sqli-labs-master/?id=1

1左右是有单引号包裹住的 我们在URL栏输入原本语句的单引号不会显示,如果我们输入的是这样子:?id=1’ --+
而后台会这样子显示 : id=’1’ --+’

所以我们可以这样子 ?id=1’ 这里写攻击语句 --+?

本来Id=’ ’ 是这样子的

后来我们在id=’ 在里面插入语句 ’

如果我们输入I’ 那么id是这样子的 id=’ 1’ ’ 这样子语句就形成不了闭合了,会报错,如果报错了,证明这条语句成功被带进数据库查询

这时候我们可以这样子 id=’ 1 ‘ --+ ’ --+ 把后面的单引号注释掉了,这样子就会形成闭合


注入手法

联合查询
我们可以这样子

?id=-1’ union select 1,2,3 --+ 这样子就可以形成一条带进数据库的查询语句了

联合查询要构造假的 所以1前面一定要加-号,因为有两条select语句,要用-号或者把1改为0把前面的注释掉
就是有两条select查询一句,要前面的那条错误无法使用,后面的注入一句才能显示这样子
当前面的id=1错误会执行后面的id=2,二后面的id=2错误会执行前面的id=1
在这里插入图片描述
或者=0也行
在这里插入图片描述
如果注入页面没有反应,无论是字符型还是数字型,都可以在前面加-号或者改为0试试

未完待续…

19.9.13

发布了36 篇原创文章 · 获赞 60 · 访问量 9965

猜你喜欢

转载自blog.csdn.net/chest_/article/details/100505649
今日推荐