Author: 颖奇L’Amore
Blog: www.gem-love.com
题目来自于2022虎符CTF Final的readygo,给了源码
题目分析▸
gin框架,漏洞主要在这里
使用的eval是来自github.com/PaulXu-cn/goeval的第三方模块
分析一下goeval的源码,可见是代码的拼接 生成文件 然后运行
这里我们的package是没有被过滤的,但是goeval会用空格作为分割,然后来做模块的导入
所以基本可以肯定是通过Package进行代码注入
代码注入▸
这里我们可以注入Package一个")
构造了import
的闭合,但是其后还有一个")
就像这样:
得到
于是我们可以在后面再注入进去一个var
这里还需要用\t
来替换空格,因为空格是会被当做多个依赖包进行拆分的
得到如下代码 可以运行成功:
执行函数▸
尽管可以注入进去代码,但是执行依然是执行main
函数,而main
函数我们无法修改,导致没法执行其他的代码。
但是在go语言中有一个特殊的init()
函数,他在main()
之前自动执行,所以我们可以注入进去一个init()
得到
运行成功:
执行系统命令▸
下一步就是执行系统命令了,可以这样执行:
于是构造这样的Payload:
生成的代码是
ls
命令运行成功
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
文章来源: https://www.gem-love.com/2022/07/25/goeval%E4%BB%A3%E7%A0%81%E6%B3%A8%E5%85%A5%E5%AF%BC%E8%87%B4%E8%BF%9C%E7%A8%8B%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C/
如有侵权请联系:admin#unsafe.sh