PHP反序列化姿势总结

最近工作室招新,所以又重新捡起了PHP,做了一些反序列化的题目,又学到了一些Tricks,在这里稍微总结一下。

序列化字符串中的字母含义

有关序列化字符串中的字母含义,在这篇文章里面已经说的很清楚了(大佬tql,PHP源码都看了一遍),这里稍微再总结一下:

  • a - array:数组
  • b - boolean:布尔值
  • d - double:浮点数
  • i - integer:整数
  • o - common object:PHP3时被用来代表序列化对象,但是PHP4被O取代
  • r - reference:对象引用
  • s - non-escaped binary string:无转义字符的字符串
  • S - escaped binary string:带有转义字符的字符串
  • C - custom object:不知道干啥用的,从来没碰到过
  • O - class:普通的类
  • N - null:NULL值
  • R - pointer reference:指针引用
  • U - unicode string:Unicode字符串
阅读全文

T-Star 2020 靶场赛 WriteUp

昨天开始的靶场赛,全是Web,除了最后两个SQL注入没做出来,其他全做出来了+复现出来了,这里记录几个比较有意思的题目。

阅读全文

GKCTF WriteUp

Web

CheckIN

又是一道bypass disable_functions的题目

阅读全文

BJD3rd-WriteUp

Crypto

bbcrypto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding:utf-8 -*-
import A,SALT
from itertools import *

def encrypt(m, a, si):
c=""
for i in range(len(m)):
c+=hex(((ord(m[i])) * a + ord(next(si))) % 128)[2:].zfill(2)
return c
if __name__ == "__main__":
m = 'flag{********************************}'
a = A
salt = SALT
assert(len(salt)==3)
assert(salt.isalpha())
si = cycle(salt.lower())
print("明文内容为:")
print(m)
print("加密后的密文为:")
c=encrypt(m, a, si)
print(c)
#加密后的密文为:
#177401504b0125272c122743171e2c250a602e3a7c206e014a012703273a3c0160173a73753d
阅读全文

CTFd平台搭建记录

最近搭建了一个CTFd平台,花了差不多一个星期叭(虽然最后发现在一个小问题上卡了好久),用CTFd-Whale实现了独立题目容器,记录一下安装过程,避免以后再踩坑。

部署用的是最简单的Docker+Docker Compose部署,系统环境Ubuntu 18.04。

官方项目地址:https://github.com/CTFd/CTFd

阅读全文

Ha1cyonCTF WriteUp

最近搞的西工大CTF,整体题目感觉挺难的,看了WP之后发现Web还有一些很新的CVE,Misc还有音频隐写,都是没接触过的东西。除了服务器不定时的尿崩之外(运维挨打),做出来了几个题,也是第一次接触CTF的Crypto吧,记录一下收获。

阅读全文

分组密码总结-DES,AES,SM4

简介

分组密码属于对称密码的一种,其特点是加解密都是对明文/密文进行分组后逐组进行加解密。通俗讲就是将明文分块,然后分块加密,解密同理。

分组密码的基本原理:

  1. 代换:明文分组到密文分组的可逆变换
  2. 扩散:将明文的统计特性散布到密文中去,使得明文的每一位影响密文中多位的值
  3. 混淆:使密文和密钥之间的统计关系变得尽可能复杂,使攻击者无法得到密钥,通常使用复杂的代换算法实现
阅读全文

汇编语言学习笔记

在读《汇编语言》这本书学习汇编语言的时候,在此对每一章的要点进行总结和记录,以便日后复习与查看。

练习环境:Windows 2000 Professional,与书中程序运行环境一致。

第一章 基础知识

汇编语言是一门直接在硬件之上工作的编程语言。由于早期人们使用机器语言(一串二进制数字)进行编程存在不易纠错、晦涩难懂的缺点,所以发明了汇编语言来帮助程序员更高效的编程。汇编语言经编译连接之后可以直接形成由机器指令构成的程序,可以直接被CPU执行。而不同型号的CPU拥有不同的指令集,所以汇编语句对应的机器码可能不尽相同。这本书的汇编语言是基于8086CPU的指令集来进行描述的。

汇编语言包括三个部分:

  1. 汇编指令(核心部分):机器码的助记符,有对应的机器码
  2. 伪指令:由编译器执行,没有对应的机器码,计算机本身并不执行
  3. 其他符号:如+-*/等,由编译器识别,没有对应机器码

汇编语言的指令和数据信息存放在存储器(内存)中。在内存中指令和数据并没有任何区别,本质上都是二进制信息。而决定一段二进制信息是指令还是数据,则由CPU工作时决定。存储器由若干个存储单元构成,单个存储单元的最小单位是字节(Byte,1Byte=8Bit)。

阅读全文