XSS总结

  • 题目

    leval3

    leval2没有使用htmlspecialchars函数,我们可以直接输入

    "><script>alert(1)</script>

    但是level4使用了htmlspecialchars函数

    定义和用法
    htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
    1

    所以为了避免这些出现,我们可以使用事件注入,通过闭合value值,然后再用onclick弹窗,也即是

    'onclick='alert(1)

    写里面之后再点击一下输入框就会弹窗了。
    1
    其实上面拼接之后就是

    <input name=keyword value=''onclick='alert(1)'>这就好理解多了

    这里看到<input就应该想到这个onclick

    <input onclick=alert(11) >这个就是基础的弹框

    level4

    上面的事件注入照样也可以。
    是这里面他并没有使用htmlspecialchars,而是将输入的<、>两个字符给置空了。
    1

    level5

    1
    这里上面两个都不能用了,我试了一下"><input+onclick=alert(1)+>//结果直接两个输入框,点击输入框也没用,因为我们所输入的就是==$str==的值,这样也避免不了被替换。
    1
    这时候要想到使用另一种弹窗方法<a href="javascript:alert(1)">,这里输入

    "><a href="javascript:alert(1)"

    然后我标记的地方就是一个链接,点击之后就会执行弹窗
    2

    level6

    1
    这关没有过滤大小写,只需要将那个前面的语句改为大写就行。

    level7

    7

    和上题的区别就是增加了转换大小写,还有将上面那些字符给置空了,那么我们可以进行双写绕过。

    level8

    8

    在这里我们上面的方法用不了了,大小写、双写都不行了,下面是用html实体编码绕过
    javascript:alert(1)的实体编码为&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;

    level9

    9
    这一关在上一关的基础上检查了数据中是否会有**http://**字段,这里只需要改为alert('http://')即可

    level10

    1
    在这里题目就是一张图片,在这里唯一能下手的就是参数。
    2
    那么由上面代码可以看到有用的就是t_sort,而这里<input name="t_sort" value="'.$str33.'" type="hidden">将其隐藏了。

    • 这个<input>元素的作用是在一个表单中添加了一个隐藏的输入字段,名称为”t_link”,初始值为”‘$str33‘“。当用户提交表单时,这个隐藏字段的值会被包含在表单数据中,从而可以在后台进行相应的处理。隐藏字段常常用于在不影响用户体验的情况下传递一些重要的数据。

    由于input是被隐藏的,那么就需要其他方法触发,这里采用html的accesskey属性。

    • accesskey 是 HTML 中的一个全局属性(global attribute),它用于指定一个快捷键(access key)来激活或焦点(focus)特定的元素。使用快捷键可以通过键盘操作来快速访问页面上的某些元素,而无需使用鼠标。
      当用户按下指定的快捷键组合时,与 accesskey 属性关联的元素将获得焦点或激活,具体的行为取决于元素的类型。通常,浏览器和操作系统会提供不同的组合键来触发快捷键,比如在 Windows 下使用 Alt 键 + 快捷键,在 macOS 下使用 Control 键 + 快捷键。

    • accesskey 属性可以应用于几乎所有的HTML元素,包括链接、按钮、输入字段等等。

    以下是一个使用 accesskey 属性的简单示例:

    <!DOCTYPE html>
    <html>
    <head>
        <title>accesskey 示例</title>
    </head>
    <body>
    
    <p>按下 Alt + G 快速跳转到 Google 网站:</p>
    <a href="https://www.google.com" accesskey="g">Google</a>
    
    <p>按下 Alt + S 快速提交表单:</p>
    <form>
        <input type="text" name="search" accesskey="s">
        <input type="submit" value="Search">
    </form>
    
    </body>
    </html>

    不同的浏览器和操作系统可能会对 accesskey 的支持有所不同。

    所以这里我们采用t_sort=2" accesskey="x" onclick="alert(1)" type="text"

    level11

    11

    bp抓包注入到referer中

    REFERER: " type="text" onclick="alert('xss')

    level12
    注入到UA头中。
    level13
    注入cookie中。

    level15

    1
    了解一下**ng-include**:
    2
    那这里我们利用level1进行弹窗

    http://127.0.0.1:2000/xss-labs/level15.php?src='level1.php?name=<img src=asd onerror=alert(1) >'

    level16
    空格被过滤使用换行符。

    <img%0asrc=x%0aonerror=alert(123)>

    level17

    123

    • <embed>元素:<embed>是HTML中用于嵌入外部多媒体资源(如Flash动画、音频、视频等)的标签。

    • src属性:这是<embed>元素的一个属性,用于指定要嵌入的外部资源的URL或文件路径。

    • "xsf01.swf?":这是作为src属性值的内容。它包含了”内容”这一部分。

    利用html事件属性

    arg01=11&arg02=1 onmousedown=alert(1)
    arg01=11&arg02=1 onmouseover=alert(1)

    常见的onmousexxx事件属性:
    3

    知识点

    <img src=1 onerror=alert(1)>

    • <img>: 这是HTML标签,通常用于在网页上显示图像。然而,它也可以被利用作为XSS攻击载体。
    • src=1: 这里的src是<img>标签的属性,用于指定图像的URL。在这里,将图像的URL设置为1,这通常是为了让这个标签在显示图像时请求一个无效的URL,从而引发错误。
    • onerror=alert(1): 这是XSS攻击的关键部分。onerror是一个事件属性,它允许在图像加载失败时触发特定的JavaScript代码。在这里,恶意的JavaScript代码是alert(1),它会弹出一个警告框显示数字1。

    <input onclick=alert(1)>

    • <input>:这是HTML标签,通常用于在网页中创建交互式表单元素。在这里,它被用作一个输入元素。

    • onclick=alert(1):这是标签的事件属性之一,用于定义当用户在此输入元素上点击时要执行的JavaScript代码。在这个例子中,JavaScript代码是alert(1),它将弹出一个警告框显示数字1。

    "><a href="javascript:alert(1)"

    • <a>:这是HTML中用于创建链接的标签,通常用于导航到其他页面或资源。

    • href="javascript:alert(1)":这是<a>标签的href属性,用于指定链接的目标地址。在这个例子中,href属性的值是javascript:alert(1)。这意味着当用户点击这个链接时,将执行其中的JavaScript代码,而不是导航到一个网址。

    • alert(1):这是JavaScript代码的部分,alert()是一个JavaScript函数,它将弹出一个警告框并显示数字1。

    <input name="t_link" value="'.'" type="hidden">

    • <input>标签:这是HTML中创建表单元素的标签。通过使用该标签,可以在表单中添加各种输入字段,比如文本框、复选框、单选按钮等。
    • name="t_link":这是<input>标签的一个属性。它定义了表单元素的名称,这个名称在提交表单时会被用作数据的标识符。在这个例子中,表单元素的名称是”t_link”。
    • value="'.'":这是<input>标签的另一个属性。它定义了表单元素的初始值,即在用户没有输入任何值时,提交表单时会传递的默认值。在这个例子中,表单元素的初始值是一个字符串”'.'“。
      - type="hidden":这也是<input>标签的一个属性。它定义了表单元素的类型,这里是”hidden”,表示这是一个隐藏的输入字段。隐藏字段不会在页面上显示给用户,而是用于在后台传递数据。

    <button onmouseover="alert(1)">悬停在我上面就会弹窗</button>

    • 在这个示例中,有一个按钮元素(<button>),它具有 onmouseover 属性。这意味着当用户将鼠标悬停在按钮上时,会触发 onmouseover 事件,并执行相应的 JavaScript 代码。在这个例子中,当用户悬停在按钮上时,会弹出一个警告框显示数字 “1”。

    <input accesskey="x" onclick="alert(1)" type="text">

    • accesskey="x":这是一个 input 元素的 accesskey 属性。它指定了在页面上通过键盘激活该元素所需要使用的快捷键。在这里,accesskey=”x” 表示用户可以通过按下 Alt (或在 macOS 下是 Control) 键 + “x” 键来激活该输入字段。

    • onclick="alert(1)":这是一个 input 元素的 onclick 属性。它指定了当用户点击(单击)该元素时要执行的 JavaScript 代码。在这里,onclick=”alert(1)” 表示当用户点击该输入字段时,将会弹出一个警告框显示数字 “1”。

    • type="text":这是一个 input 元素的 type 属性。它定义了输入字段的类型。在这里,type=”text” 表示这是一个文本输入字段,用户可以在该输入字段中输入文本。

    拓展一个

    • type=”text”: 文本输入字段,用于接受任意文本。

    • type=”password”: 密码输入字段,用于接受密码,输入的内容会被隐藏。

    • type=”number”: 数字输入字段,用于接受数值输入,可以包含数字和符号(如+、-、小数点等)。

    • type=”email”: 用于接受电子邮件地址的输入字段,可以验证输入内容是否符合电子邮件地址的格式。

    • type=”url”: 用于接受URL地址的输入字段,可以验证输入内容是否符合URL的格式。

    • type=”tel”: 用于接受电话号码的输入字段,可以验证输入内容是否符合电话号码的格式。

    • type=”date”: 用于接受日期的输入字段,可以选择日期。

    • type=”time”: 用于接受时间的输入字段,可以选择时间。

    • type=”color”: 用于接受颜色的输入字段,可以选择颜色。

    • type=”checkbox”: 复选框,用于选择一个或多个选项。

    • type=”radio”: 单选按钮,用于在一组选项中选择一个。

    • type=”file”: 文件上传字段,用于选择上传文件。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信