英招杯决赛-Web题复盘

mimi_precision 题目

<?php
highlight_file(__FILE__);

$a = $_GET["a"];
$b = $_GET["b"];
$c = $_POST["c"];
$code = $_POST["code"];

function waf($check){
    str_replace("base","hack",$check);
    str_replace("zlib","hack",$check);
    str_replace("zip","hack",$check);
    str_replace("file","hack",$check);
    str_replace("data","hack",$check);
}

if($a>0&&$a*$a==0){
    $b = file_get_contents($b,'r');
    if($b === "2022 yzbCTF yyds!"){
        waf($c);
        $shell = "<?php die();?>";
        $shell .= $code;
        file_put_contents($c, $code);
    }else{
        echo "fail!";
    }
}else{
    echo "fail!";
}

?>

刚开始做这个题就是变量a的判断难饶,最后一直尝试 科学计数法,字符比较都试了,还是没绕过。

最终死到这个上面了,比赛完看大佬wp

图片[1]-英招杯决赛-Web题复盘-Drton1博客

发现他也是科学计数法,但是-200次方,经过测试,最终的绕过的临界值在1e-324的地方。

图片[2]-英招杯决赛-Web题复盘-Drton1博客

百度发现这个。也算是长见识了。

这样的话让a=1e-162就可以成功绕过该if,进入执行语句。

发现$b把自己当成文件读取然后再判断是不是该内容。

file_get_contents() 把整个文件读入一个字符串中。

该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。

<?
$b = file_get_contents($b,'r');
    if($b === "2022 yzbCTF yyds!"){
        waf($c);
        $shell = "<?php die();?>";
        $shell .= $code;
        file_put_contents($c, $code);
    }else{
        echo "fail!";

如果我们直接赋值$b=”2022 yzbCTF yyds!” 那么只是一个字符串,这个函数就会报错,因为$b并不是文件流。

所以这里用data://协议

$b=file=data://text/plain,要求内容,这样这个b就被当做文本文件然后读取到。

就成功绕过了。

file_put_contents() 函数把一个字符串写入文件中所以,与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

file_put_contents(*file*,*data*,*mode*,*context*) 可以看到c是文件名 那不是随便起,这个waf防护与否一点意义也没有。code就是内容了,直接写一句话后门即可。

这个题最难的就是那个a的绕过,a一旦绕过其他的就好搞了。

readfile

这个题目给了个上传点,但是上传后并不会进行上传,而是解压后预览你文件中的内容。

图片[3]-英招杯决赛-Web题复盘-Drton1博客

这题刚开始是常规上传一些一句话木马压缩,然后都只是显示php代码,并无法执行解析,当时的思路是想着换html标签来执行php代码,于是一直无果,最终寄了,结束才知道是一个软链接读取的东西。也是第一次知道这个洞。= =

(13条消息) 什么是软链接、硬链接_king config的博客-CSDN博客_硬链接

图片[4]-英招杯决赛-Web题复盘-Drton1博客

解压后直接指向目标文件,拿到flag。

图片[5]-英招杯决赛-Web题复盘-Drton1博客

又学到一个姿势。

Hack me?

这个题开局一个登录框,其他啥也没有,登录不上,sql注入也不行。这个题在username这个参数上有个log4j的注入。

(13条消息) Log4j2远程命令执行(CVE-2021-44228)_ak.Gh0st的博客-CSDN博客

就是这个思路,最终就可以拿到flag。

codeaudit

这个题就是一个真实的CMS站点,名字叫fineMCS,后台是一个弱口令 admin/admin 就进去了,然后在后台一个模板处存在模板注入SSTI。拿到flag。

图片[6]-英招杯决赛-Web题复盘-Drton1博客

后台写好后去前台发现。

图片[7]-英招杯决赛-Web题复盘-Drton1博客

Serialize

图片[8]-英招杯决赛-Web题复盘-Drton1博客

审计题目 进行构造 让reals 与keys相等即可
进行传参,拿到flag

图片[9]-英招杯决赛-Web题复盘-Drton1博客
图片[10]-英招杯决赛-Web题复盘-Drton1博客

Babyphp

这个题目当时没用保存,但是打开就是一个页面,your ip is 111.111.111.111

就是显示你的ip,当时看见就知道是伪造ip,然后

X-Forwarded-For:127.0.0.1

X-Forwarded:127.0.0.1

Forwarded-For:127.0.0.1

Forwarded:127.0.0.1

X-Forwarded-Host:127.0.0.1

X-remote-IP:127.0.0.1

X-remote-addr:127.0.0.1

True-Client-IP:127.0.0.1

X-Client-IP:127.0.0.1

Client-IP:127.0.0.1

X-Real-IP:127.0.0.1

Ali-CDN-Real-IP:127.0.0.1

Cdn-Src-Ip:127.0.0.1

Cdn-Real-Ip:127.0.0.1

CF-Connecting-IP:127.0.0.1

X-Cluster-Client-IP:127.0.0.1

WL-Proxy-Client-IP:127.0.0.1

Proxy-Client-IP:127.0.0.1

Fastly-Client-Ip:127.0.0.1

True-Client-Ip:127.0.0.1

Host: 127.0.0.1 都试了一遍全部不行,当时想着这个玩意好牛- –

最后看出题人给的思路:

图片[11]-英招杯决赛-Web题复盘-Drton1博客

666 用的localhost= =

然后穿两个参数就可以拿到flag了。只能说长了个见识。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论