截断问题

%00截断应该是比较经典的攻击手法,但是这个到底是不是漏洞,我也不知道,只是简单记录一下常见的%00利用场景。

 

一、php 00截断

在php 5.3.4中php修复了0字符,但是在之前的版本中00在php中危害较大。

简单测试一下 php 版本<5.3.4 

$_GET["filename"] 这样就可以接收到,这样的请求filename=test.php%00.txt 

主要利用常见:

1.上传时路径可控,使用00截断

2.文件下载时,00截断绕过白名单检查

3.文件包含时,00截断后面限制(主要是本地包含时)

4.其它与文件操作有关的地方都可能使用00截断。

 

二、asp 00截断

在文件上传路径可控中使用过,但是今天发现<%response.write(request("Filename"))%> 传入filename=test.asp%00.txt 获得参数值是test.asp

asp应该自动可以截断00后内容。

又看了一下asp上传路径可控的代码,发现这套代码并不是使用request获得的参数,

formPath=upload.form("uploadtypefy") 获得文件路径

对应的函数:

Public function Form(strForm)
   strForm=lcase(strForm)
   if not objForm.exists(strForm) then
     Form=""
   else
     Form=objForm(strForm)
   end if
 end function

 

应该是这种获得路径的方法有问题,还没有想到其它的利用方法。

 

三 jsp 00截断

<%
String temp=request.getRealPath("/")+request.getParameter("path");
 out.println(temp);
 String ext = temp.substring(temp.lastIndexOf(".") + 1);
 out.println(ext);
 %>

发现确实可以使用00截断,如传入path=shell.jsp%00.txt 获得后缀是txt,但是操作文件的api是使用c实现会导致00截断。因此这个与php相似,利用场景是文件上传 文件下载等。

 

四aspx 00截断

Request.QueryString["filename"].ToString() 很诡异aspx的请求参数可以产生00截断,而且文件下载也会成功。但是asp的却不可以

### PTA截断问题的原因及解决方案 PTA中的截断问题通常发生在处理超出数据类型范围的大数值时。以下是关于该问题的具体原因以及解决方法。 #### 1. **问题的根本原因** 在C语言中,`int` 类型的取值范围有限(通常是 -2^31 至 2^31-1),当输入的数据超过此范围时会发生溢出现象[^4]。例如,在 `L1-017 到底有多二` 这道题中,给定的输入 `-13142223336` 超过了 `int` 的最大值 `2147483647`,因此如果使用 `int` 来存储这个数,则会引发整数溢出,导致计算结果不正确。 #### 2. **解决方法** 为了防止这种截断问题的发生,可以通过以下几种方式解决问题: ##### (1)**选用合适的数据类型** 对于较大的整数,应改用能够容纳更大范围的变量类型,比如 `long long` 或者其他支持更大数据范围的类型。例如,在上述例子中,通过将变量声明改为 `long long n;` 可以有效避免由于数据过大而导致的溢出问题[^4]。 ```c #include <stdio.h> #include <stdlib.h> int main() { long long n; int count = 0, digits = 0; double factor = 1.0; scanf("%lld", &n); if (n < 0) { factor *= 1.5; n = llabs(n); } if (n % 2 == 0){ factor *= 2.0; } long long temp = n; if(temp == 0){ digits = 1; }else{ while(temp > 0){ if(temp % 10 == 2) count++; temp /= 10; digits++; } } double result = (double)count / digits * factor * 100; printf("%.2lf%%\n", result); return 0; } ``` ##### (2)**注意边界条件** 除了选择适当的数据类型外,还需要特别关注边界的特殊情况。例如零的情况或者极端情况下的行为是否符合预期逻辑。这一步骤有助于进一步减少潜在错误的可能性。 #### 3. **验证与测试的重要性** 即使修改了数据类型,也需要进行全面的测试来确认更改后的代码能够在各种情况下正常工作。可以构建一些具有代表性的测试案例来进行验证,确保程序的行为始终一致且准确无误。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值