something about Pikachu - Over Permission

pikachu

pikachu => 备份地址

Over Permission

概述

如果使用 低权限 A用户的权限去操作 高权限 B用户的数据,如果能够成功操作,则称之为越权操作。

越权漏洞形成的原因是后台使用了 不合理的权限校验规则

越权漏洞容易出现在权限页面(需要登录的页面)中增、删、改、查的地方,进行这些操作时, 后台需要进行合理的权限校验。

权限管理应当遵守:

  • 使用最小权限原则对用户进行赋权
  • 使用合理(严格)的权限校验规则
  • 使用后台登录状态作为条件进行权限判断,不盲目使用前端传递的条件判断条件

水平越权

水平越权指的是 相同权限 下的 不同用户 可以相互访问

登录lucy/123456用户后,查看个人信息时,会向/pikachu/vul/overpermission/op1/op1_mem.php?username=lucy&submit=点击查看个人信息请求数据。
可以观察到username=lucy参数,将其更换为同权限的其他用户名即可获得其他用户的信息。

1
2
# 使用`lucy`身份,查看`lili`用户信息
http://train.com/pikachu/vul/overpermission/op1/op1_mem.php?username=lili&submit=点击查看个人信息

垂直越权

垂直越权指的是使用 低权限用户 可以访问到 高权限用户

登录admin/123456用户,添加用户时可以查看到URL为:

1
2
POST /pikachu/vul/overpermission/op2/op2_admin_edit.php HTTP/1.1
username=qwe&password=qweqwe&sex=&phonenum=&email=&address=&submit=%E5%88%9B%E5%BB%BA

后台获得参数后直接插入,没有权限验证。因此登录pikachu/000000这个只有查看权限的用户后, 直接访问http://train.com/pikachu/vul/overpermission/op2/op2_admin_edit.php页面,即可进入 添加用户页面,并且能够正常添加用户。


something about Pikachu - Unsafe Fileupload

pikachu

pikachu => 备份地址

Unsafe Fileupload

概述

在web应用系统中文件上传功能很常见,比如上传头像,上传附件等。
当后台程序对上传的文件进行的安全判断条件不够严谨时,攻击者可能会上传一些恶意文件,导致造成损失。

在设计文件上传功能时,要对以下方面进行安全考虑。

  • 验证文件类型,后缀名,大小

  • 验证文件上传方式

  • 对文件进行一定复杂程度的重命名

  • 不要暴露文件上传后的路径

client check

是客户端javascript限制,因此将对应触发语句去除即可。

1
2
<!-- 去除onchange函数 -->
<input class="uploadfile" type="file" name="uploadfile" onchange="checkFileExt(this.value)">

MIME type

  • 更改文件后缀名

    是服务端进行MIME判定,因此将恶意文件重命名为bad.png上传,此时MIME图片。 使用burpsuite截断后将文件名再更改为bad.php

  • 更改HTTP Content-Type

    直接上传bad.php,使用burpsuite截断后将HTTP请求的Content-Type更改为image/png

getimagesize

getimagesize()函数能够获取文件头类型。

文件头类型(# 文件头)
  • 添加伪造文件头

    在恶意文件中添加对应的文件头信息,即可伪装为对应的文件。

    1
    2
    3
    4
    5
    // 伪造image文件头
    GIF98
    <?php
    phpinfo();
    ?>
  • 附加恶意内容

    上传正常图片文件,使用burpsuite截断,在请求内容中追加恶意代码。然后利用文件包含漏洞将此文件包含,即可执行隐藏的代码。

    1
    2
    3
    4
    5
    6
    7
    Content-Disposition: form-data; name="uploadfile"; filename="badimg.png"
    Content-Type: image/png

    PNG

    XXXXX....YYYYYY...ZZZ
    <?php phpinfo(); ?>