- A+
免责声明:本站提供安全工具、程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!
“社工库”是运用社会工程学进行渗透测试时候积累的各方面数据的结构化数据库。
环境介绍
①Host:Fedora(English)(server),win8(中文)
②Fedora安装apache,Mysql Workbench,语言包(Fedora安装时选择)。
③Database:Mysql 安装在Fedora, 建库/表统一编码UTF8,修改my.cnf中的datadir=单独的一个分区,tmpdir=空间足够大的空间( > 16G)。
④Win8:安装了notepad++,Navicat。
MySql配置如下:
/etc/my.cnf
[mysqld] skip-name-resolve #datadir=/var/lib/mysql datadir=/home/data/mysql/ tmpdir=/MysqlTemp/ #socket=/var/lib/mysql/mysql.sock socket=/home/data/mysql/mysql.sock user=mysql default-character-set = utf8 max_allowed_packet = 200M net_buffer_length = 65536 wait_timeout = 2880000 interactive_timeout = 2880000 symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [mysql] socket=/home/data/mysql/mysql.sock [mysqldump] socket=/home/data/mysql/mysql.sock [mysqladmin] socket=/home/data/mysql/mysql.sock
着重修改datadir, tmpdir, socket。
可能有的同学还用txtSearch,我觉得实在是有点慢,还…
准备篇
① txt体积不超过400M的一律先转化成UTF-8编码格式(8G内存图形化可以使用Notepad++)
② 检查txt中是否有 "(双引号) '(单引号),会导致意外终止。(还有其他原因后面提到)
③ 如果遇见分割成碎小体积的多份带有编码格式的txt,使用linux下的cat * > 1.txt时会出现编码问题(这也就是为什么先执行第一条),其实windows可用type * > 1.txt搞定。(注: windows下type *源文件和目标文件要保持不同目录,windows下的命令工具确实有点渣。咳~)
④ sql格式的文件,建表时检查是否有索引,删除之,导入后再建,其速度回提高不少。
数据导入篇
①sql文件,删除key `user` (user) ;之类索引后,mysql执行source xxx.sql 导入,不用考虑编码问题,入库后直接使用workbench或nevicat编辑数据库属性转UTF8编码即可,然后再添加索引。
②txt文件(使用tab间隔,回车换行),select into outfile txt / bcp 可以使用mysql命令load data infile a.txt into table test.a;(默认缺省FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' ,行缺省LINES TERMINATED BY '\n' STARTING BY '')
③txt文件(非tab的规律间隔符),可以使用操作简单的Navicat 导入。
④txt文件(非规律间隔符),使用py处理成有序文本,再使用Navicat 导入。
上图是不规则的空格+tab,下图编写代码处理下。
偶遇几个异常,统计下看看所占比例。
except:
count=count +1
来看看处理后的结果。
⑤关于mssql转mysql
㈠MySQL-Migration-Toolkit
㈡Mssql to Access then access to MySQL
㈢BCP then Load data local infile txt into table xx;
Win(mssql) cmd执行
bcp "select * from dbname.dbo.info" queryout info.txt -c -x -S127.0.0.1 -Usa -P123.456 或者 bcp dbname.dbo.info out info.txt -c -x -S127.0.0.1 -Usa -P123.456
Fedora(MySQL)执行
mysql -u root -p use test; Load data local infile "/home/info.txt" into table xx;
⑥EmpireBak帝国备份王
apache部署EmpireBak,设置目录权限。备份数据复制到bdata目录。登陆主界面,先设置参数,连接数据库,然后选择恢复数据选择要恢复的数据库。
优化篇
①数据简化
delete from `XXXX` where mail not like "%@%"; 删除不符合邮件格式的记录 delete FROM `XXXX` where mail is null and length(username)<4; 删除邮件为空并且用户名长度小于4的记录 delete FROM `XXXX` where length(password)<4; 删除密码长度小于4的记录 delete from `xxxx` where mail is null and password=username; ......
②数据去重
方法一
delete from `xxx` where id in (select * from (SELECT min(id) FROM `xxx` group by mail having count(mail)>1) as a);
这是百度文章里 提到的最多的的一条语句。240W的数据处理了3个多小时才删除了19w数据。
方法二
create table tmp_xxx select min(id) as id,mail,password from xxx group by mail,password;
同样的240w数据去重不到两分钟就搞定了。(160w spend 56s )
注:这条命令最容易出现的一个问题是临时空间不足,如果tmp是单独分区空间太小的话,可以修改my.cnf的tmpdir=/otherdir 。保证otherdir空间充足(>16G)。修改otherdir权限,mysql可以访问修改。重启mysql。
③关于查询优化
㈠分清楚精确查询还是模糊查询 ,精确查询例如手机号;模糊查询例如用户名和邮箱。=比like效率高。
㈡模糊查询尽量使用'string%' 来代替'%string%' 。
㈢sql语句中能使用单引号的尽量使用单引号。
㈣如果ID和行数一样,select * from xxx where id=888;可以用select * from xxx limit 887,1;代替(无索引时使用)。
④添加索引
给常用查询字段添加索引,模糊类用BTREE存储类型,精确类用HASH存储类型。
推荐使用Navicat 选择表打开表讯息,选择DDL选项卡,可以清楚看到该表的sql,有无索引一目了然,然后右击数据库名选择它的console功能,来快速添加索引。
ALTER TABLE `XXX` ADD INDEX `inx_username` (`username`) , ADD INDEX `inx_mail` (`mail`) ;
⑤表类型使用MyISAM
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持。另外MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率也就对应提高了不少。
问题篇
①关于利用帝国备份王跨平台恢复所见问题
㈠打开本地页面,显示空白。
帝国备份采用了不是完全标准的php格式(<?php … ?>)书写,用了短标记格式<?…?> ,所以针对解决办法就是配置php.ini,启动短标记格式。
short_open_tag = On
㈡恢复数据时,点击开始恢复,提示参数不对
确保要恢复的数据库名和备份名一样(可在备份文件目录下的config.php查看),确保备份的php源文件有读写权限或者 chgrp apache * -R 。
②PHP 问题
㈠Fatal error: Allowed memory size of 134217728 bytes
最大单线程的独立内存使用量超过了128M。修改/etc/php.ini
memory_limit=512M
㈡时区错误问题
修改/etc/php.ini
date.timezone = Asia/Chongqing
㈢mysql默认位置修改
修改/etc/php.ini
mysql.default_socket = /home/data/mysql/mysql.sock
㈣Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (latin1_general_ci,IMPLICIT)
查询的几个表之间,字符编码不统一,不能在当前页面显示。转UTF8。
③sql 加密, hex
④MySQL 问题
㈠[Err]Got a packet bigger then 'max_allowed_packet' bytes
百度之,max_allowed_packet = 500M 但是错误依然没有解决。 (那些只知道转载的坑货)
来看看错误提示,居然是一个双引号? 请看准备篇第2条。
㈡MySQL server has gone away
百度之:一、可能是发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因,你只要修改my.cnf,加大max_allowed_packet的值即可。(又是这一套,我#$%&#*~)
二、应用程序(PHP)长时间的执行批量的MYSQL语句,超过了mysql的 wait-timeout时间。
修改/etc/php.ini
wait_timeout=2880000 interactive_timeout = 2880000
但是问题还是没解决。我的实际操作过程中遇到过几次,大部分是这两种情况。
Α使用MySQL Workbench向1700W条数据添加索引时。
Β使用Navicat 去重时。
那么使用Terminal 看看。
麻麻再也不用担心MySql离我而去了。
㈢SQL文件带索引导入的,要检查index是否有效。
建议篇
①基于各种数据库层数不穷的泄露,除了密码算法要各种加强外,我们自己的密码也要既有复杂性,又有迷惑性。例如 I1O0'",|/\r\n;
②数据库和web脚本也要考虑到扩展性,不同来源的表都要单独的建立一个新表。
③web页面上对于每张表的查询时间可帮助你精确定位。
④关于数据优化,我建议入库时保留regip,优化时采用如下语句来优化。
select regip,count(*) group by regip order by count(*) desc;
本条语句作用,你懂得,不用谢我。然后怎么做,你也懂。
实例
实例一
以2014-9-11国外某论坛流出来的gmail-5000000.txt文件为例。
1.检查字符UTF-8,检查单双引号,既有单引号又有双引号还有波浪号。(看来国外有些人的密码意识很强)
2.分隔符是":" ,统计":"个数比行数多好几万。明显有部分人密码中带有":"。(不能简单的用Navicat解决)
3.简单修改py脚本替换gmail.txt第一个出现的冒号为\t。
嗯,一个都不能少。
实例二
以图为例
1.分隔符采用 “—-”,统计“—-”个数。 (居然还有人用这个当密码?)
2.navicat不能采用2位以上的分隔符。
3.先建表,然后采用load data local infile方法。(别忘了转UTF8 ,当然入库转也可以)
Load data local infile `/home/xx/Desktop/b14.txt' into table `tn` fields terminated by '----';
what!这么多警告,来看看是什么鬼。
垃圾邮箱这么多…
数据优化来一套:
delete from xxx where mail like 'aaaaaa%' and password like '111111%'; delete from xxx where id in(619665,618512,615362,606705,591547,571497,514328,509353,509349,509345,509342,494415,374357,346237,281087,255543,236556,227425,226934,22391,190644,161981,160870,132437,112240,86570,14403,9667); ......
自己看情况脑补。
以上的所有问题,全是实际操作中所遇到,如果你也遇到过,来,点个赞。 3Q
*作者:iframe,本文属FreeBuf原创奖励计划,未经许可禁止转载