[RCTF2015]EasySQL

[RCTF2015]EasySQL

就有个问题,感觉自己到现在关于二次注入的问题做了大概有4道了,并且都是比较简单的题目,但是还是找不到回显点在哪里…感觉自己还是不够细心,更没有耐心,我感觉做web最主要的还是要有耐心吧…
我们都知道二次注入的意思就是说,当我输入1’||union select 1,2,3#的时候,他存入数据库的还是1’||union select 1,2,3#,但是当需要用到这个数据的时候,将其从数据库中取出来的时候,比如使用语句select * from user where username = ‘$username’,就会变成select * from user where username = ‘1’||union select 1,2,3#’,从而造成注入。解决问题的关键就是,在哪里可以回显我们输入的数据。

进入正题

这是这个网站的全部功能
[RCTF2015]EasySQL
注册页面禁止了一些字符,看源码是过滤了这些字符(太难受了…burpsuite突然坏了…)

#(\s)|(/\*.*\*/)|file|insert|<|and|floor|ord|char|ascii|mid|left|right|hex|sleep|benchmark|substr|@|`|delete|like#i

然后尝试注入,这个真的就没办法,就是一直找可以回显的地方,最后知道是在修改密码那里采用报错注入…

我自己在本地模拟了一下,我输入用户名为:

[RCTF2015]EasySQL数据库里面的数据如图所示

我把输出语句打印了出来,为了更方便理解

[RCTF2015]EasySQL可以看到在登录的时候我们输入的’被转义,所以并没有执行我们预期的命令

哦对了,忘记了,这道题目比较坑的一点是它用的是“双引号闭合…

我们把前面的命令该为双引号闭合,然后changepwd.php那个页面里面,修改密码

[RCTF2015]EasySQL

知道了回显点在哪里就可以开始做题目了
(UPDATEXML(1,CONCAT('~',(SELECT(GROUP_CONCAT(real_flag_1s_here))FROM(users))),1))#
(UPDATEXML(1,CONCAT('~',REVERSE((SELECT(GROUP_CONCAT(real_flag_1s_here))FROM(users)))),1))#

一般使用报错注入的时候,几乎都不会一次性的展示所有的信息,但是因为过滤了几乎所有可以截断字符串的函数,所以我们就是用reverse将信息逆序输出,最后

[RCTF2015]EasySQL然后我们可以使用python切片的方法将其转换即可

str="}379d322fa372-ceda-4e44-1b3e-38"
str=str[::-1]
print(str)

[RCTF2015]EasySQL

后记

怎么说呢,就是感觉自己还是没有耐心,再加之还是不熟练…
以后的路还长,一定要坚持,坚持可能有结果,但是不坚持一定会输

上一篇:错误调试精确到行、match-case模式匹配... Python 3.10正式版真的很友好


下一篇:765. 情侣牵手