sqli-labs通关笔记

什么是sql注入
SQL注入是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为 称为SQL注入。
代码对带入SQL语句的参数过滤不严格
未启用框架的安全配置,例如: PHP的magic. quotes. _gpc
未使用框架安全的查询方法
测试接未删除
未启用防火墙
未使用其他的安全防护设备

1.concat(str1,str2,…)——没有分隔符地连接字符串2.concat_ws(separator,str1,str2,…)——含有分隔符地连接字符串3.group_concat(str1,str2,…)——连接一个组的所有字符串,并以逗号分隔每一条数据
Mysql查询经常用到的语句
查库:select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where table_schema=库名
查列:select column_name from information_schema.columns where table_name=表名
查数据:select 列名 from 库名.表名

sql注入简单三步骤
第一:输入ID的值使页面不发生变化
第二:输入一些特殊字符使得页面报错
第三:要让页面不报错

Less-1

http://localhost/sql/Less-1/?id=1’
在这里插入图片描述上述错误当中,我们可以看到提交到sql中的1’在经过sql语句构造后形成’1’'LIMIT0,1,多加了一个’。这种方式就是从错误信息中得到我们所需要的信息,那我们接下来想如何将多余的‘去掉呢?尝试‘or1=1–+
此时构造的sql语句就成了Select******whereid='1’or1=1–+'LIMIT0,1
在这里插入图片描述Mysql注入—sqlilabs—lcamry11此时构造的sql语句就成了Select*****whereid='1’or1=1–+'LIMIT0,1可以看到正常返回数据。此处可以利用orderby。Orderby对前面的数据进行排序,这里有三列数据,我们就只能用order by 3,超过3就会报错。‘order by 4–+的结果显示结果超出
在这里插入图片描述最后从源代码中分析下为什么会造成注入?Sql语句为 s q l = " S E L E C T ∗ F R O M u s e r s W H E R E i d = ′ sql="SELECT*FROMusersWHEREid=' sql="SELECTFROMusersWHEREid=id’LIMIT0,1";Id参数在拼接sql语句时,未对id进行任何的过滤等操作,所以当提交‘or1=1–+,直接构造的sql语句就是SELECT
FROMusersWHEREid=’1’or1=1–+LIMIT0,1这条语句因or1=1所以为永恒真。
输入一下语句查询出当前数据库,和库里面的所有的表

?id=-1' union select 1,database(),group_concat(table_name
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值