本来ctfhub技能树搭建过程是放在本地的。为了方便记笔记和学习,sql注入之后还是放到blog里面来。

整数型注入:

整数型注入和字符型注入现在理解应该就是闭合差异吧。
打开题目能直接发现sql语句:
图片1.png

对id参数没有过滤,这个时候可以直接通过and 跟false和true值来判断是否存在注入。
可以注意的是mysql中and优先级要高于or。

然后是order by,这个是一个排序语句:
图片2.png

可以看到,通过order by 2 desc 使得这个数据按照第二字段的值降序输出了。当然也可以order by name。那么当order by 3的时候由于没有这个字段将会报错。这时候就能得知字段数为2.

然后是union语句:
图片3.png

Union操作符可以连接两个select语句,但是结果会被去重。
这样我们可以通过union来联合进行我们想要的查询了。
图片4.png

Database可以输出当前数据库。知道数据库后我们去查表:
-1 union select 1,group_concat(table_name)from information_schema.tables where table_schema=’sqli’

首先group_concat:

该函数返回带有来自一个组的连接的非NULL值的字符串结果。
当这个表不止一个的时候,不加这个如果显示位不够就看不到后面的表了。

information_schema
而这张视图下保存了mysql的所有数据。所以我们去他的tables表下寻找数据库是sqli的所有表。

随后就是查询字段:
图片5.png

-1 union select 1,group_concat(column_name) from information_schema.columns where table_name=’flag’
这也是同理,去这个‘牛逼’视图information_schema下的column表中去找flag表中的column_name。。(有点绕但就那么个意思)

然后就是爆字段值了:
图片6.png

‘牛逼’视图information_schema也就完成了他的价值,最后我们使用原本的表查询即可。

整个过程可以简化为如下:
1.判断,查字段数 and 1=1 and 1=2 order by
2.查数据库 union select 1,database()
3.查表 -1 union select 1,group_concat(table_name)from information_schema.tables where table_schema=database()
4.查字段 -1 union select 1,group_concat(column_name)from information_schema.columns where table_name=flag
5.爆数据 union 1,group_concat(flag) from sqli.flag

字符型注入:

select * from news where id=’1’

查询语句变成了这样

估计php代码是

$sql=”select * from news where id=’$_GET[‘id’]’”

这样只要注意闭合语句,然后使用整数型注入的攻击链就好了

1’ unicon select 1,2

这里好像只能使用# 符号来结束(需要闭合后面那个单引号)