数据库
首页 > 数据库> > [RCTF2015]EasySQL

[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#’,从而造成注入。解决问题的关键就是,在哪里可以回显我们输入的数据。

进入正题

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

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

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

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

2.png数据库里面的数据如图所示

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

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

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

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

4.png

知道了回显点在哪里就可以开始做题目了
(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将信息逆序输出,最后

在这里插入图片描述然后我们可以使用python切片的方法将其转换即可

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

在这里插入图片描述

后记

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

标签:username,RCTF2015,union,EasySQL,select,str,CONCAT,注入
来源: https://blog.csdn.net/qq_51584770/article/details/120604411