灵活布置、可二次开发的乌云公开漏洞及知识库搜索
*本文原创作者:grt1stnull,本文属FreeBuf原创奖励计划,未经许可禁止转载
感谢hanc00l爬取了wooyun的网页,才使乌云关闭后,大家依旧可以访问以前的漏洞库、知识库。hanc00l发布了基于flask或者torndo的乌云公开漏洞、知识库搜索的github项目,同时发布了已经配置好的虚拟机,允许大家直接把乌云搭建在了本地。
为了方便的在本地进行乌云搜索,我准备把乌云搜索搭建在树莓派上。但是,hanc00l使用的数据库是mangodb,总数据在6GB左右。32位的mangodb支持的总共数据大小最大是2GB,而我的树莓派正是32位,所以我没办法在树莓派上布置。
于是利用静态的乌云漏洞库、知识库,我自己建立了数据库、搜索页面,实现了可在apache、nginx等上布置,基于mysql数据库的乌云知识库、漏洞库搜索项目。
我的项目使用python依次处理静态页面,用正则抽取出信息再批量插入数据库;之后又写了个php,实现了对数据库的搜索。
二.python的经验分享
我在python中利用的扩展库是BeautifulSoup与MySQLdb。关于这两个库的介绍有很多,下面我主要介绍下我对这两个库的操作。
1)beautifulsoup的使用
from bs4 import BeautifulSoup #引用库soup=BeautifulSoup(html,"html.parser") #创建BeautifulSoup对象,html为目标
大家可以输出一下试试
2)MySQLdb的使用
import MySQLdb #引用库
try: #错误处理
对于mysql不是很熟悉的同学如果有phpmyadmin的话可以在phpmyadmin中操作一下数据库,可以预览mysql语句。也可以在mysql命令行中执行语句尝试。
三.php的经验分享
虽然以前一直会php和css,但是这是第一次真正写一个动态页面。
首先对参数进行过滤。判断是否为整数数字:
if(is_numeric($_GET['page'])&&is_int($_GET['page']+0)){
php中标签的输出是这样的!
echo "<p style="display:inline-block;">haha</p>";
bootstrap很好用!
推荐链接:
bootstarap基本css样式;
bootstarp组件。
php对数据库的处理:
现在版本的php不再推荐MYSQL函数了,建议使用PDO或者mysqli
本来想使用pdo的,想感受一下预处理。但是pdo会对参数中的某些字符进行转义。无论我怎么处理都会报错,最终我决定使用mysqli了。
//mysql建立连接
参数如上,不解释了。host有两种方式,默认端口是localhost;指定端口是localhost:3307
$query0="SELECT count(*) FROM `".$kind."` WHERE `title` LIKE '%".$keywords."%'"; #mysql语句
四.后记
在课业之余用了10天时间搭建完成,见识了很多扩展,很有帮助。
我的新浪微博:http://weibo.com/grt1st
项目github地址:https://github.com/grt1st/wooyun_search
*本文原创作者:grt1stnull,本文属FreeBuf原创奖励计划,未经许可禁止转载
- Genericons:又一个Icon Fonts 集合项目( Automattic出品)
- 牛津大学互联网研究院主任Luciano Floridi:大数据、小模式、深影响
- WordPress 主题开发之激活主题后显示自定义提示信息
- Normalize.css ——CSS Reset的友好替代品
- jQuery Builder:jQuery 库的精简之道
- 数字化的真我
- iOS / Android 移动设备中的 Touch Icons
- 高科技营销的幻觉与惊醒
- 将你的网站打造成一个iOS Web App
- 什么是人?人工智能的发展已经逼迫人类思考这样的问题
- 加法生产
- Web 前端利器Emmet 的HTML用法总结
- Web 前端利器Emmet 的CSS 用法总结
- 响应式 HTML 邮件制作之三个实例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- GET和POST的区别
- String - 68. Text Justification
- String - 273. Integer to English Words
- String - 12. Integer to Roman
- Dynamic Programming - 62. Unique Paths
- Dynamic Programming - 70. Climbing Stairs
- LinkedList - 23. Merge k Sorted Lists
- LinkedList - 86. Partition List
- LinkedList - 148. Sort List
- LinkedList - 61. Rotate List
- LinkedList - 143. Reorder List
- LinkedList - 160. Intersection of Two Linked Lists
- LinkedList - 21. Merge Two Sorted Lists
- LinkedList - 82. Remove Duplicates from Sorted List II
- LinkedList - 203. Remove Linked List Elements