渗透|Clown'sBlog

渗透-Clown'sBlog|渗透测试技巧|黑客攻防|0day公布

关于建立社工库的经验总结

小康's Blog:

环境介绍   


①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/mysqldatadir=/home/data/mysql/tmpdir=/MysqlTemp/#socket=/var/lib/mysql/mysql.socksocket=/home/data/mysql/mysql.sockuser=mysqldefault-character-set = utf8max_allowed_packet = 200Mnet_buffer_length = 65536wait_timeout = 2880000interactive_timeout = 2880000symbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-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 -puse 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



评论
热度(2)
  1. 渗透|Clown'sBlog小康's Blog 转载了此文字
  2. 渗透|Clown'sBlog小康's Blog 转载了此文字

© 渗透|Clown'sBlog | Powered by LOFTER