xctf之warmup

xctf之warmup

在这里插入图片描述
在这里插入图片描述
仅一个登陆页面。
在这里插入图片描述
这是附件中的源码。
在这里插入图片描述
从上述源码可以看出,username与password被过滤了,并且没有办法进行绕过。username与password字段首先被addslashes()函数进行转义,‘、“、/都会被转义。然后在SQL类中query()函数调用waf()函数进行进一步的拦截。正常来讲,这两个字段不存在sql注入漏洞。
在这里插入图片描述
但关键点在于cookie,cookie处存在反序列化漏洞。首先可以构造sql类,此处有两种方法可以进行注入,进行登录绕过。
一、使用内连接进行绕过。此种方法是官方writeup中提供的,挺不错,但感觉需要sql基础比较不错才可以想起来。
如下是实例,只是为了方便解释这道题注入的原理。
在这里插入图片描述
如上图所示

select  runoob_title, runoob_author from (select 'aaaa' runoob_title,'123'  runoob_author)a where runoob_title='aaaa' and  runoob_author=123;

这样可以通过控制table字段值,进行查询。(提醒下,务必明白select 此时查询的根本就不是数据库中的users表,而是查询的通过((select ‘aaaa’ runoob_title,‘123’ runoob_author)a )创建的临时表a表,所以我们要使runoob_title=‘aaaa’ and runoob_author=123 和临时表中的字段值相等。)(sql基础比较不错的应该都能看懂。)
实际payload如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是官方writeup提供的注入方式。
二、其实我们也可以通过控制username字段进行注入。
原理如下:
在这里插入图片描述
此时我们通过序列化,已经绕过正常登录中的addslashes()函数,而SQL类中的__wakeup()函数在反序列化时进行调用waf()函数,但waf()函数虽说过滤了很多,但 并没有被过滤,当然如果是注入获取数据库的所有信息,那么需要将后面的and password字段进行注释,这个好像没办法绕过,但我们可以绕过进行登录还是没有问题的。(如果有大哥知道这个可以绕过,获取数据库的所有信息的,可以告诉我下。带带菜鸡😜)。
payload如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
成功获取flag值。
补充下如果通过控制password值,原理如下,正常来讲将会返回当前表的所有值。
在这里插入图片描述
在这道题中,也可以成功获取flag值,但本质上来说是由问题的。
在这里插入图片描述
数据库查询后,将查询结果返回到row参数中,但如果使用的是password处or注入的话,将会返回多个数组值,此处将不会成功匹配才对,但我尝试了下,发现可以。那么可以说明,这个users表就一行数据。🤡

总结:

总体来讲,难度是中等偏下的,这道题首先通过下载源码附件,进行代码审计,通过代码审计我们可以看到正常登录处的字段无法使用注入的手段进行登录,但是源码中也提示了我们cookie处,存在反序列化漏洞,通过序列化在table、username、password处进行构造payload值即可绕过过滤,成功登录。这道题结合cookie值处sql注入以及反序列化漏洞结合的一道题,还是蛮不错的一道题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值