python 的eval

DDCT的一道flask题?

刚开始还傻乎乎的觉得是不是传入 func:show_flag;就会被执行

10651191-03062b4537cccf85.png

我们从入口点开始看起, 看看从我们传入URL的参数开始, 是怎么到这个函数的

这里加入了一个判断, 也就是说querystring必须是非空, 长度小于等于100, 且必须以action:开头的

10651191-4ff6443050489594.png

所以如果是直接构造 func:show_flag是不可能地

之后调用了 trigger_event这个函数

10651191-8219af2de574ae95.png

这个函数会将querystring添加到 event_queue

10651191-9c307b888182325f.png

这里对querystring进行了类型判断, 从URL中传入的都是str类型, 而代码内部的调用传入的都是 list类型(其实也不能这么说,。。

比如这几处地方

10651191-2f96963c363ac0a3.png
10651191-fa2eb962d78cac6c.png

如果要执行eval函数

  1. 必须在request.event_queue中, 也就是在这之前必须调用trigger_event函数
  2. event必须以action或者func开头
  3. 必须是合法的字符
10651191-1f60bdb59fb0e6fe.png

所以要如何达到任意函数执行的目的呢?

先想办法调用trigger_event函数再说

查了一下网上关于eval的例子。
大部分都是通过eval对用户的输入过滤不严导致的

# 注释符要怎么用呢。


10651191-dd6a051cc75b2b75.png

还是不太明白如何调用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值