# src_make_money **Repository Path**: niexinming666/src_make_money ## Basic Information - **Project Name**: src_make_money - **Description**: src_make_money - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-12-21 - **Last Updated**: 2023-04-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 介绍 这是挖src的一个被动扫描工具 # 安装 此项目是基于ubuntu16.04或者mac系统和Python2.7的,所以,请尽量使用差不多的环境 ## 安装MongoDB 参考 https://www.cnblogs.com/LongJiangXie/p/6080859.html 在ubuntu上安装阿里源的MongoDB 1、添加 MongoDB 公共GPG钥匙。 ``` sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 ``` 2、创建列表文件,官方ubuntu16.04安装代码如下: ``` echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list ``` 因为我们要替换国内的镜像,所以这里就不能使用 repo.mongodb.org 作下载地址了。把官方这句替换如下: ``` echo "deb http://mirrors.aliyun.com/mongodb/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list ``` 3、重新加载本地包数据库 ``` sudo apt-get update ``` 4、安装MongoDB ``` sudo apt-get install -y mongodb-org ``` 5、启动MongoDB ``` sudo service mongod start ``` ## 安装chrome ubuntu https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb ``` sudo dpkg -i google-chrome-stable_current_amd64.deb ``` ## 安装chromedriver 参考:https://blog.csdn.net/pangtouyu_qy/article/details/80282795 ``` sudo apt-get install unzip wget -N https://chromedriver.storage.googleapis.com/2.45/chromedriver_linux64.zip #全部版本的下载地址在https://chromedriver.storage.googleapis.com/index.html 对应的版本说明是: https://blog.csdn.net/huilan_same/article/details/51896672/ unzip chromedriver_linux64.zip chmod +x chromedriver sudo mv -f chromedriver /usr/local/share/chromedriver sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver ``` ## 安装python的依赖库 ``` sudo pip install -r requirements.txt ``` # 运行方法 首先,要先下载burp 安装burp的插件:Log Requests to SQLite 然后把日志设置到此项目下的log目录中,数据库名称最好是burp_log.db ![](https://xzfile.aliyuncs.com/media/upload/picture/20190122183744-c06c8e78-1e31-1.png) 如果想改数据库地址,可以在修改配置文件中:mylib/common.conf 的 [burpdb]标签下的db属性 注意:如果工具不需要调试的话,要把mylib/common.conf 的 [proxies]标签下的http和https属性写成空,就像我注释的那样 注意:如果工具不需要调试的话,要把mylib/common.conf 的 [proxies]标签下的http和https属性写成空,就像我注释的那样 注意:如果工具不需要调试的话,要把mylib/common.conf 的 [proxies]标签下的http和https属性写成空,就像我注释的那样 设置好上面的东西时候,依次运行 python2 Analyze.py python2 SendPayload.py 此时你把浏览器代理设置为burp上设置的监听地址就好 ![](https://xzfile.aliyuncs.com/media/upload/picture/20190122184503-c6681e90-1e32-1.png) ![](https://xzfile.aliyuncs.com/media/upload/picture/20190122184523-d2248e6c-1e32-1.png) 注意,在测试时你要设置好测试目标地址的主域名 设置位置在:mylib/common.conf 的 [block]下的white_host 都搞好之后就可以在浏览器中访问目标网站,如果目标网站有漏洞就会在log/bug.log中找到 如果代码报错,就会在log/logger.log 看到 # API文档 所有的插件都在payload下面 xss.py 是检测xss的 sqli.py是检测sql注入的 ssrf.py是检测ssrf的 dejson.py是检测fastjson漏洞的 cors.py是检测cors漏洞的 此外我还写了api,函数的实现都在payload/CBase.py ## 如何写插件 示例1 ``` from CBase import CBase class example1(CBase): def __init__(self,http_obj_id) super(example1,self).__init__(http_obj_id) def start_test(self): r=self.request_data(self.ch.method,self.ch.http_header,self.ch.url_domain_path,self.ch.get_param) ``` 说明: http_obj_id 为每次请求报文的id,这个id存储在MongoDB中 继承基类CBase后,会将每次的原始数据报文反序列化出来 反序列化的类结构为 ``` self.url_domain_path=url_domain_path self.http_header=http_header self.uri_path=uri_path self.method=method self.get_param=get_param self.post_param=post_param self.post_mime_type=post_mime_type ``` 1. url_domain_path为不包含get参数的url:例如:http://www.baidu.com/s 2. http_header为http请求头部数据,此为一个字典 3. uri_path 为不包含域名不包含get参数的url:例如:/who/ken/trust.html 4. method 为http请求方法:如GET,POST,PUT 5. get_param 为get请求参数,是一个字典 6. post_param 为post请求参数,不一定是字典,当post_mime_type为urlencoded类型时,是一个字典,当post_mime_type为json或者xml时,就是字符串 7. post_mime_type post报文类型,有三种:urlencoded,json,xml 通过``` super(example,self).__init__(http_obj_id) ```实例化基类之后就可以使用这些基本的东西了 使用方法是 self.ch.+参数 例如想获得http请求的method就是self.ch.method 发送请求就是request_data 这个函数,这个函数返回的r其实是requests.get()返回的东西是一样的 可以通过r.text来读取到返回报文的源码,具体用法和requests模块一样 我花了半个月的时间写了几个有趣的函数,大家可以来用一下 示例2: ``` from CBase import CBase class example2(CBase): def __init__(self,http_obj_id) _payload="payload" super(example2,self).__init__(http_obj_id) def start_test(self): for get_data in self.test_get_param_obo(): r=self.request_data(self.ch.method,self.ch.http_header,self.ch.url_domain_path,get_data) ``` 当你在初始化时,把``` _payload ```设置为你想要的payload,然后再调用test_get_param_obo这个函数,就会依次在get参数中放入payload 例如: get参数为:a=a&b=b&c=c 当设置_payload="payload"后,调用test_get_param_obo后返回的数据就是: [ {"a":"payload","b":"b","c":"c"} {"a":"a","b":"payload","c":"c"} {"a":"a","b":"b","c":"payload"} ] 此时遍历这个数组,然后发送的数据报文就是: http://example.com/?a=payload&b=b&c=c http://example.com/?a=a&b=payload&c=c http://example.com/?a=a&b=b&c=payload