社工数据搜索引擎搭建 - Build Social Engineer Evildata Search Engine
如何设计搭建一个社工库
从初起设计一个社工库,到现在的Beta,前前后后零零整整花了不下一个月的时间,林林总总记录下来,留给需要之人
泄露数据库格式不一,长相奇葩,因需将用户名、密码、邮箱、哈希等信息按表分列入库,故整理数据是很耗时间的一步
整体架构
选择了Debian x64+Mysql+Mysqlcft+Sphinx+Nginx+PHP
轻量的sqlite数据库,但查询速度及空间消耗过大,对请求时sqlite处理效率较差
mangodb,但mangodb在分布计算中有更好的优势而在社工库搭建中优势并不明显
在mysql和postgresql中,选择历久弥新的mysql
为方便社工库移植,使用VM建一个虚拟机,所有数据库均在虚拟机中,LNMP环境对外只提供PHP查询接口
实际测试中,CentOS6.4虚拟机中因断电损失过多数据,并不如预想中稳定,且对CoreSeek版本较老的mmseg中文分词编译会出现各种各样的问题,难以解决。32位的操作系统在sphinx单个索引大小上会有限制,几次折腾后还是迁回了Debian7 X64
整理数据
一般使用bash脚本完成。DEMO:
普通格式:
#!/bin/bash
sed '/^[ \t]\{0,\}$/d' $1 | sed 's/[\t ]/\t/g' | sed 's/\r//g' |sed '/^\s*$/d' | awk -F"\t" '{print "NULL|||"$1"|||"$2"||||||"$1"|||xxxx|||" }' | iconv -c -f gb18030 -t UTF-8 | sort | uniq
he
UCmember格式:
#!/bin/bash
sed 's/[\r\n ]//g' $1 | tr -d '\n' | sed "s/INSERTINTO\`bbs\_uc\_members\`VALUES(//g" | sed "s/','/\t/g" | sed "s/,'/\t/g" | sed "s/',/\t/g" |sed "s/');/\n/g" | awk -F"\t" '{ print "NULL|||"$2"||||||"$3"|||"$9"|||"$4"|||"$7"|||xxxx+xxxx+evil++"}' | sed "/+evil++||||||||||||/d"
PW_MEMBER格式:
#!/bin/bash
sed 's/[\r\n ]//g' $1 | tr -d '\n' | sed "s/INSERTINTO\`pw_members\`VALUES('/\n/g" | sed "s/','/\t/g" | awk -F"\t" '{ print $1"|||"$2"||||||"$3"|||"$5"|||xxxx|||"}' | sed "/+evil++||||||||||||/d"
文件内格式不同的处理脚本eg:
#!/bin/bash
sed 's/\r//g' $1 | sed "s/'/[fenhao]/g" | sed 's/[ \t]\{1,\}/\t/g' | sed 's/----/\t/g' | awk -F "\t" '{ if ($2~/@163.com/)
{
if ($3~/^$/) {print "NULL|||"$1"|||"$2$3"||||||"}
else {print "NULL|||"$1"|||"$3"||||||"}
}
else
{print "NULL|||"$1"|||"$2"||||||"}
}' | iconv -c -f gb18030 -t UTF-8 | sort | uniq
批量按行导入:
#!/bin/bash
sed '/^[ \t]\{0,\}$/d' $1 | sed 's/\r//g' | sed '/^\s*$/d' | awk '{print "NULL|||"$0"|||xxxx|||" }'
对于数据库设计也尤为重要。测试后、按表存储、单表记录数不超过3000W,否则建全文索引时间过长。
库表设计
CREATE TABLE `evil_xxxx_1` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR( 64 ) ,
`password` VARCHAR( 64 ) ,
`passhash` VARCHAR( 64 ) ,
`email` VARCHAR( 64 )
);
CREATE TABLE `evil_ucmember_1` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR( 64 ) ,
`password` VARCHAR( 64 ) ,
`passhash` VARCHAR( 64 ) ,
`salt` VARCHAR( 16 ) ,
`email` VARCHAR( 64 ) ,
`ip` VARCHAR( 32 ) ,
`site` VARCHAR( 64 ) ,
PRIMARY KEY (id)
);
CREATE TABLE `evil_multinfo_1` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT,
`info` VARCHAR( 1024 ) ,
`site` VARCHAR( 64 ) ,
PRIMARY KEY (id)
);
分表的一个方案:
INSERT INTO evil_xx_1(evil_xx_1.id,evil_xx_1.username,evil_xx_1.password,evil_xx_1.passhash) SELECT evil_xx.id,evil_xx.username,evil_xx.password,evil_xx.passhash FROM evil_xx where user.id <= 30000000;
命令查询
show table status;//查看数据库状态
desc table; //查看表结构
set names 'utf8';//设置编码,数据表统一编码UTF-8
drop index index_name on table_name; //删除索引
alter table table_name add primary key(id);//添加主键
alter table table_name drop PRIMARY KEY;//去掉主键
truncate table table_name;//清空表中数据
alter table 表名 rename to 新表名;//重命名表
alter table table_name change Name Name varchar(16);//重命名列及格式
alter table table_name add column xxxx varchar(64) after aaaa;//添加列
alter table 表名 drop column 列名;//删除列
set @t=0;
update table_name set id=(@t:=@t+1);//重建ID
导入数据
load data infile '/tmp/xxxx.sql'
into table `evil_xxxx`
fields terminated by '|||'
lines terminated by '\n';
速度相对较快
关于索引
中文全文索引主要依赖mysqlctf和sphinx,测试发现,sphinx对于分词索引速度较快,但分词的原因导致诸如搜索humor却搜索不到humorous的情况,而mysqlctf索引速度相对较慢且无进度信息,但索引大小可控,一般全文索引1G数据库信息对应MYI大小为5-9G
关于Coreseek的编译使用,官方有较多文档
Sphinx配置文件(全文检索包括分词及最小分词5字母)
source evil_xxx
{
type = mysql
sql_host = localhost
sql_user = ooo
sql_pass = xxx
sql_db = db
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id,username,password,passhash,email FROM xxxx
sql_query_info = SELECT * FROM xxxx WHERE id=$id
}
index evil_xxx
{
source = evil_xxx
path = /usr/local/coreseek/var/data/evil_xxx
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
charset_dictpath = /usr/local/mmseg3/etc/
charset_type = zh_cn.utf-8
ngram_len = 0
min_infix_len = 5
enable_star = 1//允许模糊搜索
}
检索时调用官方API即可
关于MYSQLCFT建立索引的方法
首先是安装插件
wget http://mysqlcft.googlecode.com/files/mysqlcft-1.0.0-x86_64-bin.tar.gz
tar zxvf mysqlcft-1.0.0-x86_64-bin.tar.gz
mkdir -p /usr/local/mysqlcft/lib/mysql/plugin/
cp mysqlcft.so /usr/local/mysqlcft/lib/mysql/plugin/
登陆mysql后
INSTALL PLUGIN mysqlcft SONAME 'mysqlcft.so';
SHOW PLUGINS;
安装OK后建立索引
ALTER IGNORE TABLE 数据库名.表名 ADD FULLTEXT INDEX 全文联合索引名 (字段名1,字段名2) WITH PARSER mysqlcft;
如
ALTER IGNORE TABLE db.evil_xxxx ADD FULLTEXT INDEX fullindex(username,password,passhash,email) WITH PARSER mysqlcft;
在搜索时
SELECT * FROM evil_xxxx WHERE MATCH(username,password,passhash,email) AGAINST ('searchinfo' IN BOOLEAN MODE);
重建索引
REPAIR TABLE 数据库名.表名 QUICK;
几个Tips
- 增加来源数据库/网站字段,方便针对查询
- 同库分隔符格式不同,正则替换
- 数据库引擎选择myisam(而不是INNODB),可使用alter转换
- 入库分隔符为避免与密码字符重合,可使用类似==aaaa==等分隔符替换入库
- 数据库中有的邮箱在前密码在后,有的密码在前,邮箱在后,使用awk多写几行分支语句
- 配置my.cnf文件使得mysql数据处理效率最大化
社工数据搜索引擎搭建 - Build Social Engineer Evildata Search Engine的更多相关文章
- 社工工具包 SEToolkit
社会工程学(Social Engineering)简称社工,其通过分析攻击对象的心理弱点,利用人性的本能反应,以及任何好奇心,贪婪等心理特征进行的,使用诸如假冒,欺骗,引诱等多种手段来达成攻击目标的一 ...
- Bugku-CTF社工篇之简单的个人信息收集
- 我是如何社工TDbank获取朋友隐私的
原创 ziwen@beebeeto 转载请保留本行 个人感觉 国外的安全方面对社工的了解和防范并不是很好 即使他们使用社工的时间比我们要长很多 比如 他们的visa在pos机上使用是不需要密码的 而且 ...
- 大数据平台搭建(hadoop+spark)
大数据平台搭建(hadoop+spark) 一.基本信息 1. 服务器基本信息 主机名 ip地址 安装服务 spark-master 172.16.200.81 jdk.hadoop.spark.sc ...
- python 模拟ajax查询社工库...
在windows中使用,输入有关信息查询社工库,本来是网页版的,我把ajax请求提取出来.粗略的封装下,挺好玩. #coding:utf8 import urllib2,urllib from Bea ...
- 常见社工破解WPA2密码方法及防范措施
0×00前言 何为社工?社工是一种通过利用受害者心理弱点,如本能反应.好奇心.同情心.信任.贪婪等进行诸如欺骗.盗取.控制等非法手段的一种攻击方式.在无线安全中也可以利用社工做到许多非法操作.下面举几 ...
- 用Python实现一个大数据搜索引擎
用Python实现一个大数据搜索引擎 搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家 ...
- bugku 社工进阶
首先看到的是 由于之前知道有bugku的百度吧 并且这个是一个社工题所以可以试一下这个百度吧 进入百度吧然后会见到 这句话的意思是要我们登录这个账号 但是我们只有账号没有密码 如果爆破的话很有可 ...
- Bugku-CTF社工篇之简单的社工尝试
随机推荐
- HDU 1176 免费馅饼:dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意: 横坐标范围为[0,10],你在第0秒站在坐标为5的地方. 在接下来的一段时间内,会有n个 ...
- python 在大文件里面删除某一行,比较有效率的方法
用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件. 但如果要处理一个很大的文本,比如GB级别的文本时,这种方法不仅需要占用很大内存,而且 ...
- 从零宽断言说起到用python匹配html标签内容
版权声明:本文为博主原创文章,转载请附带原文网址http://www.cnblogs.com/wbchanblog/p/7411750.html ,谢谢! 提示:本文主要是讲解零宽断言,所以阅读本文需 ...
- Hibernate2---- 查询单条记录
1.根据已完成的Hibernate1基础案例,我们接下来写一下查询,修改删除,对于基础生可以学习一下 只改写一下测试类的代码 private void findStudent() { //02Hibe ...
- Struts2学习笔记(四)——result结果类型
当Action类的方法处理请求后,会返回一个字符串(逻辑视图名),框架根据这个结果码选择对应的result,向用户输出,所以需要在struts.xml提供<result>元素定义结果页面, ...
- Notification弹出实现
Notification的几种基本使用方法,大家肯定都已经烂熟于心,我也不必多说.给一个链接:https://zhuanlan.zhihu.com/p/25841482 接下来我想说的是android ...
- AOP 面向切面的编程
一.面向切面的编程需求的产生 代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀.每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点. 代码分散: 以日志需求为例,只是为了 ...
- 如何使用 flannel host-gw backend?- 每天5分钟玩转 Docker 容器技术(62)
flannel 支持多种 backend,前面我们讨论的是 vxlan,host-gw 是 flannel 的另一个 backend,本节会将前面的 vxlan backend 切换成 host-gw ...
- POI 自用API
poi包下载 API 使用POI生成Excel,大家都是赞个.可是狐狸觉得毕竟不是微软的产品,使用没有C#语言的好用,方法还是存在极限的. 下面总结狐狸自己用过的方法: import org.apac ...
- 阿里 java学习之路
https://maimai.cn/article/detail?fid=96107193&push_id=5603&share_user=http%3A%2F%2Fi9.taou.c ...