sqli-labs
less-1
首先先过一遍基本操作
加单引号报错,检查报错原因(去掉外层单引号还剩’1’’ limit 0,1)可知sql代码中采用’$id’,尝试 and 1=1 和 and 1=2 发现存在注入
采用union注入,先判断列数,发现在4时报错可知列数为3
- 具体一系列注入过程如下:
- 查看当前数据库和用户(有时可省,但其实很重要,root权限所有库都可以访问)
- 由系统库爆所有数据库
- 爆数据库的表
- 爆表的列
- 爆列的字段
1 | 手工注入: |
1 | 补充: |
( 上图爆的表中的列,后续where语句中选择了数据库self_flag,即该库中的所有表的所有列,正确思路是选择table_name即选择表 )
( self_flag下的flaggg表 )
( 这里注意比对一下flag如果在database()即当前数据库下可以才可以直接用flaggg )
less-2
查注入点(可以利用id=1\这样来查),猜测sql语句直接就是SELECT * from table_name WHERE id=$id;
( 前面检测步骤同上,注意到语句正确但是没有回显,原因是id=1占用了回显,改为id=-1即可让union后部分语句回显,有的时候可以全部列出则不需要改前部错误也行…个人做题遇到过在此一提 )
后续注入过程同less-1
less-3
查注入点,猜猜测sql语句直接就是SELECT * from table_name WHERE id=(‘$id’);
注入过程同上
less-4
查注入点,猜猜测sql语句直接就是SELECT * from table_name WHERE id=(“$id”);
less-5
当我们输入语句正确是不再回显数据而是“You are in” 即盲注类型
SQL盲注
- 基于布尔SQL盲注
- 基于时间的SQL盲注
- 基于报错的SQL盲注(即报错注入
(有时候不一定要局限于盲注就只用于数据不回显)
做题前先学一学这三种盲注方法!(这里做一个简单的介绍)
BooleanSQL盲注
构造逻辑判断,利用逻辑函数进行
常用的函数有 left() 、ascii() 、substr() 、ord() 、mid() 、regexp().
大体上可以理解为构造对数据库名,表名等的字符串的判断函数
eg: ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))
通过索引数据库名对应字符串的位数来确定数据库名长度(超过位数就不回显)
注:盲注通常需要写脚本来自动化爆破数据库名,表名,列名和字段.
基于时间的SQL盲注
利用if(条件,执行1,执行2)函数特性和sleep()函数的特性
【benchmark()太吃资源不建议用】
eg : if(ascii(substr(database(),1,1))>115,0,sleep(5))%23
// if条件为真执行前者,否则执行后者也就是延迟5s
(后续做补充)
基于报错的SQL盲注
前两种盲注比较好理解,基于报错的盲注不是很懂,乘机学习了一波(甩一波资料)
https://www.2cto.com/article/201303/192718.html 双查询注入
http://www.cnblogs.com/lcamry/articles/5509124.html exp报错注入
http://www.cnblogs.com/lcamry/articles/5509112.html 利用bigint 溢出进行报错注入
https://www.cnblogs.com/backlion/p/8554749.html xpath报错注入详解
持续更新ing~