1.相关知识
Ping命令
ping
命令通常用来作为网络可用性的检查。ping
命令可以对一个网络地址发送测试数据包,看该网络地址是否有响应并统计响应时间,以此来测试网络的连通情况和测试网络速度。
ping
命令执行后会显示一系列Reply from或者Request timeout这样的结果。前者表示与对方的网络是连通的,而后者表示无法与对方进行网络通信。
那么,这些信息中的bytes=32;time<1ms;TTL=128
是什么意思呢?
bytes
值:表示通信过程中发送的数据包大小,单位是字节。time
值:表示响应时间,这个时间越小,说明你与对方通信的速度越快,延时越短。TTL
值:Time To Live,表示数据包再经过多少个路由器如果还不能到达就将被丢弃,这里可以通过Ping返回的TTL
值大小,粗略地判断目标系统类型是Windows系列还是UNIX/Linux系列。默认情况下,Linux系统的TTL最大值为64或255,WindowsNT/2000/XP系统的TTL最大值为128,UNIX主机的TTL最大值为255。
命令执行漏洞
应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system
、exec
、shell_exec
、passthru
、popen
、proc_popen
等函数可以执行系统命令。hacker控制这些函数的参数时,将恶意的系统命令拼接到正常命令中,造成命令执行攻击。
Windows支持的管道符:
| :直接执行后面的语句。 ping 127.0.0.1 | whoami
|| :前面语句执行出错,则执行后面的语句。 ping 127.0.0.1 || whoami
&:前面的语句可真可假 ,后面语句都会执行。ping 127.0.0.1&whoami
&&:前面语句为假则直接出错,不执行后面的语句,前面的语句只能为真。 ping 127.0.0.1&&whoami
whoami //返回用户名
ls//返回当前目录下的文件
../ //返回父目录,也就是上一级目录
/ //根目录
管道符
1. cmd1|cmd2:无论cmd1是否执行成功,cmd2都将被执行
2. cmd1;cmd2:无论cmd1是否执行成功,cmd2都将被执行
3. cmd1&cmd2:无论cmd1是否执行成功,cmd2都将被执行
4. cmd1||cmd2:仅在cmd1执行失败时才执行cmd2
5. cmd1&&cmd2:尽在cmd1执行成功时才执行cmd2
2.解题过程
- 输入127.0.0.1发现正常ping通,说明网站本身有网络连接测试功能
2.尝试输入127.0.0.1|ls,发现当前文件为index.php
。(注:此处的127.0.0.1可替换为任何数字,因为|的性质。)
2.则尝试查看上一级文件,输入127.0.0.1|ls ../(注意:ls后面一定要有空格!!!)
3.最终向上查看三次(输入127.0.0.1|ls ../),发现了一个名为flag的文件。同时查看一下根目录(输入127.0.0.1|ls /),发现该文件正好在根目录中!
4.输入127.0.0.1|cat /flag(此处的/
代表根目录),利用cat命令查看flag文件的具体内容。