Qemu搭建linux内核环境
编译linux内核下载内核源码https://mirrors.tuna.tsinghua.edu.cn/kernel/解压源码tar -xvf linux-xxxx.tar.gz
解压后进入源码根目录,指定编译架构,打开配置菜单
1234cd linux-xxxxexport ARCH=x86make x86_64_defconfigmake menuconfig
编译生成镜像1sudo make -j 4 bzImage
配置busybox启动内核还需要一个具有根文件系统的磁盘镜像文件,根文件系统中提供可供交互的shell程序以及一些常用工具命令。
借助busybox工具来制作根文件系统
下载地址 https://git.busybox.net/busybox/解压1tar -jxvf busybox-1.32.0.tar.bz2
进入busybox根目录,配置编译选项
12cd busybox-1.32.0make menuconfig
设置为静态编译12Settings ---> [*] Build BusyBox as a static binar ...
【WP】蓝帽杯2022_final
杀猪盘静态编译,第四个人出来的时候有两次栈溢出,第一次泄露canary,第二次泄露基地址返回rop,execve("/bin/sh",0,0)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657# encoding: utf-8from pwn import*context(os='linux', arch='amd64', log_level='debug')# r = process('./szp2')r = remote('39.105.99.40',25862)def init(): r.sendlineafter('> ', str(2))def cao(): r.sendlineafter(': ', str(4)) r.sendlineafter( ...
【WP】Ethernaut
Hello Ethernaut略
Fallback123456789101112131415161718192021222324252627282930313233343536373839404142434445// SPDX-License-Identifier: MITpragma solidity ^0.6.0;import '@openzeppelin/contracts/math/SafeMath.sol';contract Fallback { using SafeMath for uint256; mapping(address => uint) public contributions; address payable public owner; constructor() public { owner = msg.sender; contributions[msg.sender] = 1000 * (1 ether); } modifier onlyOwner { ...
【WP】qwb2022_final_rdp
前言一道realworld题目,难度不算太高吧但还是没能在时间内做出来,可惜。
题目描述123456789101112题目名称:RDP虚拟机环境:虚拟机操作系统ubuntu22.04;管理员用户名rdp,密码Aa123456(展示机用户具有不同口令)。题目描述:请针对xrdp服务进行漏洞利用,使用非管理员用户ctf执行选手exp程序后获取ubuntu操作系统root权限。展示步骤:1. 选手配置网络和虚拟机相连;2. 操作员使用如下方式启动做题环境: 1. 直接恢复快照(ctf用户桌面); 2. 在上述方法失效时,使用展示机rdp用户的口令登录rdp帐号,使用sudo systemctl restart xrdp&& sudo systemctl restart xrdp-sesman重启xrdp服务,然后切换至ctf用户;3. 选手使用http服务放入exp程序,操作员使用浏览器进行下载;4. 操作员执行选手exp程序(可多次执行,服务崩溃后选手可以选择重启靶机或恢复快照);5. 如果在/目录成功写入内容包含队伍特征的flag文件,则挑战成功。
附件给了三个文件1 ...
【WP】记录一道jerryscript引擎漏洞利用
一些基础知识数组表示/jerry-core/ecma/base/ecma-globals.h
12345678910111213141516171819202122232425262728typedef struct{ /** type : 4 bit : ecma_object_type_t or ecma_lexical_environment_type_t depending on ECMA_OBJECT_FLAG_BUILT_IN_OR_LEXICAL_ENV flags : 2 bit : ECMA_OBJECT_FLAG_BUILT_IN_OR_LEXICAL_ENV, ECMA_OBJECT_FLAG_EXTENSIBLE or ECMA_OBJECT_FLAG_BLOCK refs : 10 / 26 bit (max 1022 / 67108862) */ ecma_object_descriptor_t type_flags_refs; /** ne ...
PowerPC_PWN从入门到实践
本文首发于跳跳糖,转载于个人博客PowerPC PWN从入门到实践
概述前段时间2022虎符决赛结束,赛后从学长那看到了题目,其中出现了一道PowerPC64架构的pwn题,从架构方面来说比较少见,刚好之前看过一道PowerPC架构32位栈溢出的题目,于是放到一起整理一下。
前置知识相关内容很多,更多深入的内容还需要翻阅手册,这里就介绍一些基本的、与做题相关的内容。
PowerPC简介PowerPC(后称Performance Optimization With Enhanced RISC – Performance Computing,有时缩写为PPC)是一种精简指令集计算机(RISC)指令集架构(ISA),由 1991 年苹果-IBM-摩托罗拉联盟创建,称为AIM。PowerPC 作为一种不断发展的指令集,自 2006 年起被命名为Power ISA,而旧名称作为基于Power Architecture的处理器 的某些实现的商标继续存在。
数据类型PowerPC支持的数据类型
名称
字长(bits)
Quadwords
128
Doublewords
64
...
House_of_apple
到达世界最高城,glibc2.35!
昨天dsctf的eznote没做出来,2.35的环境是现配的,自己的思路也不是很清晰加上最后时间不太够了没能做出来,对我来说属于船新版本了。赛后ver爷发了一篇house of apple文章,确实太🐂了,通杀目前所有版本。有必要跟上时代,特此学习一下
house of apple众所周知高版本(>=glibc2.34)移除了诸多hook,已有的攻击方法基本都是针对IO结构体的利用,特别是通过更改vtable地址,利用一个原有的某jumps中的函数指针,进行后续利用。
另外在glibc2.35中似乎exit hook也看不到了。痛,太痛了……
house of apple方法也类似,利用的是_IO_wstrn_jumps中的_IO_wstrn_overflow。达到的效果是任意地址写地址,这里写入的地址通常是堆地址
12345678910111213141516171819202122232425262728293031static wint_t_IO_wstrn_overflow (FILE *fp, wint_t c){ ...
LLVM-PASS-PWN学习
LLVMLLVM是一个编译器框架。LLVM作为编译器框架,是需要各种功能模块支撑起来的,可以将clang和lld都看做是LLVM的组成部分。下图是Clang/LLVM的简单架构。
LLVM IRLLVM IR是LLVM的中间表示,文档https://llvm.org/docs/LangRef.html
LLVM中,IR有三种表示
.ll:给人类看的,介于高等语言和汇编之间
.bc:不可读的二进制IR,称作位码(bitcode)
内存格式
LLVM相关工具opt是一个在IR级别做程序优化的工具,输入和输出都是同一类型的LLVM IR
llvm-link,是IR级别的链接器,链接IR文件
llvm-as是针对LLVM IR的汇编器,功能是将.ll文件翻译为.bc文件。在LLVM项目里,.ll称为LLVM汇编码。
llvm-dis和llvm-as相反,即IR的反汇编器,将.bc文件翻译为.ll文件
clang。通过指定-emit-llvm参数,可以配合-S或-c生成.ll或.bc文件,就能把Clang的部分和LLVM的后端分离开独立运行
12345.c -> .ll:clang ...
Tinyhttpd学习
今天学一下很早之前在github看到的一个httpd项目,一直打算看一下拖到了现在。立刻开学
项目地址https://github.com/EZLippi/Tinyhttpd
socket相关
struct sockaddr_in,in_addr123456789101112#include <netinet/in.h>struct sockaddr_in { short sin_family; // e.g. AF_INET unsigned short sin_port; // e.g. htons(3490) struct in_addr sin_addr; // see struct in_addr, below char sin_zero[8]; // zero this if you want to};struct in_addr { unsigned long s_addr; // load with inet_aton() ...
复现点固件题
很早开了本坑,然后中道崩殂了。如今死灰复燃了呃。
题目来源:hws2021线上赛
STMbin文件放到ida里,Processor typr选ARM 小端Processor options选ARMv7-MROM开始地址填0x8000000(固定的开始地址),size会自动计算好
stm32初始化方法:从最低地址找中断向量表,中断向量表存着reset的中断处理函数,会根据这里,也即0x0000 0004指示的地址开始执行代码
进ida后,看到第二个地址指向0x8000101,最后一个1代表thumb模式
跳过来,在0x8000100处单走一个c键,识别出了很多函数和指令
然后就能找到main了逻辑很简单就是异或加密一下
123456789101112131415#include<stdio.h>int main(){ unsigned char ida_chars[] = { 0x7D, 0x77, 0x40, 0x7A, 0x66, 0x30, 0x2A, 0x2F, 0x28, 0x40, 0x7E, 0x30, 0x33 ...







