sql手工注入原理

匿名 (未验证) 提交于 2019-12-03 00:03:02

判断是否存在注入

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

数值型
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后面的单引号把原本语句的一对单引号隔开了,所以页面会出现异常或者报错

正常的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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!