php反序列化字符逃逸
php反序列化字符逃逸php的序列化有几个特性
1.PHP 在反序列化时,底层代码是以 ; 作为字段的分隔,以 } 作为结尾(字符串除外),并且是根据长度判断内容的 .
2.当长度不对应的时候会出现报错
3.可以反序列化类中不存在的元素
我们一般的序列化是这么操作的
12345678910111213141516<?php $a=array( "name"=>"Kenoe", "pass"=>"123123",); echo serialize($a);//输出a:2:{s:4:"name";s:5:"Kenoe";s:4:"pass";s:6:"123123";} echo var_dump(unserialize('a:2:{s:4:"name";s:5:"Kenoe";s:4:&quo ...
misc基本工具和思路总结
图片PNG文件格式详解png图片是misc里经常出现的文件格式,熟悉它的结构是很有必要的。
首先,PNG由文件头和数据块组成,这个文件头做久了就熟悉了
89 50 4E 47 0D 0A 1A 0A
数据块分为两种,一种是关键数据块,就是必须含有的块,另外一种是辅助数据块,不一定会出现,这里先列出所有种类的块
数据块符号
数据块名称
多数据块
可选否
位置限制
IHDR
文件头数据块
否
否
第一块
cHRM
基色和白色点数据块
否
是
在PLTE和IDAT之前
gAMA
图像γ数据块
否
是
在PLTE和IDAT之前
sBIT
样本有效位数据块
否
是
在PLTE和IDAT之前
PLTE
调色板数据块
否
是
在IDAT之前
bKGD
背景颜色数据块
否
是
在PLTE之后IDAT之前
hIST
图像直方图数据块
否
是
在PLTE之后IDAT之前
tRNS
图像透明数据块
否
是
在PLTE之后IDAT之前
oFFs
(专用公共数据块)
否
是
在IDAT之前
pHYs
物理像素尺寸数据块
否
是
在IDAT之前
sCAL
( ...
教练,我要学内网(一)——内网渗透基础和信息收集
内网渗透基础基础名词解析工作组(Work Group)在一个大的单位里面,有许多电脑互相连接,为了方便,对不同的电脑按照不同的功能列入不同的工作组,比如技术部加入技术部的组里,行政部加入行政部的组里
计算机属性-》计算机名-》更改-》工作组(输入计算机名)默认是WORKGROUP
工作组并没有真正的集中管理作用,可以随时加入和退出,所有计算机都是对等的,没有服务器和客户机之分的
域
域是一个有安全边界的计算机集合,在两个域中,一个域的用户不能访问另外一个域的资源
域控制器(Domain Controller,DC)是一个域中的类似管理服务器的计算机,负责每一台联入的电脑和用户的验证工作,域内电脑如果要互相访问需要经过它的审核
单域一般一个域内至少需要两个域服务器,一个作为DC,一个是备份DC,如果没有第二个备份DC,一旦DC瘫痪了,则域内的其它用户就不能登录该域了,因为活动目录的数据库(包括用户的账号信息)是存储在DC中的,如果DC出了问题,用备份域控制器(BDC)恢复一下DC就好了
父域
为了管理以及一些需求,需要在网络中划分多个域,第一个域是父域,其它的是该域的子域
域 ...
ctf中的php原生类技巧
php原生类安全
原生类指的是php自带的一些类,原来实现一些功能,比如报错等等
最近看反序列化的题目比较多,有一种题目,构造pop链到一半发现没有类可以用了,这种情况就要想到去利用php原生类来打一些组合拳,比如ssrf、xss、xxe
SoapClient类[SSRF]Soap协议采用HTTP来进行通信,可以在phpinfo()里面查看php是否安装了该插件
这里就摘一个重要的方法
123456789101112class SoapClient{ public __construct(string $wsdl,array $options=[]) //https://www.runoob.com/wsdl/wsdl-intro.html 这里有wsdl的解释 //第一个参数是来选择是否用wsdl模式,设置为null的话就非wsdl模式 //第二个参数是数组,若使用wsdl模式,则该参数可选;若非wsdl模式,则至少设置location和url //location 发送请求的目标url;uri 目标服务的命名空间 //$option ...
SWPUCTF 2018]SimplePHP复现
SWPUCTF 2018]SimplePHP打开发现可以读取源码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139#class.php<?phpclass C1e4r{ public $test; public $str; public function __construct($name) { $this->str = $name; } ...
phar反序列化初探
Phar反序列化参考资料:
浅析Phar反序列化 - FreeBuf网络安全行业门户
化繁为简:thinkphp5.1.37反序列化浅析 - FreeBuf网络安全行业门户
我真是太喜欢ctf辣,这两天看了看phar反序列化,这玩意玩起来花样可多了
phar结构参考
a stub 单纯的文件头
xxx
前面内容无所谓,但是必须由__HALT_COMPILER();?>来结尾,所以可以在前面添加
GIF89a
来绕过文件上传的一些检测
manifest
phar文件本质上是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data,这是上述攻击手法最核心的地方
contents 被压缩文件的内容
signature 签名
php有一些函数在通过phar://伪协议读取文件时,会把meta-data反序列化
生成phar的代码,注意生成前要把php.ini中phar.readonly设置为Off
12345678910111213141516171819<?php class te ...
内网渗透探索
内网渗透探索记录一下内网渗透的思路,写入马儿(这里有两个链接)连接后的操作,先用虚拟终端执行
123whoami 查看用户权限netstat -ano 查看开放端口systeminfo
这里可以注意一下两个内容,一个是域那里,可以看看有没有进行域渗透的可能;二是看修补程序那里,比如现在得到的信息是
123修补程序: 安装了 2 个修补程序。 [01]: KB2999226 [02]: KB976902
我们可以使用在线工具去查看没有打的补丁,然后进行一个权的提,当然我们也可以直接使用一个工具
win的提权神器juicypotato(烂土豆)下载地址参考使用资料
先执行
1whoami /priv
如果开启 SeImpersonate 权限,juicypotato 的参数可以使用 -t t
如果开启 SeAssignPrimaryToken 权限,juicypotato 的参数可以使用 -t u
如果均开启,可以选择 -t *
如果均未开启,那么无法提权
这里顺便附上一些其它权限的提权技巧
1Jui ...
HTTP走私攻击
HTTP走私攻击HTTP请求走私是一种技术,用来干扰网站处理用户的HTTP请求,可以用来绕过waf,进而实现对敏感数据的未授权访问
原理由于不同服务器对RFC标准实现的方法和标准不同,对同一个HTTP请求,不同服务器采取不同的处理方法,导致了不同的结果
利用方式CL(Content-Length)不为0时的GET请求在RFC2616中,并没有对GET请求像POST请求那样携带请求体作出规定。在RFC7231中也仅仅是提醒了一下
假设代理服务器允许GET请求携带请求体,但是后端服务器不允许GET请求携带请求体,那么后端服务器会忽略掉代理服务器传过来的GET请求中的Content-Length头,不进行处理,这样就会导致请求走私
123456GET / HTTP/1.1Host: xxx.comContent-Length: 32GET /flag HTTP/1.1Host: xxx.com
前端服务器收到请求后,通过读取CL,判断这是一个完整的请求,转发给后端服务器。然后后端服务器收到后,因其不对CL进行处理,所以认为收到了两个请求
123GET / HTTP/1.1Host: xxx ...
sqli_labs通关
sqli_labs通关首先是sqli_labs的安装需要几点注意
修改配置里面的数据库用户密码
php版本应该为5
php.ini里面魔术引号关掉
前置知识数据库的组成结构:库->database 表->table 列->column(access没有多个库)
以下是针对mysql的一些常规操作
select database(); //查看当前所用的数据库
select table_name from information_schema.tables where table_name=database(); //查看当前数据库的所有表名
select column_name from information_schema.columns where table_name=’xxx’; //查看某个表里面的所有列名
order by x; //这个x可以是列名也可以是数字,数字就表示是第几列的意思
这里要解释一下information_schema里面的结构,information_schema是mysql中一 ...
PHP Session反序列化漏洞
PHP Session反序列化漏洞session是什么session在计算机网络应用中被称作会话控制,在服务器端创建但是保存于服务器,session对象存储特定用户所需的属性以及配置信息,一旦开启了session会话,便可以在网站的任何页面使用或保持这个会话,php session是一种特殊的变量,可以存储关于用户的会话信息,或者更改用户会话的设置。
cookie存储在客户端,而session存储在服务端,当开启一个session时,php会创建一个随机的session id,每个用户的Session id都是唯一的,而且Session id 与服务器上存储该用户Session数据的文本文件名称相同
因此Session ID会分别保存在客户端和服务器端两个位置
客户端,使用临时的Cookie保存在浏览器指定目录中,Cookie名称默认为“PHPSESSION”
服务器端,以文本文件形式保存在指定的Session目录中
当php发现cookie里面没有session,就会调用php_session_create_id函数创建一个新的会话,并且在响应包头中通过set-cookie参数 ...