分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

CTF web 201808

发布时间:2023-09-06 02:11责任编辑:赖小花关键词:暂无标签

实验吧--天网管理系统

考察点:md5特性、反序列化漏洞,php布尔弱类型

查看源码,发现

表示username的md5值==0,这里利用了md5的一个漏洞,凡是0e开头的字符串会被解释为0,百度一下即可

s878926199a0e545993274517709034328855841020s155964671a0e342768416822451524974117254469s214587387a0e848240448830537924465865611904s214587387a0e848240448830537924465865611904s878926199a0e545993274517709034328855841020

得到新链接/user.php?fame=hjkleffifer

这是一个反序列化问题,根据提示,可能跟布尔值有关,

bool的true和任意字符串弱类型相等 


所以构造的user(bool)和password(bool)的值为true即可。

1 <?php2 $payload = array(‘user‘=>true,‘pass‘ => true);3 echo serialize($payload);4 ?>

得到结果:

a:2:{s:4:"user";b:1;s:4:"pass";b:1;}

将其作为password,即可得到flag

 实验吧--Once More

发现代码:

<?phpif (isset ($_GET[‘password‘])) { ???if (ereg ("^[a-zA-Z0-9]+$", $_GET[‘password‘]) === FALSE) ???{ ???????echo ‘<p>You password must be alphanumeric</p>‘; ???} ???else if (strlen($_GET[‘password‘]) < 8 && $_GET[‘password‘] > 9999999) ???{ ???????if (strpos ($_GET[‘password‘], ‘*-*‘) !== FALSE) ???????{ ???????????die(‘Flag: ‘ . $flag); ???????} ???????else ???????{ ???????????echo(‘<p>*-* have not been found</p>‘); ???????} ???} ???else ???{ ???????echo ‘<p>Invalid password</p>‘; ???}}?>

查看代码发现,首先ereg判断password的值是不是数字或字母,继续strlen()限制了长度小于8并且大小必须大于9999999,继续strpos()对password进行匹配,必须含有*-*,最终才输出flag

ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配。对于另一个难题可以使用科学计数法表示,计算器或电脑表达10的的幂是一般是e,也就是1.99714e13=19971400000000,所以构造1e8即100000000 > 9999999,再加上*-*。于是乎构造password=1e8%00*-*,成功得到答案

方法二:直接将url改为http://ctf5.shiyanbar.com/web/more.php?password[]

因为在这里如果 $_GET[‘password’]为数组,则返回值为NULL ,而在严格比较下,null不等于false

附:php类型比较表  http://php.net/manual/zh/types.comparisons.php

  php函数漏洞集合  https://blog.csdn.net/qq_35078631/article/details/75200157

CTF web 201808

原文地址:https://www.cnblogs.com/iamgroot/p/9519219.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved