简介
做web的时候为了对漏洞有更深入的理解,常常需要对交互的流量进行分析,在此记录笔者用到的流量分析工具。
Socat
Socat是一个多功能的网络工具,名字来由是 ”Socket CAT”,可以看作是netcat的加强版,socat的官方网站:http://www.dest-unreach.org/socat/。
Socat是一个两个独立通道之间的双向数据传输的中继器,我主要用来端口转发。
用法
|
|
其中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为例
|
|
在redis-cli中执行如下命令
127.0.0.1:6376> set name test
OK
127.0.0.1:6376> get name
"test"
127.0.0.1:6376>
得到的回复如下:
|
|
如果对RESP了解的话,可以看到命令作为Bulk Strings的数组,服务器根据发送的请求给予回复。以上述数据为例,首先是*3
,代表数组的长度为3(可以简单理解为用空格为分隔符将命令分割为[“set”,“name”,“test”]),接着$3
,字符串长度为3,每行结束以0d 0a
即\r\n
结尾……服务器返回简单字符串+OK
,
利用上述的方法可以获取redis客户端与服务器的交互流量,对流量进行格式转换之后,可以利用dict协议或gopher协议进行ssrf。