LoRexxar

Results 44 comments of LoRexxar

不行,重点在,这个输入是反向的...当把函数的第二个参数标记为敏感参数之后,以现在的架构没法多加一个内部为eval的标记,这种场景极少,但添加这样一个标记相应的代码代价太多。 而且还需要处理输入的eval结果...现在看来应该是不可解

仔细研究之后,发现问题出在NewCore的逻辑上。 1、新生成的函数应该只在相当的位置进行搜索 2、来自于#6问题,由于普通的扫描时,敏感函数的敏感参数位置总是固定的。但对于新生成的敏感函数位置则不是这样的,这点在#6中已经详细解释过了。 总体来说,复用Core函数的代码无法完成其需求,这里需要全新的解决方式。

问题迁移到这里,我之后看看

之前遇到过这个问题...主要是我在测试中遇到过一个问题,就是变量如果来自拼接,就会来自一个列表,如果这个列表中部分可控部分不可控,这个变量是不一定可控的,之前误报太多,所以后来暂时把这部分改为只要有一个变量为确认的可控或者不可控,就确定了

还有一个问题就是遇到大型的代码,这种分支会无限的递归下去,比较难处理

> > 我看你还继续保留字面量,我觉得可以像cobra那样在处理等号右边的expr的时候直接忽略了,没必要再放到列表里面,再做一次递归了。 > > 哪个地方递归了? 现在的方案是,逐个处理,如果遇到其中一个为确认的可控或者确认的不可控,就不继续下去了,还是算递归的。

> > > 我看你还继续保留字面量,我觉得可以像cobra那样在处理等号右边的expr的时候直接忽略了,没必要再放到列表里面,再做一次递归了。 > > > > > > 哪个地方递归了? > > 例如`$a = $pid ^ 'randow';` > 其中的字面量`'randow'`做了一次 > > ``` > [DEBUG] [MainThread] [09:43:03] [parser.py:598] [BT] param=Variable('randow'),nodes=[Assignment(Variable('$did'),...

> 师傅我完整的递归给你看看,这个地方是`'randow'` 最后一个是w > > ``` > [DEBUG] [MainThread] [09:43:03] [parser.py:1315] [AST] vul_function:mysql_query > [DEBUG] [MainThread] [09:43:03] [parser.py:1122] [AST] AST to find param Variable('$b') > [DEBUG] [MainThread] [09:43:03] [parser.py:598] [BT]...

> 师傅理论上如果我把上面那个地方注释掉了,就可以检测出来, 但是结果是没有,我还在找递归逻辑哪里不对 -。- 我具体不太记得了,只是模糊记得,因为这个list会出现在很多地方,还有函数参数,所以很容易遇到问题,调整了很多次... 我想我可能需要一个看板,把每次修复时候遇到的范例代码记下来...完全不记得了

> 我想我找到了 > https://github.com/LoRexxar/Cobra-W/blob/master/cobra/core_engine/php/parser.py#L757 > > 这里当发现一个可控是不是就可以返回了呢? > 后面加一行 > > ```diff > if _is_co != -1: # 当参数可控时,值赋给is_co 和 cp,有一个参数可控,则认定这个函数可能可控 > is_co = _is_co > cp = _cp >...