攻防世界-Web-write up(待更新
攻防世界-Web-write up(一)
Web - Php2
从题目可以知道是phps的考点,phps文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替。其实,只要不用php等已经在服务器中注册过的MIME类型为文件即可,但为了国际通用,所以才用了phps文件类型。

利用御剑将其爆破出来(我也是百度才发现御剑里面没有phps的配置文件,需要自己添加一下
进入index.phps,查看源码
<?php if("admin"===$_GET[id]) { echo("<p>not allowed!</p>"); exit(); } $_GET[id] = urldecode($_GET[id]); if($_GET[id] == "admin") { echo "<p>Access granted!</p>"; echo "<p>Key: xxxxxxx </p>"; } ?>
可以知道分两块的判断
第一层,先使得/?id!=admin
if("admin"===$_GET[id]) { echo("<p>not allowed!</p>");
第二层,经过一次URLdecodde之后要使得/?id=admin
$_GET[id] = urldecode($_GET[id]); if($_GET[id] == "admin") { echo "<p>Access granted!</p>"; echo "<p>Key: xxxxxxx </p>";
构造payload = url/?id=%2561dmin
urlencode(%2561)=%61
urlencode(%61)=a
总结
当传入参数id时,浏览器在后面会对非ASCII码的字符进行一次urlencode编码,运行时会自动进行一次urldecode。因为我们在url连接里直接运行,浏览器会进行一次url解码,所以我们还要进行一次url编码,就是对admin进行两次编码再运行。
WEB - unserialize3
由题目可以知道,该题目是一道关于序列化和反序列化的题目
打开网址,发现以下代码
class xctf{ public $flag = '111'; public function __wakeup(){ exit('bad requests'); } ?code=
发现魔法函数__wakeup()
##引入几个可能会出现序列化与反序列化的漏洞函数##
// 在创建对象是自动调用 __constuct() //相当于c++中的析构最后会将对象销毁,所以在对象销毁时被调用 __destuct() //但一个对象被当成字符串使用时被调用 __toString() //当对象被序列化之前使用 __sleep() //将在被序列化后立即被调用 __wakeup()
//以上的函数就是经常遇见的序列化和反序列化的函数,如果服务器可以接受反序列化之后的字符,并且没有经过任何的过滤将其中的变量传入魔法函数中,那么很容易可以造成很容易的漏洞。
//serialize()
serialize()中会先检查方法__sleep(),如果存在该函数会先执行该函数,即为序列化之前要检查是否有这个魔法函数。
//unserialize()
unserialize()中会检查类中是否存在__wakeup(),如果存在机会调用__wakeup()函数,预先准备所需要的资源。
1 2 | //关于__wakeup()函数的绕过方法 只需要改变字符或者对象的序列化后的属性,那么就不会执行wakeup函数,从而绕过该方法,即为传入的值大于真实存在的值,即可绕过该方法。 |
根据源代码,写出可执行的php脚本,生成序列化
<?php class xctf { public $flag = '111'; public function __wakeup() { exit('bad requests'); } } $c = new xctf(); print(serialize($c)); ?>
与原题目拼接
将1改为大于等于2的数字即可。
Web - warmup
打开网页,发现源码的地址

<?php highlight_file(__FILE__); class emmm { public static function checkFile(&$page) { $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; if (! isset($page) || !is_string($page)) { echo "you can't see it"; return false; } if (in_array($page, $whitelist)) { return true; } $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } echo "you can't see it"; return false; } } if (! empty($_REQUEST['file']) && is_string($_REQUEST['file']) && emmm::checkFile($_REQUEST['file']) ) { include $_REQUEST['file']; exit; } else { echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />"; } ?>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现