c,n,e
c = 56613428917500107333805665929649838664170431365586927050472835632493352281132906880650852353222968216352539122052480298678597942222491140307136054899810188399309601841985781066349556402656265936387198982416213553527371797028588922158590180183557825656603655260495274991128213083583658163484031421101704682642610977489041838957457612851407161646468633531435861289444987129701232088099157738545651299813464375053735552714584386100515057420672876396556715660761015805066283349759332888183738...
p,q,e,c
p = 3487583947589437589237958723892346254777q = 8767867843568934765983476584376578389e = 65537cipher = 26369494845903294944045520286034018329014599704760363106090278637665342700044 123456789101112131415161718192021from sympy import mod_inversee = 65537p = 3487583947589437589237958723892346254777q = 8767867843568934765983476584376578389cipher = 26369494845903294944045520286034018329014599704760363106090278637665342700044n = p * q #计算模数phi_n = (p - 1) * (q - 1) #计算欧拉函数d = mo...
pwn135-159【停更先,堆好难,打打新生赛去了,学一下re】
pwn135Hint:为防止题目难度跨度太大,135-140为演示题目阶段,你可以轻松获取flag,但是希望你能一步步去调试,而不是仅仅去拿到flag。 如何申请堆? int __fastcall main(int argc, const char **argv, const char **envp){ init(argc, argv, envp); logo(); menu(); ctfshow(); return 0;} 跟进menu: int menu(){ puts("Choose a function to allocate heap memory:"); puts("1. malloc"); puts("2. calloc"); puts("3. realloc"); return printf("Enter your choice: ");} 跟进ctfshow: unsigned __int64 ctf...
16.04dockerfile
# used for compile ubuntu 16.04 debugging pwn image# author: roderick# date: 2024-04-06ARG BUILD_VERSIONFROM ubuntu:$BUILD_VERSIONARG DEBIAN_FRONTEND=noninteractiveARG HUB_DOMAIN=github.comARG NORMAL_USER_NAME=ctfENV TZ=Etc/UTCENV LANG=en_US.UTF-8ENV LANGUAGE=en_US:enENV LC_ALL=en_US.UTF-8WORKDIR /root# install ruby 2.7 RUN apt-get update && apt-get -y dist-upgrade && apt-get install -y --fix-missing python3 python3-pip python3-dev lib32z1 \ xinetd curl gcc g++ gdbserver gi...
docker命令
- 格式:`docker tag 旧镜像名:旧标签 新镜像名:新标签`sudo docker tag roderickchan/debug_pwn_env:16.04-2.23-0ubuntu11.3-20240412 my_pwn_env:ubuntu16 #删除旧标签sudo docker rmi roderickchan/debug_pwn_env:16.04-2.23-0ubuntu11.3-20240412# 先停止容器 sudo docker stop pwn16_env# 再删除 sudo docker rm pwn16_env
pwn111-134
pwn111Hint:没难度检查保护: $ chmod +x pwn$ checksec pwn Arch: amd64-64-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) Stripped: No 64位仅开启NX保护 IDA直接查看漏洞函数: int __fastcall main(int argc, const char **argv, const char **envp){ init(argc, argv, envp); logo(); ctfshow(); return 0;}ssize_t ctfshow(){ _BYTE buf[128]; // [rsp+0h] [rbp-80h] BYREF write(1, "Input your message:\n", 0x14u); r...
pwn101-110
pwn101Hint:还是简单的知识检查保护: $ chmod +x pwn$ checksec pwn Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled Stripped: No 还是64位保护全开 IDA查看main函数: int __fastcall main(int argc, const char **argv, const char **envp){ unsigned int v4; // [rsp+0h] [rbp-10h] BYREF int n0x7FFFFFFF; // [rsp+4h] [rbp-Ch] BYREF unsigned __int64 v6; // [rsp+8h] [rbp-8h] v6 = __readfsqword(0x28u); init(argc, argv, envp); lo...
pwn91-100
格式化字符串pwn91Hint:开始格式化字符串了,先来个简单的吧检查保护: $ chmod +x pwn$ checksec pwn Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: No 32位关闭PIE,部分开启RELRO IDA查看main函数: int __cdecl main(int argc, const char **argv, const char **envp){ init(&argc); logo(); ctfshow(); if ( daniu == 6 ) { puts("daniu praise you for a good job!"); system("/bin/sh"); }...
1-ret2dlresolve
在学习这个 ROP 利用技巧前,需要首先理解动态链接的基本过程以及 ELF 文件中动态链接相关的结构。动态链接 原理在 Linux 中,程序使用 _dl_runtime_resolve(link_map_obj, reloc_offset) 来对动态链接的函数进行重定位。那么如果我们可以控制相应的参数及其对应地址的内容是不是就可以控制解析的函数了呢?答案是肯定的。这也是 ret2dlresolve 攻击的核心所在。 具体的,动态链接器在解析符号地址时所使用的重定位表项、动态符号表、动态字符串表都是从目标文件中的动态节 .dynamic 索引得到的。所以如果我们能够修改其中的某些内容使得最后动态链接器解析的符号是我们想要解析的符号,那么攻击就达成了。 思路 1 - 直接控制重定位表项的相关内容由于动态链接器最后在解析符号的地址时,是依据符号的名字进行解析的。因此,一个很自然的想法是直接修改动态字符串表 .dynstr,比如把某个函数在字符串表中对应的字符串修改为目标函数对应的字符串。但是,动态字符串表和代码映射在一起,是只读的。此外,类似地,我们可以发现动态符号表、重定位表项都是只...






