Blog

Check out my latest blog posts below. 👇

2024HECTFweb

2024HECTFweb

babysql

直接万能密码过

image-20241208124649630

进入查询后台

测试发现是盲注,可以使用布尔盲注,这里采用时间盲注

接下来就是脚本

image-20241208124958291

首先跑一个fuzz字典看有哪儿些东西被过滤了

可以看到有些重要的东西也被过滤了,像空格,information_schema

image-20241208133152929

测试

from requests import post

base_url = 'xxx/worker.php'

payload = "1'/**/or/**/if((select/**/database())like/**/database(),sleep(3),0)#"
data = {"name":payload}

def check_time(data):
    try:
        res=post(base_url, data=data,timeout=2)
        #如果没有超时说明失败了
        return "failure"
    except:
        return "success"

print(check_time(data))

image-20241208141019513

Read more >

2024HECTFmisc

2024HECTFmisc

恶势力的聊天记录

vol3参考文档

Volatility 3 — Volatility 3 2.11.0 documentation

vol3使用参考

Volatility3内存取证工具使用详解-CSDN博客

vol2命令格式: volatility -f [image] --profile=[profile] [plugin]

这里需要注意 :Volatility3和Volatility2用法差不多,但不需要指定profile ,只是插件调用方式改变,特定的操作系统有特定的插件
python3 vol.py [plugin] -f [image]
 
常用插件:
    layerwriter:列出内存镜像platform信息
    linux.bash:从内存中恢复bash命令历史记录
    linux.check_afinfo:验证网络协议的操作功能指针
    linux.check_syscall:检查系统调用表中的挂钩
    linux.elfs:列出所有进程的所有内存映射ELF文件
    linux.lsmod:列出加载的内核模块
    linux.lsof:列出所有进程的所有内存映射
    linux.malfind:列出可能包含注入代码的进程内存范围
    linux.proc:列出所有进程的所有内存映射
    linux.pslist:列出linux内存映像中存在的进程
    linux.pstree:列出进程树
    mac.bash:从内存中恢复bash命令历史记录
    mac.check_syscall:检查系统调用表中的挂钩
    mac.check_sysctl:检查sysctl处理程序的挂钩
    mac.check_trap_table:检查trap表中的挂钩
    mac.ifconfig:列出网卡信息
    mac.lsmod:列出加载的内核模块
    mac.lsof:列出所有进程的所有内存映射
    mac.malfind:列出可能包含注入代码的进程内存范围
    mac.netstat:列出所有进程的所有网络连接
    mac.psaux:恢复程序命令行参数
    mac.pslist:列出linux内存映像中存在的进程
    mac.pstree:列出进程树
    mac.tasks:列出Mac内存映像中存在的进程
    windows.info:显示正在分析的内存样本的OS和内核详细信息
    windows.callbacks:列出内核回调和通知例程
    windows.cmdline:列出进程命令行参数
    windows.dlldump:将进程内存范围DLL转储
    windows.dlllist:列出Windows内存映像中已加载的dll模块
    windows.driverirp:在Windows内存映像中列出驱动程序的IRP
    windows.driverscan:扫描Windows内存映像中存在的驱动程序
    windows.filescan:扫描Windows内存映像中存在的文件对象
    windows.handles:列出进程打开的句柄
    windows.malfind:列出可能包含注入代码的进程内存范围
    windows.moddump:转储内核模块
    windows.modscan:扫描Windows内存映像中存在的模块
    windows.mutantscan:扫描Windows内存映像中存在的互斥锁
    windows.pslist:列出Windows内存映像中存在的进程
    windows.psscan:扫描Windows内存映像中存在的进程
    windows.pstree:列出进程树
    windows.procdump:转储处理可执行映像
    windows.registry.certificates:列出注册表中存储的证书
    windows.registry.hivelist:列出内存映像中存在的注册表配置单元
    windows.registry.hivescan:扫描Windows内存映像中存在的注册表配置单元
    windows.registry.printkey:在配置单元或特定键值下列出注册表项
    windows.registry.userassist:打印用户助手注册表项和信息
    windows.ssdt:列出系统调用表
    windows.strings:读取字符串命令的输出,并指示每个字符串属于哪个进程
    windows.svcscan:扫描Windows服务
    windows.symlinkscan:扫描Windows内存映像中存在的链接
──(root㉿kali)-[/home/messi/Desktop/vol3]
└─# sudo ln -s /home/messi/Desktop/vol3/vol.py /usr/local/bin/vol3
//添加一个软连接方便使用

列出所有进程

Read more >

2024强网杯-Misc-Pickle jail

2024强网杯-Misc-Pickle jail

第一次遇到jail类型的题目,而且还是在大赛上,并且还是这么难的情况,努力理解复现吧。

附件😣😰🥹:

pickle_jail.py 的文件

#!/usr/local/bin/python
from io import BytesIO
from os import _exit
from pathlib import Path
from pickle import Pickler, Unpickler
from sys import stderr, stdin, stdout
from time import time

from faker import Faker

Faker.seed(time())
fake = Faker("en_US")
flag = Path("flag").read_text()


def print(_):
    stdout.buffer.write(f"{_}\n".encode())
    stdout.buffer.flush()


def input(_=None, limit: int = -1):
    if _:
        print(_)
    _ = stdin.buffer.readline(limit)
    stdin.buffer.flush()
    return _


def bye(_):
    print(_)
    _exit(0)


players = [fake.unique.first_name().encode() for _ in range(50)]
print("Welcome to this jail game!")
print(f"Play this game to get the flag with these players: {players}!")
name = input("So... What's your name?", 300).strip()

assert name not in players, "You are already joined!"

print(f"Welcome {name}!")
players.append(name)

biox = BytesIO()
Pickler(biox).dump(
    (
        name,
        players,
        flag,
    )
)

data = bytearray(biox.getvalue())
num = input("Enter a random number to win: ", 1)[0]
assert num < len(data), "You are not allowed to win!"
data[num] += 1
data[num] %= 0xFF

del name, players, flag
biox.close()
stderr.close()

try:
    safe_dic = {
        "__builtins__": None,
        "n": BytesIO(data),
        "F": type("f", (Unpickler,), {"find_class": lambda *_: "H4cker"}),
    }
    name, players, _ = eval("F(n).load()", safe_dic, {})
    if name in players:
        del _
        print(f"{name} joined this game, but here is no flag!")
except Exception:
    print("What happened? IDK...")
finally:
    bye("Break this jail to get the flag!")

分析附件:

一上来这个代码就给我看懵了,对于python基本功不是很扎实的我,没看懂逻辑,一边拿ai一边分析。

Read more >

2024强网杯—谍影重重5.0

😉🌃⛅😉

乍一看,有arp、smb、tls等协议流量

image-20241130102444496

先过滤出smb2流量看看

smb协议主要用于在计算机间共享文件、打印机、串口等

NTLM是一种身份验证机制

image-20241130104443093

smb2爆破

Wireshark分析–SMB2协议包及hashcat爆破_wireshark smb-CSDN博客

通过文章了解到需要构造hash文件

username::domain:NTLM Server Challenge:ntproofstr:不包含ntproofstr的ntlmv2_response值

双击打开这条流量

image-20241130105942945

image-20241130111843833

Read more >

Io Programming

输入流和输出流

输入流(InputStream)

输入流用于从数据源读取数据。常见的数据源包括文件、网络连接、内存中的字节数组等。InputStream 是所有字节输入流的基类,它定义了一些基本的方法,具体的子类实现了这些方法以适应不同的数据源。

输出流(OutputStream)

输出流用于将数据写入目标位置。常见的目标位置包括文件、网络连接、内存中的字节数组等。OutputStream 是所有字节输出流的基类,它定义了一些基本的方法,具体的子类实现了这些方法以适应不同的目标位置。

File文件操作

初识

java.io.File类是一个与文件本身操作有关的类,此类可以实现文件创建、删除、重命名、取得文件大小、修改日期等常见系统文件操作

如果要使用File类则必须提供完整的文件操作路径,对于文件路径的设置可以通过File类的构造方法完成,当获取了正确的文件路径后就可以进行文件创建于删除操作、File类文件基本操作方法

No. 方法 类型 描述
1 public File(String pathname) 构造 给定一个要操作文件的完整路径
2 public File(File parent,String child) 构造 给定要操作文件的父路径和子文件名称
3 public boolean createNewFile() throws IOException 普通 创建文件
4 public boolean delete() 普通 删除文件
5 public boolean exists() 普通 判断给定路径是否存在

示例

import java.io.File;
public class JavaIODemo{
	public static void main(String[] args) throws Exception{
		File file = new File("D:\\1.txt"); //文件路径: "\\"转义为"\"
		if(file.exists()){
			file.delete();
		}
		else{
			System.out.println(file.createNewFile());
		}
	}
}

分隔符

windows中是"\" 而在UNIX或类UNIX操作系统中路径分隔符是"/"

Read more >

Java常用类库

StringBuffer类

String和StringBuffer的区别

String

  • 不可变性String 类是不可变的,这意味着一旦创建了一个 String 对象,其值就不能改变。每次对 String 进行修改(如连接、替换等操作)都会产生新的 String 对象,原来的对象不会被改变。
  • 线程安全性:由于 String 的不可变性,它是线程安全的,可以被多个线程共享而无需担心数据一致性的问题。
  • 性能:因为每次修改都会创建新的对象,所以在频繁进行字符串操作时,String 的效率较低。

StringBuffer

  • 可变性StringBuffer 是一个可变的字符序列,可以被多次修改而不创建新的对象。这意味着如果需要对字符串进行大量的修改操作,使用 StringBuffer 比使用 String 更加高效。
  • 线程安全性StringBuffer 是线程安全的。它的方法都是同步的(即加了 synchronized 关键字),这使得 StringBuffer 可以在多线程环境中安全地使用,但是也导致了它的性能相比非线程安全的 StringBuilder 要差一些。
  • 性能:当需要在一个单线程环境下进行大量字符串操作时,StringBuffer 仍然不是最优选择,因为它的线程安全特性会带来额外的开销。在这种情况下,应该考虑使用 StringBuilder

使用场景

  • 使用 String:当你不需要修改字符串内容时,或者修改次数非常少的时候,使用 String 是合适的。此外,String 的不可变性和线程安全性使其成为多线程环境中的首选。
  • 使用 StringBuffer:如果你的应用程序需要在多线程环境中频繁地修改字符串,那么 StringBuffer 是一个很好的选择,因为它提供了线程安全的操作。
  • 使用 StringBuilder:对于单线程环境下的频繁字符串操作,推荐使用 StringBuilder,因为它比 StringBuffer 性能更高,同时又保持了可变性的优点。

StringBuffer介绍

String类自身有一个最大的缺陷:内容一旦声明则不可改变,JDK为了方便用户修改字符串内容提供了StringBuffer类

StringBuffer类不像String类那样可以直接通过声明字符串常量方式进行实例化,而是必须像普通类对象使用一样,首先通过构造方法进行对象实例化,而后才可以调用方法进行处理。

No. 方法 类型 描述
1 public StringBuffer() 构造 创建一个空的StringBuffer对象
2 public StringBuffer(String str) 构造 将接受到的String内容变为StringBuffer内容
3 public StringBuffer append(数据类型 变量) 普通 内容连接,等价于String中:”+”操作
4 public StringBuffer insert(int offset,数据类型 变量) 普通 在指定索引位置处插入数据
5 public StringBuffer delete(int start,int end) 普通 删除指定索引范围之内的数据
6 public StringBuffer reverse() 普通 内容反转

示例

Read more >

Java Base

java文件结构快速了解

Java 文件的基本结构

一个简单的Java文件通常包含以下几个部分:

  1. 包声明

    • 每个Java源文件都属于某个包。包的作用类似于文件夹,用于组织和分类相关的类。
    • 示例:package com.example;
  2. 导入语句

    • 导入语句用于引入其他包中的类或接口,这样可以在当前文件中直接使用这些类或接口。
    • 示例:import java.util.ArrayList;
  3. 类声明

    • 类是Java程序的基本构建块。每个类定义了一组属性(变量)和方法(函数)。

    • 示例:

      public class HelloWorld {
          // 类体
      }
      
  4. 构造方法

    • 构造方法是一种特殊的方法,用于创建类的新实例时初始化对象。

    • 示例:

      public HelloWorld() {
          // 初始化代码
      }
      
  5. 属性(成员变量)

    • 属性是类中存储数据的变量。

    • 示例:

      private String name;
      
  6. 方法

    • 方法是执行特定任务的代码块。

    • 示例:

      public void sayHello() {
          System.out.println("Hello, World!");
      }
      
  7. 主方法(main方法)

    • 主方法是Java应用程序的入口点。当程序启动时,JVM会寻找并执行这个方法。

    • 示例:

      java深色版本

      public static void main(String[] args) {
          HelloWorld hello = new HelloWorld();
          hello.sayHello();
      }
      

示例代码

以下是一个完整的Java文件示例,结合了上述各个部分:

Read more >

Hello

搭建博客的原因

感觉身为搞计算机的人要是没有个个人博客,总是缺少些什么。也是为了增加自己学习的动力吧,带来一些成就感。随便记录一下"lifelong journey"中的一些感受和经历。当然主要用于学习记录。

心得

这次搭建这个博客花费的时间成本挺大的,前前后后一个星期左右,从了解到尝试,主题试过好多个,后悔没有先去了解项目特点再去搭建,中途差错不断,改了又改,删了又删,一次次都在放弃的边缘。可能读到这儿的小伙伴可能会有疑问,hugo不是快速建站吗,我觉得建站确实快,但是调整一些个性化的东西可太磨人了,稍不注意就错了,然后可能都不知道为什么崩了。hugo版本也是奇特,建议大家了解清楚自己主题和版本的一些兼容性问题,不然可能要重蹈我的覆辙了。这里也温馨提示大家,了解清楚hugo对目录的设定情况,不然路径对不了。而且我也真真意识到备份的重要性。