├── .gitattributes ├── README.md ├── jwt认证攻击.md └── test.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
实战社工库搭建 solr架构 python开发查询页面
2 | 3 | ## 0x前言 4 | 5 | 之前就在坛子里和大家交流了下搭建裤子的问题,本来还以为估计要被喷死,没想到大家还是挺友好的,多谢理解。之前一直有ctf比赛 acm训练赛 之前本来和404约好8月初弄好的结果一下子到26号才开始弄,现在差不多了,后面就是导入数据和扩容 移植ssd的问题了(数据量大再过滤) 6 | 7 | 8 | 9 | ## 0x吐槽 10 | 11 | elk的查询速度其实是比solr要好的 tools里面也有大佬分享了这个教程[elk搭建社工库](https://www.t00ls.net/viewthread.php?tid=32593&highlight=%E7%A4%BE%E5%B7%A5%E5%BA%93) 当时看了下 感觉硬盘要求有点高 而且是企业级的 后来在freebuf看到[技术分享:如何用Solr搭建大数据查询平台](http://www.freebuf.com/articles/database/100423.html) 这个文章 当时看到java tomcat 什么的 自己作为ctf一个web选手平时都没本地玩过 就耐着性子弄下去了。 12 | 13 | ## 0x正文 14 | 15 | 环境:Mac pd虚拟机ubuntu16.04 安装mysql solr5.5.5 java8 16 | 17 | 具体安装过程:参考上面的链接 18 | 19 | 其中有些细节参考下评论区来解决 (感觉solr还是low 不建议去安装 不过我已经入坑,分享经验) 20 | 21 | 安装好后 做个优化 22 | 23 | solr开机自启动(方便做增量更新) 24 | 25 | 按照上面那个教程 成功从mysql导入到solr中 26 | 27 | 然后solr有web的查询接口: 28 | 29 | ``` 30 | http://10.211.55.6:8983/solr/solr_newsgk/select?q=keyword:xq17&start=10&rows=100&wt=json&indent=true 31 | ``` 32 | 33 | 返回的是json格式的数据 很方便 34 | 35 | 然后我们只要本地写个查询web就行了 作者后面也给出了java和solr内置接口的代码 看起来比http要 36 | 37 | 快. 不过我最近买了本<>比较薄的一本书还有bootstrap详解 然后干脆用这两个来锻炼下 38 | 39 | python开发能力。 40 | 41 | 42 | 43 | ![image-20180828005141969](https://ws2.sinaimg.cn/large/0069RVTdgy1fuoqtidmd8j31g20todoh.jpg) 44 | 45 | ssbootstrap简单写了下模版: 46 | ![image-20180828005400458](https://ws2.sinaimg.cn/large/0069RVTdgy1fuoqvq453aj31kw0vq7wi.jpg) 47 | 然后前端差不多弄好了,然后后台对key字段做了一些处理,比如对非纯数字字符加*达到精确查询的效 48 | 果。 49 | 50 | ##0x 导入数据 清理数据 51 | 52 | 这里我采用某盟89w会员数据作为测试。 后期就是清理各种数据 导入的问题了 诚请教大佬们技巧 53 | 54 | 首先得到的是一个sql数据. 我直接在naviat 转储数据结构 然后把sql还原 然后再导出向导 把id字段去掉 55 | 56 | 这个时候就得到了一个比较规则的insert语句了 57 | 58 | 然后把本来那个cdb_uc_member字段替换为````b41new`(username,password,email,salt)``` 59 | 60 | 然后再navicat sgk这个数据库那里右键运行sql文件 直接导入89w数据 然后sql update 添加 61 | 62 | 来源 (ps:感觉自己做的有点多余,有数据清理导入数据的大佬求指点) 63 | 64 | ![image-20180828010724012](https://ws3.sinaimg.cn/large/0069RVTdgy1fuorczoi4nj30m80a8abr.jpg) 65 | 66 | 做完这一步之后,接下来就是全量导入数据的问题了 67 | 68 | ![image-20180828011039606](https://ws3.sinaimg.cn/large/0069RVTdgy1fuorcws3l9j315805wjw5.jpg) 69 | 70 | 接近90w条 导入花费了1min 42秒 这个速度的话导入1亿需要2*100=200/60=3.3小时 71 | 72 | 要是用固态会好很多估计 虚拟机感觉跑的有点吃力 solr只要存好配置 很简单就可以在移植到另外 73 | 74 | 一个平台 等数据量大了 我就去听画船师傅那样去搞个树莓派 弄个流弊的ssd 大出血。 75 | 76 | 77 | 78 | ## 0x效果 79 | 80 | 81 | 82 | ![image-20180828011456646](https://ws1.sinaimg.cn/large/0069RVTdgy1fuorhibg54j31kw0zykjl.jpg) 83 | 84 | 这个0秒其实没那么快 是因为做了缓存的缘故 第二次才会那么快 一般都是几秒. 85 | 86 | 这里我分享下数据库结构 87 | 88 | ``` 89 | `id` bigint NOT NULL auto_increment, 90 | username varchar(255), 91 | email varchar(255), 92 | password varchar(255), 93 | salt varchar(255), 94 | ip varchar(255), 95 | iphone varchar(255), 96 | wechat varchar(255), 97 | idno varchar(255), 98 | realname varchar(255), 99 | site varchar(255), 100 | updatetime timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 101 | PRIMARY KEY (id) 102 | ``` 103 | 104 | 因为手头有一些校花的数据 微信 手机号 真实姓名就把这个字段弄进去 个人感觉没啥用 浪费前端位置 105 | 106 | 后期考虑加个隐藏窗口(目的:学习bootstrap的js技巧啦) 美女啥的不在乎 107 | 108 | ## 0x增量更新 109 | 110 | 增量更新solr很简单参考上文文章和网上的教程 111 | 112 | 上面我也给出了updatetime这个字段 113 | 114 | 按照文章配置: 115 | 116 | db-data-config.xml 117 | 118 | 这个文件就行了 119 | 120 | 后面就可以选择直接get更新或者 121 | 122 | 自己手动去(我就是手动的哈 自动啥的不存在的我电脑 又不是挂机的,树莓派后期考虑下) 123 | 124 | ![image-20180828012543778](https://ws2.sinaimg.cn/large/0069RVTdgy1fuorssh12vj31fg0riq6m.jpg) 125 | 126 | 这里我的表没有更新数据 所以就没数据可以进行索引。 127 | 128 | 129 | 130 | ## 0xEnd 131 | 132 | 这个东西是个长期维护的过程,清理数据和整理数据导入,还有对solr进行优化 达到更快的要求 都是我 133 | 134 | 接下来空闲的时候去思考的。 135 | 136 | 后面对小七论坛 还有 网易x箱 进行 数据清洗 这个挑战有点大 合起来差不多100g了 137 | 138 | 弄好的话maybe可以分享下清理的思路(本菜鸡都是切割出来丢服务器慢慢跑脚本哈哈 50g硬盘) 139 | 140 | ## 0xTODO 141 | 142 | 吗的。为啥我没入elk的坑呢 我是土豪啊。。。。。。 143 | 144 | 算了还是十几万的车,我适合开 145 | 146 | ps:我感觉solr的搭建过程还是比较简单的 几个小时就能从一无所知到修修改改 147 | 148 | 由于web查询页面写的太垃圾 避免被同学嘲笑 故不开源 等后期 弄清楚flask开发 完善下再考虑丢 149 | 150 | githud。 151 | 152 | 153 | 154 | tools论坛好像不支持外链(图片挂的话请直接访问githud): 155 | -------------------------------------------------------------------------------- /jwt认证攻击.md: -------------------------------------------------------------------------------- 1 | (1)解密链接: 2 | 3 | (2)参考链接: 4 | 5 | 1.jwt 全称: json web token 6 | 7 | 8 | 9 | 掌握知识点: 10 | 11 | (1)http是无状态的 12 | 13 | (2)session两个弊端: 14 | 15 | ​ 1.session保存在服务端,占用服务端空间 16 | 17 | 2.服务端为集群时,将session保存到服务器内存中,当用户访问到其他服务器时,会无法访问 18 | 19 | 解决办法:缓存一致性技术 或者 第三方缓存 20 | 21 | (3) jwt 在header的位置 cookie 或者header Authorization: Bearer 22 | 23 | (4) 第二部分base64不能解密 很可能是缺少= 没有填充满 24 | 25 | 1.jwt的构成 26 | 27 | (1)Header eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 28 | 29 | (2)Payload eyJhZG1pbiI6InRydWUifQ 30 | 31 | (3)Signature eyJhZG1pbiI6InRydWUifQ.03jOKnTqOkqP7gzd1rxaIy4wQSntb18yg2noERrVhUU 32 | 33 | 34 | 35 | Example: 36 | 37 | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6InRydWUifQ.03jOKnTqOkqP7gzd1rxaIy4wQSntb18yg2noERrVhUU 38 | 39 | 40 | 41 | 一.header 42 | 43 | { 44 | 45 | "alg": "HS256”, 加密签名的散列算法 46 | 47 | "typ": “JWT” 令牌类型 48 | 49 | } 50 | 51 | 二.payload 52 | 53 | Data 包含声明的有效负载 声明:关于实体(通常是用户)和其他院数据的声明 54 | 55 | { 56 | 57 | "admin": “true” 58 | 59 | } 60 | 61 | 三.Signature 62 | 63 | HS 256 (HMAC SHA256) 64 | 65 | HMACSHA256( 66 | 67 | base64Encode(header)+”.”+base64Encode(payload),secret 68 | 69 | ) 70 | 71 | 72 | 73 | 二.JWT的攻击手段 74 | 75 | 1.算法修改攻击 76 | 77 | 原理: 头部的alg可被修改 若公钥泄漏 后台通过alg选择验证算法 可以把rs256(非对称加密)->hs256(对称加密)进行伪装 78 | 79 | 2.秘钥可控 80 | 81 | header{ 82 | 83 | “type”:”jwt”, 84 | 85 | “alg”:”sha256”, 86 | 87 | “kid”:”8201" 88 | 89 | } 90 | 91 | Kid可以注入 然后获取key进行加密 92 | 93 | 3.秘钥爆破问题 94 | 95 | 工具:https://[github.com/brendan-rius/c-jwt-cracker](http://github.com/brendan-rius/c-jwt-cracker) 96 | 97 | 然后即可进行消息的恶意伪造,篡改 98 | 99 | 4.指定算法为none 100 | 101 | 原理:有些实现jwt的库直接将使用none算法的token认为是已经过检验的 102 | 103 | 利用:”alg”:”none” signature部分为空值即可 104 | 105 | 106 | 107 | 三.JWT实战分析 108 | -------------------------------------------------------------------------------- /test.md: -------------------------------------------------------------------------------- 1 |
实战社工库搭建 solr架构 python开发查询页面
2 | 3 | ## 0x前言 4 | 5 | 之前就在坛子里和大家交流了下搭建裤子的问题,本来还以为估计要被喷死,没想到大家还是挺友好的,多谢理解。之前一直有ctf比赛 acm训练赛 之前本来和404约好8月初弄好的结果一下子到26号才开始弄,现在差不多了,后面就是导入数据和扩容 移植ssd的问题了(数据量大再过滤) 6 | 7 | 8 | 9 | ## 0x吐槽 10 | 11 | elk的查询速度其实是比solr要好的 tools里面也有大佬分享了这个教程[elk搭建社工库](https://www.t00ls.net/viewthread.php?tid=32593&highlight=%E7%A4%BE%E5%B7%A5%E5%BA%93) 当时看了下 感觉硬盘要求有点高 而且是企业级的 后来在freebuf看到[技术分享:如何用Solr搭建大数据查询平台](http://www.freebuf.com/articles/database/100423.html) 这个文章 当时看到java tomcat 什么的 自己作为ctf一个web选手平时都没本地玩过 就耐着性子弄下去了。 12 | 13 | ## 0x正文 14 | 15 | 环境:Mac pd虚拟机ubuntu16.04 安装mysql solr5.5.5 java8 16 | 17 | 具体安装过程:参考上面的链接 18 | 19 | 其中有些细节参考下评论区来解决 (感觉solr还是low 不建议去安装 不过我已经入坑,分享经验) 20 | 21 | 安装好后 做个优化 22 | 23 | solr开机自启动(方便做增量更新) 24 | 25 | 按照上面那个教程 成功从mysql导入到solr中 26 | 27 | 然后solr有web的查询接口: 28 | 29 | ``` 30 | http://10.211.55.6:8983/solr/solr_newsgk/select?q=keyword:xq17&start=10&rows=100&wt=json&indent=true 31 | ``` 32 | 33 | 返回的是json格式的数据 很方便 34 | 35 | 然后我们只要本地写个查询web就行了 作者后面也给出了java和solr内置接口的代码 看起来比http要 36 | 37 | 快. 不过我最近买了本<>比较薄的一本书还有bootstrap详解 然后干脆用这两个来锻炼下 38 | 39 | python开发能力。 40 | 41 | 42 | 43 | ![image-20180828005141969](https://ws2.sinaimg.cn/large/0069RVTdgy1fuoqtidmd8j31g20todoh.jpg) 44 | 45 | ssbootstrap简单写了下模版: 46 | ![image-20180828005400458](https://ws2.sinaimg.cn/large/0069RVTdgy1fuoqvq453aj31kw0vq7wi.jpg) 47 | 然后前端差不多弄好了,然后后台对key字段做了一些处理,比如对非纯数字字符加*达到精确查询的效 48 | 果。 49 | 50 | ##0x 导入数据 清理数据 51 | 52 | 这里我采用某盟89w会员数据作为测试。 后期就是清理各种数据 导入的问题了 诚请教大佬们技巧 53 | 54 | 首先得到的是一个sql数据. 我直接在naviat 转储数据结构 然后把sql还原 然后再导出向导 把id字段去掉 55 | 56 | 这个时候就得到了一个比较规则的insert语句了 57 | 58 | 然后把本来那个cdb_uc_member字段替换为````b41new`(username,password,email,salt)``` 59 | 60 | 然后再navicat sgk这个数据库那里右键运行sql文件 直接导入89w数据 然后sql update 添加 61 | 62 | 来源 (ps:感觉自己做的有点多余,有数据清理导入数据的大佬求指点) 63 | 64 | ![image-20180828010724012](https://ws3.sinaimg.cn/large/0069RVTdgy1fuorczoi4nj30m80a8abr.jpg) 65 | 66 | 做完这一步之后,接下来就是全量导入数据的问题了 67 | 68 | ![image-20180828011039606](https://ws3.sinaimg.cn/large/0069RVTdgy1fuorcws3l9j315805wjw5.jpg) 69 | 70 | 接近90w条 导入花费了1min 42秒 这个速度的话导入1亿需要2*100=200/60=3.3小时 71 | 72 | 要是用固态会好很多估计 虚拟机感觉跑的有点吃力 solr只要存好配置 很简单就可以在移植到另外 73 | 74 | 一个平台 等数据量大了 我就去听画船师傅那样去搞个树莓派 弄个流弊的ssd 大出血。 75 | 76 | 77 | 78 | ## 0x效果 79 | ![image-20180828011456646](https://ws1.sinaimg.cn/large/0069RVTdgy1fuorhibg54j31kw0zykjl.jpg) 80 | 81 | 这个0秒其实没那么快 是因为做了缓存的缘故 第二次才会那么快 一般都是几秒. 82 | 83 | 这里我分享下数据库结构 84 | 85 | ``` 86 | `id` bigint NOT NULL auto_increment, 87 | username varchar(255), 88 | email varchar(255), 89 | password varchar(255), 90 | salt varchar(255), 91 | ip varchar(255), 92 | iphone varchar(255), 93 | wechat varchar(255), 94 | idno varchar(255), 95 | realname varchar(255), 96 | site varchar(255), 97 | updatetime timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 98 | PRIMARY KEY (id) 99 | ``` 100 | 101 | 因为手头有一些校花的数据 微信 手机号 真实姓名就把这个字段弄进去 个人感觉没啥用 浪费前端位置 102 | 103 | 后期考虑加个隐藏窗口(目的:学习bootstrap的js技巧啦) 美女啥的不在乎 104 | 105 | ## 0x增量更新 106 | 107 | 增量更新solr很简单参考上文文章和网上的教程 108 | 109 | 上面我也给出了updatetime这个字段 110 | 111 | 按照文章配置: 112 | 113 | db-data-config.xml 114 | 115 | 这个文件就行了 116 | 117 | 后面就可以选择直接get更新或者 118 | 119 | 自己手动去(我就是手动的哈 自动啥的不存在的我电脑 又不是挂机的,树莓派后期考虑下) 120 | 121 | ![image-20180828012543778](https://ws2.sinaimg.cn/large/0069RVTdgy1fuorssh12vj31fg0riq6m.jpg) 122 | 123 | 这里我的表没有更新数据 所以就没数据可以进行索引。 124 | 125 | 126 | 127 | ## 0xEnd 128 | 129 | 这个东西是个长期维护的过程,清理数据和整理数据导入,还有对solr进行优化 达到更快的要求 都是我 130 | 131 | 接下来空闲的时候去思考的。 132 | 133 | 后面对小七论坛 还有 网易x箱 进行 数据清洗 这个挑战有点大 合起来差不多100g了 134 | 135 | 弄好的话maybe可以分享下清理的思路(本菜鸡都是切割出来丢服务器慢慢跑脚本哈哈 50g硬盘) 136 | 137 | ## 0xTODO 138 | 139 | 吗的。为啥我没入elk的坑呢 我是土豪啊。。。。。。 140 | 141 | 算了还是十几万的车,我适合开 142 | 143 | ps:我感觉solr的搭建过程还是比较简单的 几个小时就能从一无所知到修修改改 144 | 145 | 由于web查询页面写的太垃圾 避免被同学嘲笑 故不开源 等后期 弄清楚flask开发 完善下再考虑丢 146 | 147 | githud。 148 | 149 | 150 | 151 | tools论坛好像不支持外链(图片挂的话请直接访问githud): 152 | --------------------------------------------------------------------------------