记录自己入门的做题过程。
low等级

尝试输入127.0.0.1

由回显可知可知是调用了ping命令
尝试进行注入

命令连接符:
command1&&command2 命令1执行成功就执行命令2
command1&command2 先执行命令2再执行命令1
command1||command2 命令1执行失败的情况下执行命令2
command1|command2 命令1执行的结果交给只命令2执行
command1;command2 命令1和命令2无关系都会执行
查看源码:
可知对用户传进来的参数没有进行过滤直接调用shell_exec()执行
medium等级
采用low等级同样的输入

命令执行
查看源码:

对比low等级,medium等级添加了对&&和;的过滤语句,但是仍旧可以用|或者||来进行绕过
high等级

仍旧可以用|进行注入【一条语句打通关了…】
查看源码:

high等级基本对命令连接符都进行了过滤,但是仔细观察可以发现它过滤的是| 【后面有个空格】,所以|可以成功进行注入。【不知道加个空格的原因是啥,故意留一个注入点嘛hhhhhh】
最后我们看一下impossible的源代码:
第一加上了token验证来防止CSRF
第二对用户输入的数据先从.处进行分割然后再使用is_numeric()来判断是否为数字
保证了用户只能输入数字,来防止命令注入。