ctf-wiki icon indicating copy to clipboard operation
ctf-wiki copied to clipboard

web中PHP篇解析有误

Open lNwNl opened this issue 4 years ago • 10 comments

image

lNwNl avatar Jul 11 '21 08:07 lNwNl

确实,这里只是简单的字符串异或而已,字符串本身没有其他特别的意义。删掉中间的那些解释就行:

这段代码一大坨是啥意思呢?因为40个字符长度的限制,导致以前逐个字符异或拼接的webshell不能使用。  
- 这里可以使用php中可以执行命令的反引号 `` ` `` 和 `Linux` 下面的通配符 `?`

- - `?` 代表匹配一个字符
- - `` ` 表示执行命令
- - `" ` 对特殊字符串进行解析

- 由于 `?` 只能匹配一个字符,这种写法的意思是循环调用,分别匹配。我们将其进行分解来看:
+ 我们可以使用字符串进行异或构造其他字符,我们将上述代码其进行分解来看:

ZeddYu avatar Jul 23 '21 04:07 ZeddYu

@ZeddYu @qNwNp 我感觉原作者这里应该是专门写的,只是表达可能不太清晰。删掉不太好。

iromise avatar Sep 14 '21 13:09 iromise

@ZeddYu @qNwNp 我感觉原作者这里应该是专门写的,只是表达可能不太清晰。删掉不太好。

这里真就不是那个意思,只是简单的字符串异或操作,原作者的的意思会让人误解。比如反引号异或问号输出下划线,只是简单的字符串异或,这个字符串没有反引号代表的执行命令的意思,问号也没有代表匹配一个字符的意思,完全可以删掉。或者叫原作者 Review 都可以

ZeddYu avatar Sep 14 '21 16:09 ZeddYu

@ZeddYu 我也找不到是谁了。。 @40huo 还记得是谁写的么。。

iromise avatar Sep 16 '21 13:09 iromise

@ZeddYu 我也找不到是谁了。。 @40huo 还记得是谁写的么。。

Use git blame

StoneMoe avatar Sep 18 '21 06:09 StoneMoe

@StoneMoe Thanks. Using the command directly doesn't give the true result. So I checkout to a very older version and find the author. @AngelKitty 看一哈?

iromise avatar Sep 18 '21 12:09 iromise

我觉得可以改掉,^ 的两边加个空格可能更好理解一点 #803

40huo avatar Sep 21 '21 15:09 40huo

@ZeddYu @qNwNp 我感觉原作者这里应该是专门写的,只是表达可能不太清晰。删掉不太好。

这里真就不是那个意思,只是简单的字符串异或操作,原作者的的意思会让人误解。比如反引号异或问号输出下划线,只是简单的字符串异或,这个字符串没有反引号代表的执行命令的意思,问号也没有代表匹配一个字符的意思,完全可以删掉。或者叫原作者 Review 都可以

直接去掉会有些突兀,会感觉少了一些东西,比如“为什么能够按照顺序循环匹配进行异或计算”这个原因没有说清楚,这个匹配的规则或者原理最好是能够说明一下比较妥当。这部分在之前写的时候确实是没考虑到你说的这个问题。

AngelKitty avatar Sep 24 '21 13:09 AngelKitty

OK. 我暂时没有更多精力来处理这个 issue 了,我已经关闭了 PR ,如果有人处理该 issue ,可以参考以上。

ZeddYu avatar Sep 24 '21 15:09 ZeddYu

@ZeddYu @qNwNp 我感觉原作者这里应该是专门写的,只是表达可能不太清晰。删掉不太好。

这里真就不是那个意思,只是简单的字符串异或操作,原作者的的意思会让人误解。比如反引号异或问号输出下划线,只是简单的字符串异或,这个字符串没有反引号代表的执行命令的意思,问号也没有代表匹配一个字符的意思,完全可以删掉。或者叫原作者 Review 都可以

直接去掉会有些突兀,会感觉少了一些东西,比如“为什么能够按照顺序循环匹配进行异或计算”这个原因没有说清楚,这个匹配的规则或者原理最好是能够说明一下比较妥当。这部分在之前写的时候确实是没考虑到你说的这个问题。

但这里是一个明显的错误,建议还是改掉,不要误导初学者。

- 这里可以使用php中可以执行命令的反引号 `` ` `` 和 `Linux` 下面的通配符 `?`

- - `?` 代表匹配一个字符
- - `` ` 表示执行命令
- - `" ` 对特殊字符串进行解析

- 由于 `?` 只能匹配一个字符,这种写法的意思是循环调用,分别匹配。我们将其进行分解来看:

这里的?, `, " 没有任何特殊含义,就是单纯的字符

summershrimp avatar Sep 24 '21 15:09 summershrimp