Please enable Javascript to view the contents

浅尝流量分析工具

 ·  ☕ 3 分钟  ·  🎅 Lurenxiao · 👀... 阅读

简介

做web的时候为了对漏洞有更深入的理解,常常需要对交互的流量进行分析,在此记录笔者用到的流量分析工具。

Socat

Socat是一个多功能的网络工具,名字来由是 ”Socket CAT”,可以看作是netcat的加强版,socat的官方网站:http://www.dest-unreach.org/socat/。

Socat是一个两个独立通道之间的双向数据传输的中继器,我主要用来端口转发。

用法

1
socat [options] address address

其中address的描述就是socat的精髓所在了,几个常用的描述方式如下:

  • -,STDIN,STDOUT : 表示标准输入输出,可以就用一个横杠代替,不用多解释了吧_(:з」∠)_
  • /var/log/syslog : 文件路径,打开一个文件作为数据流。如果是相对路径要使用./
  • TCP:address:port : 建立一个TCP连接作为数据流,TCP也可以替换为UDP。
  • TCP-LISTEN:port : 建立TCP监听端口,TCP也可以替换为UDP。
  • EXEC:command : 执行一个程序作为数据流。

以上规则中前面的TCP等都可以小写。

[options]。常用的选项如下:

  • -v : 将传输的数据不仅写入其目标流,还写入stderr。输出格式是文本,为了可读性进行了一些转换,并以“>”或“<”作为前缀,表示流向。
  • -x : 将传输的数据不仅写入其目标流,还写入stderr。输出格式为十六进制,前缀“>”或“<”表示流向。可以与-v组合。

转发redis数据

以转发redis为例

1
socat -x -v TCP-LISTEN:6376,fork tcp-connect:127.0.1:6379

在redis-cli中执行如下命令

127.0.0.1:6376> set name test
OK
127.0.0.1:6376> get name
"test"
127.0.0.1:6376> 

得到的回复如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
> 2020/12/17 22:30:53.275257  length=33 from=17 to=49
 2a 33 0d 0a                                      *3..
 24 33 0d 0a                                      $3..
 73 65 74 0d 0a                                   set..
 24 34 0d 0a                                      $4..
 6e 61 6d 65 0d 0a                                name..
 24 34 0d 0a                                      $4..
 74 65 73 74 0d 0a                                test..
--
< 2020/12/17 22:30:53.275982  length=5 from=18609 to=18613
 2b 4f 4b 0d 0a                                   +OK..
--
> 2020/12/17 22:31:11.943001  length=23 from=50 to=72
 2a 32 0d 0a                                      *2..
 24 33 0d 0a                                      $3..
 67 65 74 0d 0a                                   get..
 24 34 0d 0a                                      $4..
 6e 61 6d 65 0d 0a                                name..
--
< 2020/12/17 22:31:11.943537  length=10 from=18614 to=18623
 24 34 0d 0a                                      $4..
 74 65 73 74 0d 0a                                test..
--

如果对RESP了解的话,可以看到命令作为Bulk Strings的数组,服务器根据发送的请求给予回复。以上述数据为例,首先是*3,代表数组的长度为3(可以简单理解为用空格为分隔符将命令分割为[“set”,“name”,“test”]),接着$3,字符串长度为3,每行结束以0d 0a\r\n结尾……服务器返回简单字符串+OK

利用上述的方法可以获取redis客户端与服务器的交互流量,对流量进行格式转换之后,可以利用dict协议或gopher协议进行ssrf。

分享

Lurenxiao
作者
Lurenxiao
学生