前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一个限制长度命令执行的操作

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

作者头像
FB客服
发布2021-08-24 14:46:47
5040
发布2021-08-24 14:46:47
举报
文章被收录于专栏:FreeBuf

0x00 前言

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

0x01 一顿操作拿flag

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

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

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

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

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

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

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

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

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

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

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

0x02 进阶getshell

看到这个flag我不禁陷入沉思,题目这么出有什么意思???这不是单纯恶心人么???

于是想是否还有其它方式能够绕过长度拦截,从而getshell呢?

既然文件内容长度是有限制的,但是文件名却没有限制,那么是否能通过控制文件名来执行想要的命令呢?

于是研究起linux命令,发现sh -c *可以让当前目录的文件名作为命令执行

本地生成一个名为whoami的文件,使用sh -c *命令可以看到把文件名作为命令执行了

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

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

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

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

访问文件看到执行成功了

然后就是写shell,因为要写到文件名所以把文件内容base64编码一下再通过重定向写入文件1.pht

代码语言:javascript
复制
echo PD9waHAgZXZhbCgkX1BPU1RbMV0pOw==|base64 -d >1.pht;.pht

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

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

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

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

0x03 修复建议

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

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

0x04 小结

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言
  • 0x01 一顿操作拿flag
  • 0x02 进阶getshell
  • 0x03 修复建议
  • 0x04 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档