web入门命令执行

命令执行1-4

在一些特定场景里面这些方法都是通用的

第一个任务里面是屏蔽了flag这个词,首先使用?c=system(‘ls’);来查看目录,还有一个指令是?c=phpinfo();可以查看到php的信息,知道目录之后用?c=system(“cp flag.php 1.txt”);来查看文件,由于它过滤了flag,所以说要用一个符号去替换flag中的字母才可以执行,切换目录之后直接输入1.txt即可查看文件中的flag

第二个任务里面过滤了flag和system和php这些词,这时候我们可以用顿号来代替system这个字符,而且再用?去代替它过滤的词语,写出来就是?c=cp fla?.??? 1.txt;来直接得到flag文件的目录,然后输入1.txt找到flag

第三个任务中过滤了一堆字符,这时候使用嵌套eval来执行,该字符可以使得你输入的指令不会受到屏蔽,在下一个任务中也可以用同样的方法,cat指令是查看文件的意思,所以整条指令为?c=eval($_GET[1]);&1=system(‘cat flag.php’);之后执行之后发现是空白,因为是藏在php的文件里面,这时候我们去查看源代码就可以找到flag,第二种方法可以吧cat 改为tac就是反过来读,同样也可以找到flag

第四个任务同样是屏蔽了一堆字符(有空格和分号),这时候可以使用上一个方法,还有一个方法就是使用?c=include&0a$_GET[1];&1=/etc/passwd,这时候发现不能执行,因为;已经被过滤了,所以我们使用?>来代替;,而%0a是一个换行符。这时候我们读取了文本文件。然后再修改后面&1=flag.php发现是看不到的,因为他没有输入flag的变量,因为没有;分隔导致无法输出,所以我们要用文件包含来做这个题目,所以我们使用hackbar里面的LFI的插件做,在&1=后面点击插件,再输入flag.php,因为用了插件之后没有过滤了,拿到一串base64的码,在复制到下面点击encoding中的base64 decode解码得到flag

命令执行5

看题目的时候可以知道它屏蔽了一些字符,这次包括双引号。解法与上一个大同小异,先打开hackbar之后再url后面添加?c=require%0a$_GET[1]?>&1=/etc/passwd,进去之后用在&1=后面点击插件,再输入flag.php,因为用了插件之后没有过滤了,拿到一串base64的码,在复制到下面点击encoding中的base64 decode解码得到flag

命令执行6

看题目知道这个题目多过滤了一个冒号,所以可以使用语言结构,语言结构有echo print isset unset include require这些,而phpinfo属于在数据段使用的。所以这里要用?c=include%0a$_GET[1]?>&1=/etc/passwd,进去之后用在&1=后面点击插件,再输入flag.php,因为用了插件之后没有过滤了,拿到一串base64的码,在复制到下面点击encoding中的base64 decode解码得到flag

命令执行7

本题目和上两题一样

命令执行8

本题过滤数字,吧GET[1]换成GET[a]和&1换成&a之后和上面的题一模一样

命令执行9

本题考点是伪协议,所以我们使用data协议去做,在url后面添加?c=data://text/plain,之后就复制一个flag文件到1.txt里面,之后再直接访问txt就行

命令执行10

本题屏蔽了php,所以上一题的做法不可行,所以吧php改成=号,后面的php换成*号就变成一个短标签,变成这种形式?c=data://text/plain,,然后查找1.txt即可

命令执行11

首先用?c=data://text/plain,来查看一下是否可以使用,可知可以使用之后就输入?c=data://text/plain,得到flag

命令执行12

本题增多了屏蔽的符号。第一种方法显示原码show_source(next(array_reverse(scandir(pos(localeconv())))));

下面是一些函数的作用

localeconv():返回一包含本地数字及货币格式信息的数组。其中数组中的第一个为点号(.)
pos():返回数组中的当前元素的值。
array_reverse():数组逆序,将数组转置
打印当初路径下文件的函数:print_r(scandir(‘.’))
current() 函数返回数组中的当前元素(单元),默认取第一个值scandir():获取目录下的文件,pos和它相同
next(): 函数将内部指针指向数组中的下一个元素,并输出。
因为屏蔽了点号,所以首先使用print_r(scandir(pos(localeconv())));查看打印当前目录,之后因为flag在第三个元素,所以我们使用next和array_reverse函数去输出