command_execution

95 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

command_execution

小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。 在这里插入图片描述 ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序 。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态 ping127.0.0.1——这个Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机。如果没有做到这一点,就表示TCP/IP的安装或运行存在某些最基本的问题, 回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好.

TCPPing

在进行ICMPPing的时候,如果在目标主机的网络网关过滤了ICMP Ping包,ICMPPing的结果就不准确了。此时,应该考虑其他方式,如TCPPing、LIDPPing。TCP的功能是在一对ULP(UpperLayerProtocol,高层协议)之间提供的数据报服务基础上,建立可靠的端对端连接,并提供虚电路服务和面向数据流的传输服务。TCP中的基本传输单元是段(Segment),一个TCP段由段头和数据流两部分组成

在TCP协议中,SYN包用来表示建立连接请求。如果对方端口处在listening状态,就会回送ACK包,并附上自己的ISN。但是如果对方端口是关闭的,它会发回一个RST包,表示应该马上断开连接(少数情况下会发回一个同时置SYN和ACK位的包)。如果我们向一个端口发送ACK包,而事先没有与此端口建立连接,那么,无论端口是否打开,它都会回送一个RST包。所以可以看出,无论这个端口是否打开,总会有某一种数据包返回,以此可以判定目标主机可达。而目标主机如果不可达,路由器就会向扫描主机发送目的地不可达的ICMP报文。这样,通过向目标主机发送TCPSYN包或TCPACK包就可以准确判断目标主机是否可达,而且根据RFC793(TCP),目标主机(或路由器)都无法屏蔽TCPSYN包和TCPACK包,因此,TCPPing的准确性比ICMPPing的准确性要高。在实现的时候,需要利用RAW Socket,定制TCP包并封装在IP包中。在Linux系统下,非root用户是没有此项权利的,同样Windows的非.Administrator组用户也不能直接填写TCP包头和IP包头

UDPPing

TCP/IP协议组中,用户数据报协议(UDP)提供应用进程之间数据报传送的基本机制。每个UDP报文不仅传送用户数据,而且还包括发送方和接收方的协议端口号

UDPPing与TCPPing的原理类似,通过RAWSocket定制UDP包,主要是格式化UDP包中的目的端口号,一般指定一个数量值很大的目的端口号(比如31558),很少应用程序用到数量值入的端口号,也就是说该端口很有可能是处于关闭状态。首先构建好UDP报文,然后递交给IP实体发送。如果目标主机不可达(网络不通或主机未打开),则路由器将发送一个目的不可达ICMP报文。而如果目标主机可达,在其接收数据时,其UDP实体首先判断接收到的目的端口号是否与当前使用的某端口号匹配,如果匹配,则将数据报放入到对应的接收队列,否则如果目的端口号对应的端口关闭则丢弃该数据报,并回送一个“端口不可达”的ICMP报文,因此,只要目标主机可达,UDPPing程序将收到一个UDP回应包(也可能没有)或者“端口不可达”的ICMP报文而目标主机不可达,将收到“目的不可达’’的ICMP报文 咱们ping一下本地地址127.0.0.1 在这里插入图片描述 我们查找flag.txt文件,flag在flag.txt中

127.0.0.1 & find / -name flag.txt

在这里插入图片描述 在/home/目录下,我们cat它

127.0.0.1 & cat /home/flag.txt

在这里插入图片描述