1、演示xss漏洞的三种类型
1. xss(反射型)
- 服务器将浏览器输入的输入,原样返回给浏览器
- 恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击。
1.代码
2. xss(存储型)
- 服务器接收到浏览器的输入,先存储到服务器的数据库 ,再原样返回
- 当一个页面存在存储型XSS的时候,插入的恶意代码会存储到数据库中。当访问此页面查看留言时,web程序会从数据库中取出恶意代码插入到页面,导致浏览器触发xss。
1.编入恶意代码
2.恶意代码存储后弹出
3.查看源代码
3. xss(DOM型)
- 修改DOM节点形成xss。类似于反射型的xss。
- 反射型和存储型都是服务器端将代码反馈到了源码中,在源代码里可以看到xss的代码。
- DOM型号XSS只与客户端上的js交互,也就是说提交的恶意代码被放到了js中执行,然后显示出来。
- 恶意代码执行
- 查看源代码
2、演示存储型xss钓鱼管理员账户cookie
- 我的JS创建一个模板
2.使用创建的模板攻击
3.打开pikachu靶场,把复制的payload放进去
4.查看返回的数据
3、通关xss挑战的1、2、3、5、6、7、8,配合后端代码解释相关关卡为什么这么绕过可以弹窗
1.Level1
1.1 查看传参知点
- 传参点:name=test
- 传参测试:
1.2 代码审计
- 反射型xss,将name后面的值test改为
<script>alert('xss')</script>
:
- 构造script标签
2.Level2
2.1 查看传参知点
- 传参点:keyword=test&submit=搜索
- 传参测试:
2.2 代码审计
"><"
- 构造闭合语句,再写入恶意script代码
3.Level3
3.1 代码审计
1.写入查看页面源码
2.使用函数对网页上的特殊字符进行url编码
3.插入的语句插入在input的标签中,没有触发该js脚本,因此我们可以闭合掉input标签来实现该js脚本触发
4.
4.Level5
4.1 代码审计
- 写入查看页面源码
2.我们传进去的参数部分被实体化了,<"> ,但是它的闭合方式跟上一关的不一样,这关事单引号,那我们就试一下单引号闭合看下,要注意的是咋们要绕过实体化,所以我们重新构造一个payload
5.Level6
5.1 代码审计
- 写入查看页面源码
2.测试发现,on 和 script被过滤了
3.大小写没有过滤
6.Level7
6.1 查看传参知点
6.2 代码审计
- 写入查看页面源码
2.多了一个双引号过滤,而且这里还是插入到a标签的超链接中,因此我们这就要利用a标签的隐藏属性,a标签自动Unicode解码,因此我们利用unicode编码来绕过
7.Level8
代码审计
- 写入查看页面源码
2.多了一个判断,判断写入的url有没有https:// ,没有的话直接出错,有的话才能插入,所以这里要利用html的一个特性,就是注释的代码也会被执行,所以我们吧http://注释掉来绕过
4、自主尝试strtolower,str_replace函数的作用
1. strtolower
函数语法:
**strtolower ( string $string ) : string** 1. **strtolower()** 函数将 string 中所有的字母字符转换为小写并返回。 2. 该函数和 strtoupper() 函数相反,strtoupper() 函数将字符串转化为大写。
代码演示:
<meta charset="UTF-8">
<?php
//strtolower
$str = "Headsomeboy I have";
echo '原字符串输出为:'.$str;
echo '<br>';
$str_1 = strtolower($str);
echo '转换后输出为:'.$str_1;
echo '<br>';
?>
2. str_replace
函数语法:
**str_replace(find,replace,string,count)** - count:对替换数进行计数的变量。[在 PHP 5.0 中,新增了 count 参数。] 1. find:规定要查找的字符串或数组; 2. replace:被用来替换的字符串或数组; 3. string:被查询的字符串或数组; 4. count:可选,替换的次数
代码演示:
<?php
//str_replace
//实例一:字符串替换字符串
$str1 = str_replace("red","black","red green yellow pink purple");
echo $str1; //输出结果为black green yellow pink purple
echo "<br>";
//实例二:数组的键值用字符串替换
$arr = array("blue","red","green","yellow");
$str1 = str_replace("red","pink",$arr,$count);
print_r($str1);
//输出结果
//Array ( [0] => blue [1] => pink [2] => green [3] => yellow )
echo "<br>" . $count; //输出替换次数1
//实例三:数组替换数组,一一映射替换
$arr1 = array("banana","orange");
$arr2 = array("pitaya","tomato");
$con_arr = array("apple","orange","banana","grape");
$con_rep = str_replace($arr1,$arr2,$con_arr,$count1);
print_r($con_rep);
//输出结果
// Array ( [0] => apple [1] => tomato [2] => pitaya [3] => grape )
echo "<br>" . $count1; //输出替换次数2
//实例四:如$search为数组,$replace为字符串时
$search = array("banana","grape");
$replace = "tomato";
$arr = array("banana","apple","orange","grape");
$new_arr = str_replace($search,$replace,$arr,$count2);
print_r($new_arr);
//输出结果
//Array ( [0] => tomato [1] => apple [2] => orange [3] => tomato )
echo "<br>" . $count2; //输出替换次数2
?>
标签:脚本,xss,跨站,恶意代码,代码,replace,str,替换 From: https://www.cnblogs.com/TessCat/p/180531921.字符串替换字符串
2.数组的键值用字符串替换
3.数组替换数组,一一映射替换
- 如$search为数组,$replace为字符串时