1.命令注入:
LOW等级:
输入没有任何限制,可以直接ping;
Medium等级:
介绍一下str_replace()函数和array_key()函数:
Str_replace(str1,str2,str3):将str3中的str1替换成str2.
Array_key():返回数组中的键值。
所以上述代码的意思就是把&&和;过滤掉了,但是这很容易绕过,我们输入&;&就可以ping命令了。
High等级:
从上述代码可以看到,已经几乎过滤掉所有关键字,但是我们还是可以想办法绕过:
可以看到'| '后有空格,所以我们可以构造127.0.0.1|||ping xxx.com这样的语句进行绕过:
总结:high等级虽然用白名单过滤掉所有关键字,但是还是能绕过去,由此可见白名单并不安全,应当采用黑名单。
2.反射性XSS:
Medium等级:
从上图可以看到,它将<script>过滤掉了,但是也只是过滤掉了<script>,而且str_replacce()函数对大小写是进行区分的,所以我们可以用<img>标签 或者<Script>来绕过;
High等级
先说下preg_replace()函数:
preg_replace(str1,str2,str3):将str3中的str1替换成str2.
由上图可知,这是讲<script>过滤掉,并且不区分大小写。但是我们让然可以绕过,使用<img>标签就可以了。
存储型XSS和反射性一样,这里就不作分析了。