pikachu之不安全下载和目录遍历和敏感信息泄露和php反序列化

一般我们点击下载链接,会向后台发送一个下载请求

一般来说这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码
将该文件名对应的文件response给浏览器,从而完成下载

如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话
则可能会引发不安全的文件下载漏洞

如果攻击者提交的不是一个程序预期的的文件名
而是一个精心构造的路径(比如../../../etc/passwd)
则很有可能会直接将该指定的文件下载下来
从而导致后台敏感信息(密码文件、源代码等)被下载
你点一下它就直接下载了
你放在图片上右键这个时候你就可以得到一个下载它的链接
先点一下下载burp抓包看一看
把kb.png改为../../../test.txt
然后send
看一下
说明确实存在不安全下载

此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。

所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。

目录遍历

因为

比喻解释

想象你有一个大楼,里面有很多房间,每个房间都有一扇门。这个大楼的某些房间是公开的,比如会议室、休息室等,任何人都可以进去。而其他房间,比如经理办公室、财务室等,则是私密的,只有授权的人才能进去。

现在,你在大楼的入口放置了一个机器人,任何人来到入口都可以告诉机器人他们想去哪个房间,机器人就会带他们去指定的房间。假设这个机器人有一个问题,就是他不检查你是否有权限进入某些房间,只要你告诉他房间的名字,他就会带你去。

所以说

敏感信息泄露

敏感信息泄露是指未经授权的情况下,敏感信息被公开访问或泄露。这种信息包括但不限于个人数据(如身份证号、地址、电话号码)、登录凭据(如用户名和密码)、商业机密(如财务数据、客户列表)等。敏感信息泄露可能会导致隐私泄露、财务损失、商业竞争力下降等严重后果。

比喻解释

想象你有一个装满重要文件的文件柜,这些文件柜中的文件包括你的个人日记、银行对账单、密码本等等。这些文件柜应该只对你自己或授权的人开放。然而,如果你不小心将文件柜的钥匙放在公共场所,任何人都可以拿到钥匙并打开文件柜,看到里面的所有重要文件。这就是敏感信息泄露。

敏感信息泄露的常见原因

  1. 不安全的配置:例如,将数据库备份文件存储在公共服务器上。
  2. 代码缺陷:例如,错误地将敏感信息输出到日志文件中,并且这些日志文件可被公开访问。
  3. 人为错误:例如,员工将含有敏感信息的文件通过未加密的邮件发送出去。
  4. 社会工程学攻击:攻击者通过伪装成信任的个人或实体,从受害者那里获取敏感信息。
  5. 未授权的文件列出:例如,通过URL直接访问某个目录,列出了该目录下所有的文件。

试一下能不能登录

可以登录

php序列化

序列化serialize()
序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:

class S{
public $test="pikachu";
}
$s=new S(); //创建一个对象
serialize($s); //把这个对象进行序列化
序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}
O:代表object
1:代表对象名字长度为一个字符
S:对象的名称
1:代表对象里面有一个变量
s:数据类型
4:变量名称的长度
test:变量名称
s:数据类型
7:变量值的长度
pikachu:变量值
反序列化unserialize()
就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。
$u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}");
echo $u->test; //得到的结果为pikachu
序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题
常见的几个魔法函数:
__construct()当一个对象创建时被调用
__destruct()当一个对象销毁时被调用
__toString()当一个对象被当作一个字符串使用
__sleep() 在对象在被序列化之前运行
__wakeup将在序列化之后立即被调用
漏洞举例:
class S{
var $test = "pikachu";
function __destruct(){
echo $this->test;
}
}
$s = $_GET['test'];
@$unser = unserialize($a);
payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

输入 O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网安小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值