如图1。“同学写了个ping功能,但没有写waf,老师告诉她这是非常危险的,你知道为什么吗。”,这是一道经典题,多次出现在各种类型的比赛中。
一、漏洞成因:如题目所说,在给予了高权限的位置,没有waf过滤,约等于白送管理员权限。
二、利用方法:可以利用管道符号连接其他命令,然后做你想做的事。
三、准备知识:
1、管道符号
①在 Bash 中,管道符使用"丨"代表。管道符也是用来连接多条命令的,如"命令1丨命令2"。
②不过和多命令顺序执行不同的是,用管道符连接的命令,命令 1的正确输出作为命令 2 的操作对象。这里需要注意,命令 1 必须有正确输出,而命令 2 必须可以处理命令 1 的输出结果;而且命令 2只能处理命令 1 的正确输出,而不能处理错误输出。
2、ping命令只有正确执行后,才能视为“有正确输出”(ping命令在执行后也会返回0或1表示是否正确执行了)
四、Payload
①ping 127.0.0.1 | find / -name "flag*"
发现服务器未做任何过滤,正常回显,在home路径下有flag.txt文件
②ping 127.0.0.1 | cat /home/flag.txt
至此得到flag。
五、管道符号其他应用场景
①我们经常需要使用"||"命令査看文件的长格式,在有些目录中文件众多,比如 /etc/ 目录,使用"ll"命令显示的内容就会非常多,只能看到最后的内容,而不能看到前面输出的内容。这时,我们马上想到 more 命令可以分屏显示文件内容,可是怎么让 more 命令分屏显示命令的输出呢?
[root@localhost ~]# ll -a /etc/|more
这条命令大家可以这样理解:先把"ll -a /etc"命令 的输出保存到某个临时文件中,再用 more 命令处理这个文件。也就是我们说的第一个命令的正确输出是第二条命令处理和操作的对象。
注意,ll 命令操作的是文件名,所以匹配时使用的是通配符。但是一旦加入管道符,管道符之后的内容相当于操作的是文件内容,所以匹配时使用的是正则表达式。
②用于从一个命令的结果里查找关键词或者记次
参考资料:
http://c.biancheng.net/view/949.html
https://www.jianshu.com/p/0f5b68d584c9