电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1289 人浏览分享

记一个限制长度命令执行的骚操作

[复制链接]
1289 0
0x00 前言

本文来源于一道CTF题 这是一道文件上传题,限制了上传内容长度小于15个字符 且校验文件头上传文件
拓展名采用黑名单限制,最终使用了一个巧妙的方法成功getshell。

0x01 一顿操作拿flag

首先题目打开后页面如下 扫描了一下目录未发现其它文件

QQ截图20210730163739.png

上传一张图片 提示长度不能大于等于15

999.png

然后把文件内容改短一点 可以看到是会校验文件内容的

998.png

用常用的文件头可以绕过 如GIF89A

996.png

然后再测测文件名 发现php后缀是会拦截

992.png

简单测试发现是黑名单 那就简单的pht/phtml等多种拓展名可绕过

991.png

因为限制了长度,所以使用php短标签,php标签不闭合也能执行 可以尽可能缩短内容长度

990.png

然后根据返回的文件路径,访问文件 可以看到php代码确实执行了

899.png

再想执行稍长一点的命令,发现已经超长了 所以接下来的问题就是缩短文件内容长度

897.png

测试发现仅使用GIF作为文件头也能成功绕过文件头校验

896.png

然后居然就这么看到疑似flag的东西,提交上去是对的???

699.png

0x02 进阶getshell

看到这个flag我不禁陷入沉思 题目这么出有什么意思???这不是单纯恶心人么???
于是想是否还有其它方式能够绕过长度拦截,从而getshell呢?
既然文件内容长度是有限制的 但是文件名确没有限制,那么是否能通过控制文件名来执行想要的命令呢?
于是研究起linux命令 发现sh -c *可以让当前目录的文件名作为命令执行
本地生成一个名为whoami的文件,使用sh -c *命令可以看到把文件名作为命令执行了

QQ截图20210730165118.png

因为sh -c本身就会把-c的值作为命令执行 *号统配符代表了当前目录所有的文件名,所以便执行成功

698.png

根据这个思路 构造文件内容 发现长度超了 16位整好超一位

697.png

于是测试其它文件头 发现BM可用

696.png

接下来便是构造文件名了 我们既要文件名后缀为php可执行的.pht 又要执行命令 可用使用;号来分割命令、
先试试whoami;.pht,通过;号分割后 即便后面的.pht不能正常执行也不影响前面的命令执行。

692.png

访问文件看到执行成功了

100.png

然后就是写shell 因为要写到文件名所以把文件内容base64编码一下再通过重定向写入文件1.pht
  1. echo PD9waHAgZXZhbCgkX1BPU1RbMV0pOw==|base64 -d >1.pht;.pht
复制代码

99.png

发送上传包,成功写入这个畸形的文件名及内容

98.png

接下来要访问一下 才能让它执行并生成1.pht,这里需要把空格URL编码,然后200访问成功

97.png

再访问一下上传命令的1.pht,200访问成功

96.png

然后就拿个webshell连接工具就行了,这里用的是蚁剑

92.png

91.png

90.png

0x03 修复建议

白名单制限制上传文件的拓展名

强制修改文件名 如使用随机字符串作为文件名

0x04 小结

本文介绍了一种限制上传文件内容长度的绕过思路 如有雷同 纯粹巧合。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.