攻防世界-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()函数,预先准备所需要的资源。
//关于__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\" />"; } ?>

浙公网安备 33010602011771号