网络攻击与防护课程笔记
1.文件包含漏洞
是什么:
为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来,直接使用包含文件的代码。
为什么:
在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被条过,这样就导致了文件包含漏洞。
分类:
[1]本地文件包含
[2]远程文件包含(需要服务器的php.ini配置选项allow_url_fopen和allow_url_include打开)
利用途径:
上传图片、读文件、包含日志文件、包含/proc/self/environ/文件getshell、有phpinfo可包含临时文件、包含data://或php://inout等为协议
实例代码:
<?php
$filename = $_GET['filename']; **include**($filename);
?>
$_GET['filename']
参数开发者没有经过严格的过滤,直接带入了include的函数,攻击者可以 修改$_GET['filename']
的值,执行非预期的操作。
代码执行:
成因:对 一些能将字符串转换为代码的函数 未过滤
相关函数:
PHP:eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)
JS:eval
Python:exec
利用途径:
一句话木马 ${@eval($_POST[1])}
获取当前工作路径 ${eval(printf(getcwd()))}
读文件 :${exit(var_dump(file_get_contents($_POST[f])))} f=/etc/passwd
写webshell f=1.php&d=1111111
漏洞修复方案:
对于eval()函数一定要保证用户不能轻易接触eval的参数或者用正则严格判断输入的数据式。
对于字符串一定要使用单引号包裹可控代码,并且 插入前进行addslashes().
对于preg_replace放弃使用e修饰符。如果必须要用e修饰符,请保证第二个参数中,对于正则匹配出的对象,用单引号包裹 。
2.越权漏洞
是什么:
越权漏洞是Web应用程序中一种常见的安全漏洞。它的威胁在于一个账户即可控制全站用户数据。当然这些数据仅限于存在漏洞功能对应的数据。越权漏洞的成因主要是因为开发人员在对数据进行增删改查时对客户端请求的数据过分相信而遗漏了权限的判定。所以测试越权就是和开发人员拼细心的过程。
为什么:
越权漏洞是一种很常见的逻辑安全漏洞。是由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能,从而导致越权漏洞
危害:
越权漏洞的危害与影响,主要是与对应业务的重要性相关比如说某一页面服务器端响应(不局限于页面返回的信息,有时信息在响应包中,页面不一定能看见)中返回登录名、登录密码、手机号、身份证等敏感信息,如果存在平行越权,通过对用户ID的遍历,就可以查看所有用户的敏感信息,而且很难被防火墙发现,因为这和正常的访问请求没有什么区别,也不会包含特殊字符,具有十足的隐秘性。
分类:
按数据库进行分类:
越权查询、越权删除、越权修改、越权添加等
按维度进行分类:
平行越权
权限类型不变,权限ID改变;如:同是普通用户,其中一个用户可查看其它用户信息。常见的就是通过修改某一个ID参数来查看其他用户的信息,比如你查看自己的信息时,发现URL连接中,或者http请求头中有一个userID的参数,然后你修改这个参数就可以查看那个人信息
垂直越权
权限ID不变,权限类型改变;如普通用户可使用管理员权限进行操作。如你登录时,发现cookie中有一个roleID的角色参数,那么可以通过修改该ID为1或者0,根据具体情况来定,就可以使用管理员权限了!
交叉越权
权限类型改变,权限ID也改变
修复意见:
1.采用成熟的权限管理框架,如spring security。
2.用户进行访问操作的凭证(如用户ID、产品号码、订单流水号等)优先采用在服务端关联session或加密后放在session中的方式获取。
3.必须采用表单或其他参数提交用户进行访问操作的凭证(如用户ID、产品号码、订单流水号等)时,应尽可能采用难以猜测的构造方式(增加字母及随机数字等)或采用复杂的加密算法加密后提交,应对客户端提交的凭证与会话的权限进行严格的验证,如提交的产品号码是否为隶属于登录用户的产品号码。
4.对管理功能模块进行严格的权限验证,如非必要建议不对互联网开放或进行网络层的访问控制。
3.文件上传漏洞
是什么:
是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力
为什么:
用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器
两类解析:
(1)NGINX解析:直接上传图片格式,利用nginx解析漏洞拿webshell
Nginx解析漏洞是由于nginx部分版本程序本身的漏洞导致解析非可以执行脚本程序如php
如下面两个假设在存在漏洞的站点上有一张图片url地址为:
www.***.com/logo.jpg //假设存在这个图片
而当我们正常访问,nginx会把这个当做非脚本语言直接读取传送回客户端(也就是浏览器),但是
存在解析漏洞的nginx会把如下连接解析并且执行
www.***.com/logo.jpg/a.php(老的解析方式),这样写的话nginx会把logo.jpg当做脚本解析执行后再输出
www.***.com/logo.jpg%00.php //这个是7月中旬爆出的解析漏洞,截断解析
(2)IIS解析:利用IIS漏洞解析文件
http://drops.wooyun.org/papers/539
绕过方式:
1.客户端校验绕过
Js检测绕过、抓包更改类型
2.服务器端绕过
校验请求头content-type字段绕过
通过抓包来修改Http头的content-type
%00截断