作者:le4f

如何设计搭建一个社工库

从初起设计一个社工库,到现在的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.id,evil_xx.username,evil_xx.password,evil_xx.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数据处理效率最大化

mysql社工_社工数据搜索引擎搭建相关推荐

  1. java如何开发生产派工报工_派工工序报工

    派工工序报工 应用场景及介绍:用户使用终端设备扫描工序任务快速定位进行报工: HMI操作 [HMI主控台]->[派工工序报工] 操作说明: 条码扫描:默认为空,按照扫描输入的条码,查找工序计划分 ...

  2. java社招_社招|蚂蚁金服-Java-社招

    作者:一杯82年的Java 来源:牛客网 今年的面经,最后一份了,请大佬们参考.线程池 什么时候到达最大线程数 到达最大线程后继续提交的表现 用过哪些锁, synchronized Reentrant ...

  3. hive向mysql导数据_导入Hive数据导MySQL

    导入Hive数据到MySQL 1. UDF 使用UDF比较方便,代码在http://svn.apache.org/repos/asf/hive/trunk/contrib/src/java/org/a ...

  4. mysql qps提升_上亿数据MYSQL的innodb优化 QPS轻松过5000

    最近2周时间, 对于MYSQL 5.5.15-log Windows XP版本,进行了各种测试和优化.目前mysql的许多单表数据已经超过了1亿条记录,MYSQL在经过各种优化后,处理上亿条记录非常轻 ...

  5. 阿里java社招_社招|阿里巴巴Java工程师社招凉经

    作者:爱我就亲亲我 来源:牛客网 一面: 1.先介绍一下自己吧 2.说一下自己的优缺点 3.具体讲一下之前做过的项目 4.你觉得项目里给里最大的挑战是什么? 5.Hashmap为什么不用平衡树? 6. ...

  6. excel导入mysql命令行_将Excel数据导入MySql

    今天是全国数学建模比赛,同学选的一个题目需要对一个large的Excel表格进行统计,好哥们儿嘛--便帮助他完成了数据从Excel到MySql的转化.记下具体步骤分享给大家,也免得大家到网上到处乱找了 ...

  7. mysql 大文本_超大文本文件数据导入MYSQL

    今天用到一个处理650万的数据导入数据库处理的问题,在网上找了半天,终于在在三灯的博客找到办法,特此转过来以备后用,哈哈! 我执行的命令语句是mysqlimport -uroot -p123456 - ...

  8. mysql 字段变更记录_如何记录数据表信息的变更

    1 public partial classModifyRecordManager : BaseManager, IBaseManager2 {3 /// 4 ///构造函数5 /// 6 publi ...

  9. mysql 多进程 分批_多线程分批处理数据

    需求: 给10万个用户每个用户发一条祝福短信. 为了提高数程序的效率,请使用多线程技术分批发送据. 每开一个线程,都会占用CPU资源 服务器(电脑)配置 CPU 核数 建立项目名称:rain_thre ...

最新文章

  1. 项目总结---- imageLoder 的2个Bug解决方法、1.9.4如何选择性删除disk缓存和其它一些错误。...
  2. 密码学+赛博朋克,关于密码朋克们的奇妙故事
  3. 第六章 6.1 6.2 无限脉冲响应滤波器
  4. CodeForces-589B(思维/排序)
  5. 邮件MIME格式分析
  6. kafka rebalance与数据重复消费问题
  7. python杀死了excel_Python杀死了Excel|自动更新表格,告别繁琐
  8. 持续集成与持续部署宝典Part 2:创建持续集成流水线
  9. 域控制器诊断工具 (dcdiag.exe)
  10. 智能合约最佳实践 之 Solidity 编码规范
  11. 各种集合key,value能否为null
  12. 拓端tecdat|使用R语言创建自定义桑基图Sankey图
  13. python读取mat文件报错【NotImplementedError: Please use HDF reader for matlab v7.3 files】
  14. PADS2007快捷键、无模命令大全
  15. 产品 · B端生意的定义和分类
  16. Pygame实战之外星人入侵NO.11——设置开始按钮
  17. flex布局避免父盒子被撑开,滚轮失效问题
  18. C语言int类型数值溢出会怎么样
  19. vs2019如何关闭自动更新
  20. moss部署学习入门及注意事项

热门文章

  1. 算法学习之模拟退火算法路径规划(python代码实现)
  2. 【MySQL数据库的学习】
  3. python datetime与timestamp
  4. 学位论文中将表格快速转换为latex格式
  5. Nodejs 豆瓣爬虫实践
  6. echarts 柱状图,单独一根柱子根据条件改变颜色
  7. Unity3D射箭小游戏
  8. opencv学习(二十六)之图像金字塔(高斯金字塔、拉普拉斯金字塔)
  9. Linux CentOS 7.X下安装部署VNC
  10. 理解矩阵,与矩阵背后的现实意义