做一下DVWA中high级别的XSS,首先看一下源代码:
我们可以看到使用了php中的preg_replace函数进行正则替换。
$str="acsdcs<55555555>sc<6666>sdcd";
echo preg_replace("/<.*>/","",$str);
上述两行代码的替换规则为:将str中以<开头,以>结尾中任意长度的字符替换为空格,其中的.代表任意字符;*号代表着任意个数;如果我们想设置有限的个数,可以做出如下的修改:
$str="acsdcs<55555555>sc<6666>sdcd";
echo preg_replace("/<.{4}>/","",$str);
其中的{4}代表着<>中有4个字符;
$str="acsdcs<55555555>sc<6666>sd<>cd";
echo preg_replace("/<[0-9]*>/","",$str);
//输出acsdcscd
echo "";
echo preg_replace("/<[0-9]+>/","",$str);
//输入acsdcsscsd<>cd
?>
*号代表重复0次或者是n次;而+号代表着至少重复1次,所以在<>中至少要有一个数字,如果为空的话,则不进行替换。
$str="acsdcs<55555555>sc<6666>sd<>cd";
echo preg_replace("/<[0-9]?>/","",$str);//输出acsdcs<55555555>sc<6666>sdcd
?>
然而这里的?是重复0次或者1次,超过1个数字的时候便不符合条件。
我们可以通过两种方法进行弹窗:
1. <img src=1 οnerrοr=alert("xss");>
2. <input οnfοcus="alert('xss');" autofocus>
常见加密(编码)特征总结
MD5:加密的结果是由32位数字和小写字母组成
MD5(16位):加密的结果是由16位数字和小写字母组成
SHA-1:加密结果由40位数字加小写字母组成
SHA-256:加密结果由64位数字加小写字母组成
SHA-384:加密结果由96位数字加小写字母组成
SHA-512:加密结果由128位数字加小写字母组成
URL编码:空格-%20;0~9-%30~%39;abcdegfhijklmnopqrstuvwxyz-%61%62%63%64%65%66%67%68%69%6A%6B%6C%6D%6E%6F%70%71%72%73%74%75%76%77%78%79%7A
AES:由加密模式、填充、数据块、密码、偏移量、输出、字符集组成的。对应的解密是需要填充方式、数据块(可以进行手工测试),以及密码和偏移量(这两者是在加密的时候设置的)
BASE64编码:密文长度随明文长度变化,密文由数字,大小写字母,和字符组成,常会出现==,+,=
Unescape编码:abcd -> %u6261%u6463%u0a0d%u0000 %u0000表示明文长度为偶数 ,否则表示明文的长度为奇数
常见的加密方式包括:直接加密,带salt,带密码,带偏移量,带位数的,带模式,带干扰,自定义组合加密。