25年新生赛合集
newstar_wpGNU Debugger下发容器后在gdb中run
第一关找r12寄存器的16进制值,直接看就能看到
第二关找留在0x555555557c27该地址的一段话,直接用x/s 0x555555557c27找到一串字符
第三关下断点 直接b *0x00000
最后一关使用gdb修改指定地址的值 用set命令 set *0x0000 = 0xdeaf
pwn’s door打开IDA反编译找到key:7038329直接输入即可
INTbug整数溢出,v1在v2之上无法直接覆盖但是存在循环,v2大于零时每次v1都会加一,只要v1小于零就可以cat flag,__int16是 16 位有符号整数,最大值为 32767。当v1达到 32767 时,再执行++v1会发生溢出变成-32768。
exp
1234567891011121314151617from pwn import *context(arch = 'i386',os = 'linux',log_level = 'debug')#io = r ...
栈复习
以下均针对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: ...
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漏洞全称: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' ...
IDA动态调试
IDA动态调试IDA动调有图形化界面,做逆向的时候学会了windows的,在回顾动态链接的延迟绑定的时候又尝试了用IDA远程动调elf文件
目前了解到IDA动态调试可以通过附加到一个已经运行的进程上,从而开始调试,也可以启动新进程来调试
指令F9继续运行,F7步入,F8步过,F2下断点
通过Debugger-Breakpoints-Breakpoint list或者Ctrl+Alt+B来查看已经下的断点
通过Debugger-Debugger windows-Stack trace或者Ctrl+Alt+S查看是谁调用了当前的函数
下断点IDA中下断点要启动源码级调试,否则断点无效
也可以在Debugger中找到
动调elf:动调elf是利用IDA自己提供的调试服务器,如 linux_server 或 linux_server64 ,这些服务器可以在目标机器上运行,并通过特定端口与 IDA 客户端通信,通过远程调试。
首先要打开安装IDA的目录在/dbgsrv中找到linux_server和linux_sever32两个文件,将其复制到装有linux系统的虚拟 ...







