xss跨站脚本

1、演示xss漏洞的三种类型

1. xss(反射型)

    1. 服务器将浏览器输入的输入,原样返回给浏览器
    1. 恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击。

1.代码image.png

2. xss(存储型)

  1. 服务器接收到浏览器的输入,先存储到服务器的数据库 ,再原样返回
  2. 当一个页面存在存储型XSS的时候,插入的恶意代码会存储到数据库中。当访问此页面查看留言时,web程序会从数据库中取出恶意代码插入到页面,导致浏览器触发xss。
    1.编入恶意代码image.png
    2.恶意代码存储后弹出image.png
    3.查看源代码image.png

3. xss(DOM型)

  1. 修改DOM节点形成xss。类似于反射型的xss。
  2. 反射型和存储型都是服务器端将代码反馈到了源码中,在源代码里可以看到xss的代码。
  3. DOM型号XSS只与客户端上的js交互,也就是说提交的恶意代码被放到了js中执行,然后显示出来。
  1. 恶意代码执行image.png
  2. 查看源代码image.png

2、演示存储型xss钓鱼管理员账户cookie

  1. 我的JS创建一个模板image.png
    2.使用创建的模板攻击image.png
    3.打开pikachu靶场,把复制的payload放进去image.png
    image.png
    4.查看返回的数据image.png

3、通关xss挑战的1、2、3、5、6、7、8,配合后端代码解释相关关卡为什么这么绕过可以弹窗

image.png

1.Level1

1.1 查看传参知点

  • 传参点:name=test
  • 传参测试:image.png

1.2 代码审计

  1. 反射型xss,将name后面的值test改为<script>alert('xss')</script> :
    image.png
  2. 构造script标签

2.Level2

2.1 查看传参知点

  • 传参点:keyword=test&submit=搜索
  • 传参测试:image.pngimage.png

2.2 代码审计

"><"

  1. 构造闭合语句,再写入恶意script代码image.png

3.Level3

3.1 代码审计

1.写入查看页面源码image.png
2.使用函数对网页上的特殊字符进行url编码image.png
3.插入的语句插入在input的标签中,没有触发该js脚本,因此我们可以闭合掉input标签来实现该js脚本触发image.png
4.image.png

4.Level5

4.1 代码审计

  1. 写入查看页面源码
    image.png
    2.我们传进去的参数部分被实体化了,<"> ,但是它的闭合方式跟上一关的不一样,这关事单引号,那我们就试一下单引号闭合看下,要注意的是咋们要绕过实体化,所以我们重新构造一个payloadimage.png
    image.png
    image.png

5.Level6

5.1 代码审计

  1. 写入查看页面源码
    2.测试发现,on 和 script被过滤了image.png
    image.png
    3.大小写没有过滤image.png
    image.png

6.Level7

6.1 查看传参知点

6.2 代码审计

  1. 写入查看页面源码
    image.png
    2.多了一个双引号过滤,而且这里还是插入到a标签的超链接中,因此我们这就要利用a标签的隐藏属性,a标签自动Unicode解码,因此我们利用unicode编码来绕过
    image.png
    image.png

7.Level8

代码审计

  1. 写入查看页面源码
    image.png
    2.多了一个判断,判断写入的url有没有https:// ,没有的话直接出错,有的话才能插入,所以这里要利用html的一个特性,就是注释的代码也会被执行,所以我们吧http://注释掉来绕过image.png
    image.png

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>';
?>

image.png
image.png

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
?>

1.字符串替换字符串image.png
2.数组的键值用字符串替换image.png
3.数组替换数组,一一映射替换image.png

  1. 如$search为数组,$replace为字符串时image.png
posted @ 2024-03-05 08:50  谔斯猫  阅读(128)  评论(0编辑  收藏  举报