上一篇文章 为大家介绍了以下五种常见 Web 漏洞的攻击原理:
- 弱口令漏洞
- URL 任意跳转漏洞
- JSONP 劫持漏洞
- CSRF 漏洞
- XSS 漏洞
本文将继续科普 Web 相关漏洞,希望大家能够「知其所以然」,从而「防患于未然」。
SQL注入漏洞
用户输入的内容作为 SQL 执行的参数嵌入 SQL 语句中,若业务使用直接拼接的方式,当用户构造精致的 sql 攻击代码作为输入传入的时候,sql 攻击语句将会被直接执行,从而造成数据库内部信息泄漏、服务器被入侵等严重风险。
案例
某业务可以根据用户输入的关键字查询个人订单,接口为:http://www.test.com/searchOrderInfo.do?keyword=test
,对应的执行 sql 为:select * from orderlist where userid=123 and keyword=test
,某黑客在测试该接口时,构造了如下搜索关键词 test or 1=1
,此时,对应的执行 sql 为 select * from orderlist where userid=123 and keyword=test or 1=1
,所有订单信息将被返回,从而造成大量数据泄露。
任意文件上传漏洞
任意文件上传是指用户在上传文件到本地时,未做文件类型校验、重命名和剪裁处理,导致木马、病毒等有害文件直接传入服务器,从而造成大规模破坏,如果项目中有文件或图片上传功能,并且上传的文件被存放在服务器本地,尤其是可执行 web 目录内,需特别注意。
案例
假设一个 cms 系统有上传用户头像的功能,将上传的图片存放在 web 目录的 assets 目录,黑客通过该头像上传功能,将对应的木马程序传入 assets 目录下,若服务器不是动态映射型静态资源访问策略,而是直接读取 assets,黑客只需访问 http://www.test.com/assets/a.php
即可执行对应木马程序,从而导致服务器被黑客操控,沦为肉鸡。
任意文件下载漏洞
任意文件下载是指用户的文件没有做好权限控制,可以被通过遍历文件名的方式越权下载,从而造成敏感信息泄露的漏洞。
案例
某商家管理系统,在商家接入时,需要上传商家的营业执照照片,黑客在测试该流程时,发现上传之后的照片的资源是一个静态 oss 地址,并且图片名称是商家的 id_license.jpg
,具体如下: https://test.oss-cn.aliyuncs.com/12345_license.jpg
,黑客修改图片名称中的商家 id 部分,例如 23456 并再次访问,发现可以获取到 23456 这个商家的营业执照图片,通过编写简单的程序对商家 id 进行遍历,该黑客获取到了全量商家的营业执照信息。
目录遍历漏洞
目录遍历可分为两种情况:
- 服务器软件配置错误导致目录遍历与目录穿越。例如 nginx/apache 等服务器软件配置错误,导致 web 环境目录,甚至整个服务器目录对外开放访问,从而导致服务器内部文件可从外部获取。
- 业务在编码过程中导致目录遍历。例如用户传入文件名称,服务端拼接对应文件路径,从硬盘上获取对应文件内容返回给用户,但是未对用户传入的文件名称做限制,可通过传入有害 payload 进行服务器内文件遍历。
案例
获取 passwd
假设 url 参数为 filename,代码从该参数读取文件名称,拼接文件路径,如果黑客直接在 url 的文件名参数上输入 ../../../../../../../../../../etc/passwd
, 可成功获取 passwd 的内容。
获取 .git 目录
如果 .git
目录对外开放,会导致 git
裸代码文件泄露,通过 python git 第三方库可还原可读代码文件,从代码文件中找出阿里云 AK/SK,登录服务器以及 OSS,获取到用户相关资料,以及服务器 root 权限。
命令注入漏洞
命令注入是指用户输入的内容被直接作为服务器命令被执行,或者用户输入的内容被以参数的方式拼接进入待执行的服务器命令中执行。此时,用户可以通过输入特定的攻击字符串,从而达成执行任意命令的目的。
案例
用 cat 读文本内容
某业务存在一个接口,将用户输入的备忘文本读取给用户进行展示,文本存在于服务器上,业务使用 cat 文件名命令获取文本内容,文件名从 http 接口参数中获取,比如 http://www.test.com/read.do?file_name=xxxx
,黑客传入定制 payload,从而导致服务器入侵,例如:http://www.test.com/read.do?file_name=xxx.txt | rm -rf /
用 ping 检测网络
某业务存在某接口,将检测对应设备是否存活,执行ping 命令探测,在URL地址中,接受的方式如: http://www.test.com/cmd/ping?value=127.0.0.1
,攻击者传入定制化的 payload,导致服务器信息泄漏。如:http://www.test.com/cmd/ping?values127.0.0.1;cat /etc/passwd
,这样黑客不仅可以进行内部网络探测,还可以发现当前服务器上所有的信息。
敏感信息泄露漏洞
敏感信息泄露是指在研发在实现业务需求时,超过业务需求之外额外输出了其他敏感信息,从而导致一个非敏感的业务接口中存在敏感信息。敏感信息未脱敏输出,某些敏感信息在展示时不需要展示全部信息,只需要展示少量内容,但业务在后端设计时对信息进行未脱敏输出,比如订单号、身份证号等。
案例
某个业务接到需求,需要透出用户的昵称和性别,研发在进行业务开发时,将整个用户信息表所有字段全部进行了透出,比如电话号码,真实姓名,邮件地址,家庭住址,出现了越权漏洞,从需求来说,越权只能获取昵称和性别,但是因为研发疏忽导致其他信息全部被透出和爬取,造成大规模信息泄露。
原文链接:https://juejin.cn/post/7247321275684847677 作者:乔珂力