关键词文章采集源码(优雅地寻找网站源码(一)_0x0.1)

优采云 发布时间: 2022-02-01 02:10

  关键词文章采集源码(优雅地寻找网站源码(一)_0x0.1)

  优雅寻找网站源码(一)0x0前言

  如果能在渗透过程中获得网站的源码,无疑会打开大神的视角。虽然有很多通过搜索引擎找到相似的网站,然后批量扫描备份的想法,但具体过程没有人分享。同时分享一些其他的找源码的方法,希望能给读者带来一些新的体验。

  0x1 搜索提示 0x1.1 代码托管平台

  国外的github和国内的gitee都是第三方代码托管平台。通过一些搜索技术,我们可以找到大量泄露的敏感信息,包括一些程序的源代码。

  这里,笔者平时不使用码云,就简单提一下。下面,我将重点介绍github的使用:

  学习这个用法对我来说最大的好处是,当返回大量数据时,可以根据一些特征过滤掉一些垃圾数据。

  Github 搜索页面:

  (1) 速查表

  基本查询:

  

  搜索存储库:

  

  搜索代码:

  

  搜索用户:

  

  (2)私讯呆子

  filename:config.php dbpasswdfilename:.bashrc passwordshodan\_api\_key language:pythonpath:sites datab ases password"baidu.com" ssh language:yamlfilename:file.php admin in:pathorg:companyname "AWS\_ACCESS\_KEY_ID:"

  (3)对于 关键词查询

  用双引号括起来,如“”

  (4)您可以使用 GitDorker 自定义 dork 并自动执行查询。

  git clone https://github.com/obheda12/GitDorker.gitcd GitDorkerdocker build -t gitdorker .docker run -it gitdorkerdocker run -it -v $(pwd)/tf:/tf gitdorker -tf tf/TOKENSFILE -q tesla.com -d dorks/DORKFILE -o tesladocker run -it -v $(pwd)/tf:/tf xshuden/gitdorker -tf tf/TOKENSFILE -q tesla.com -d dorks/DORKFILE -o tesla

  免费安装:

  python3 GitDorker.py -tf ./TF/TOKENSFILE -q ximalaya.com -d ./Dorks/alldorksv3 -o x mly

  

  参考:

  0x1.2个搜索引擎

  谷歌:

  XX源码XX完整包xx安装程序xx备份xx代码xx开源xx源程序xx框架xx ext:rar | ext:tar.gz |ext:zip

  

  0x1.3网盘搜索

  这个网站做了一个合集,比较全。

  

  0x2 曲线思路

  如果还是0x1中描述的找不到源代码,说明目标系统是小众或者商业类型的,所以在网上没有广泛传播,所以没办法搜索.

  这时候我们就可以利用曲线思想,通过在这个网站的根目录下查找备份文件来下载源码包。如果还是没有找到,则寻找同系统的其他网站,扫描这些网站目录下的备份文件和源码包,获取系统源码。

  我们不可能是思想上的巨人,行动上的侏儒,那么如何有效地完成这个过程呢?可以分为以下几个步骤来完成。

  0x2.1 提取特征

  关于特征,重点采集首页的特征,即直接访问域名显示的页面,因为首页最容易被搜索引擎爬虫爬取,其次,是采集主页可以访问的其他标志性页面功能。

  (1)标志特征

  请求 favicon.ico 获取哈希

  

  (2) 关键词特点

  网站标题、网站版权信息、javascript关键字信息、html源码结构信息、http返回头特性。

  0x2.2 资产采集

  资产采集方面,除了自己写的调度脚本整合fofa、shodan、zoomeye之外,我还喜欢用一个功能丰富、运行稳定的工具——fofaviewer。

  下载:

  

  0x2.3 简单的模糊测试

  采集资产后,前期喜欢用httpx做一些简单的路径检测

  cat targets.xt|deduplicate|httpx -path '/wwwroot.zip' -status-code

  

  相当于做了一个简单的过滤层,帮助nuclei减少请求量。

  0x2.4 写核插件

  阅读并学习编写插件的官方文档:Guide Knows:

  编写插件的第一步:插件信息

  新建一个backup-files.yaml文件,写入如下内容

  参考:#template-detail available

  id为必填项,不能收录空格,一般与文件名相同

  信息区域是动态的。除了name、author、des cription、severity和tags,还可以添加其他key:values。核检索调用支持标签,可参考类似插件编写。

  id: back-up-filesinfo: name: Find Resource Code Of Target Template author: xq17 severity: medium tags: exposure,backup

  写插件的第二步:发送请求

  参考:已知

  1.HTTP 请求以请求块开始,该块指定模板请求的开始。

  2.根据需要,请求方法可以是GET、POST、PUT、DELETE等。

  3.可以为每个模板指定重定向条件。默认情况下,不遵循重定向。但是,如果需要,可以通过重定向启用它们:请求详细信息中为 true。

  4.请求的下一部分是请求路径的路径。动态变量可以放置在路径中以在运行时修改其行为。

  变量以 {{ 开头,以 }} 结尾,并且区分大小写。

  {{baseURL}} - 这将在运行时将请求中的请求替换为目标文件中指定的原创 URL。

  {{Hostname}} - 主机名变量在运行时被目标主机名替换。

  5.还可以指定标头与请求一起发送。标头以键/值对的形式放置。一个示例标头配置如下所示:

  # headers contains the headers for the requestheaders: # 自定义用户代理头 User-Agent: Some-Random-User-Agent # 自定义请求来源 Origin:

  6.Body 指定与请求一起发送的正文。 (需要发送 POST 数据包)

  7.要在多个请求之间维护类似基于cookie的浏览器会话,您可以简单地在模板中使用cookie-reuse: true,在您希望在一系列请求之间维护会话以完成漏洞利用的情况下很有用链并执行经过身份验证的扫描。 (会话复用,作用是连接攻击链实现登录认证然后攻击)

  # cookie-reuse 接受布尔输入和 falseas defaultcookie-reuse: true

  8.请求条件允许检查多个请求之间的条件,以编写复杂的检查和涉及多个 HTTP 请求的漏洞利用以完成漏洞利用链。

  使用 DSL matcher,可以通过添加 req-condition: true 和 numbers 作为后缀来使用,例如 status_code_1、status_code_3 和 body_2。(编写复杂的攻击链)

  req-condition: true matchers: - type: dsl dsl: - "status\_code\_1 == 404 && status\_code\_2 == 200 && contains((body\_2), 'secret \_string')"

  ...有很多高级用法比如支持raw http、race等,但是这里没有用到。文档就够了。

  requests: - method: GET path: - "{{b aseURL}}/wwwroot.zip" - "{{b aseURL}}/www.zip"

  写插件的第三步:确定返回的内容

  参考:知道

  可以在一个请求中指定多个匹配器。基本上有6种匹配器:

  status(状态码)size(返回包大小)word(字符串)regex(正则匹配)binary(二进制文件)

  还有一个dsl,高度定制化验证返回内容,可以对返回内容做一些操作(这个暂时不可用)

  可用的辅助函数:,

  对于单词和正则表达式,返回内容的多个匹配条件可以用AND或OR组合。

  可以在单个匹配器中指定多个单词和正则表达式,并且可以使用 AND 和 OR 等不同条件进行配置

  可以选择返回包的匹配区域,默认是body,也可以选择header等任意位置。

  也可以为请求匹配响应的多个部分,如果未定义,则默认匹配部分为正文。

  支持否定条件,这就是矛盾法之美。

  所有类型的匹配器也支持否定条件,这在您查找具有排除项的匹配时非常有用。这可以通过在 matchers 块中添加negative: true 来使用。

  支持使用多个匹配器

  可以在单个模板中使用多个匹配器来识别单个请求的多个条件。

  支持匹配条件

  在使用多个匹配器时,默认条件是在所有匹配器之间进行 OR 操作,如果所有匹配器都返回 true,则可以使用 AND 操作确保返回结果。

  结合上面文档的介绍,可以写出如下判断。

   matchers-condition: and matchers: - type: binary binary: - "504B0304" # zip part: body - type: dsl dsl: - "len(body)>0" - type: status status: - 200

  编写插件的第 4 步:链接各部分

  以上代码内容按顺序链接,如下:

  id: back-up-filesinfo: name: Find Resource Code Of Target Template author: xq17 severity: medium tags: exposure,backuprequests: - method: GET path: - "{{b aseURL}}/wwwroot.zip" - "{{b aseURL}}/www.zip" matchers-condition: and matchers: - type: binary binary: - "504B0304" # zip part: body - type: dsl dsl: - "len(body)>0" - type: status status: - 200

  0x2.5 测试插件

  在本地启动目标机器进行调试:

  python3 -m http.server 9091

  

  然后调试:

  echo 'http://127.0.0.1:9091' | nuclei -t back-up-files.yaml -debug -timeout 2 -stats -proxy-url http://127.0.0.1:8080/

  

  签约流程:

  

  可以看到,插件应用到nuclei后,可以快速Fuzz出备份文件网站。

  0x3 总结

  第一部分主要介绍了nuclei插件编写的一些思路和简单思路,帮助新手快速上手。第二部分是关于如何增强插件,增加扫描目录列表,更准确的判断返回值等(这里建议读者自行阅读nuclei-template的文档,这样学习效果更好!),第三部分就是利用前两篇文章的知识点和增强插件完成一次真正的搜索网站源码之旅。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线