【问题标题】:How to grep multiline comments in website source code?如何 grep 网站源代码中的多行注释?
【发布时间】:2019-12-01 10:39:29
【问题描述】:

我是一名渗透测试人员,正在编写一个用于在目标 URL 上进行基本 Web 应用程序枚举(收集所有链接、电子邮件地址、表单字段参数和 cmets)的工具。

使用 curl 我可以从目标 URL 的源代码中获取单行 cmets。

以下显示所有单行 cmets:

curl <url> -s -L | grep '<!--.*-->' | sed -e 's/^[[:space:]]*//'

我在尝试 grep 多行 cmets 时遇到问题。

我将如何使用curl + grep 实现这一目标?还是awk/sed 是更好的选择?

【问题讨论】:

    标签: curl awk sed grep


    【解决方案1】:

    使用正则表达式解析 HTML 或 XML 文件基本上没有完成。诸如sedawk 之类的工具对于处理文本文件非常强大,但是当归结为解析复杂结构的数据时——例如XML、HTML、JSON……——它们只不过是一把大锤。是的,您可以完成工作,但有时需要付出巨大的代价。要处理如此精细的文件,您需要使用更有针对性的工具集来提高技巧。

    在解析 XML 或 HTML 时,可以轻松使用xmlstarlet

    如果是 XHTML 文件,您可以使用:

    $ curl ... | xmlstarlet sel --html -t -m '//comment()' -v . -n
    

    但是,由于 HTML 页面通常不是格式良好的 XML,因此使用 tidy 将其清理一下可能会很方便。在上面的示例中,这给出了:

    $ curl ... | tidy -q -numeric -asxhtml --show-warnings no     \
      | xmlstarlet sel --html -t -m '//comment()' -v . -n
    

    【讨论】:

      【解决方案2】:

      你可以利用sed的/regexp/,/regexp/范围:

      curl...|sed -n '/<!--/,/-->/p'
      

      【讨论】:

        【解决方案3】:

        ugrep:

        curl <url> -s -L | ugrep '<!--(\n|.)*?-->' | sed -e 's/^[[:space:]]*//'
        

        请注意,我们使用惰性重复 *? 来限制匹配的模式,否则文件中的最后一个 --&gt; 会被贪婪匹配。

        Ugrep 相对较新。它旨在增强 grep,消除我们经常遇到的现有 grep 工具的限制。

        【讨论】:

          猜你喜欢
          • 2021-08-25
          • 1970-01-01
          • 2019-08-25
          • 2011-10-02
          • 2013-08-03
          • 2010-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多