- 博客(22)
- 收藏
- 关注
原创 2025山西省网络安全职业技能大赛PWN方向题解
在第二次传 payload 时先调用 read 将 orw 的 rop 链读进。给了 libc 、ld 和 elf 文件,先 patchelf。赛后发现挺简单的,64 位沙箱orw,侥幸拿下赛道第一……patchelf 过程中发现有沙箱,dump 一下规则。libc 上面这片正好合适,为了防止栈增减,取中间位置…比赛现场 ida 坏了,没想着去做 pwn 题。两个半小时的比赛,pwn方向只有一道题目。,同时栈迁移过去,执行 orw 操作。这里用来构建 ROP 链,然后在。位置用于存读进来的 flag。
2025-11-07 18:42:59
671
原创 CTFshow-pwn入门-pwn49~50 mprotect函数
mprotect函数可以改程序段的读、写、执行权限,配合 shellcode 拿 shell。
2025-11-07 16:57:23
509
原创 从CTFshow-pwn入门-pwn43理解栈溢出到底跳转call还是plt
之前的栈溢出的题目中都是跳转到 call function 指令再通过 plt 跳转到函数真实地址,但是这道题的第一个函数必须用 plt 地址,那什么时候能用 call function 地址、什么时候必须要用 plt 地址呢?
2025-08-28 22:40:09
697
原创 从CTFshow-pwn入门-pwn38理解64位栈溢出堆栈平衡的两种办法
堆栈平衡是64位栈溢出时令人费解的问题,通过这一题的详细解题过程或许能搞明白
2025-08-27 11:46:24
573
2
原创 CTFshow-pwn入门-pwn100 WP
在栈上的第二个位置,对于 printf 来说,rdi 是函数本身,第一个参数是 rsi,然后是 rdx、rcx、r8、r9,栈上第一个,栈上第二个的。原来正常返回的 main 函数某个地址和我们写入的后门地址都是在 elf 基址上计算的,高位相同。这里还在找后面地址在栈上的位置,所以这里的 1 是随便填的,hn 是写入两字节,对应地址后四位。的第一个参数,在调用 printf 时,寄存器会存 printf 的参数,会暂时把在。个,加上寄存器上的 5 个和栈上的第 0 个,是格式化字符串的第 17 个参数,
2025-08-17 03:25:58
2206
原创 CTFshow-web入门-命令执行RCE(web29~77、118~122、124)WP
一般的计算都是数字,但是命令执行需要构造字母,这里就需要用到三十六进制,也就是用 10 位数字和 26 位字母组成的计数方法,这样就可以通过纯数字的十进制转化成带字母的三十六进制来构造出字母,期间的转化我们用到。还是受到限制不能用,这里我们用 UAF 绕过,UAF(Use-After-Free)是一种内存安全漏洞,攻击者可以利用已被释放的内存区域,导致程序崩溃或执行任意代码,属于 PWN 的内容。扫描目录内容,返回文件和目录名的数组,这里的参数是一步获取的"."(当前目录)
2025-08-16 11:48:13
2446
原创 从CTFshow-web入门-web118~122理解Linux Bash内置变量在RCE中的使用
随机数的位数,如 32767 是 5 位,42 是 2 位,即随机返回。返回了一个恶意输入,随便输入一些东西,发现数字和小写字母都是恶意输入。上一题的第一种解法只有 61 位,第二张解法就超过了 64 位。这里把禁用的都列出来了,而且 code 不能长于 64 位。是当前工作目录(如 /var/www/html),试了好多次才出来,丢进 cyberchef 解码。,输入框传入就会作为参数,输入。又因为数字也是恶意输入,我们用。被禁用了,得换一种方法了。被禁用了,我们需要构造。虽然匹配时是精确的不像。
2025-08-15 23:47:39
426
原创 CTFshow-web入门-爆破(web21~28)WP
在第二张图中,我们输入的账号是admin,密码是123456,得到了 YWRtaW46MTIzNDU2 ,放进cyberchef解密,发现账号密码的加密方法,即。附件给了密码字典,用字典里的密码登录admin管理员账户,密码太多了,想到用 bp 爆破。注意:php5 和 php7 的种子的随机数列不一样,题目环境是 php7。注意:php5 和 php7 的种子的随机数列不一样,题目环境是 php7。注意:php5 和 php7 的种子的随机数列不一样,题目环境是 php7。
2025-08-13 14:07:07
899
原创 CTFshow-web入门-信息搜集(web1~20)WP
这道题本意是考察 DNS 查询网站设置说明,但这道题在此时(25/8/1)已经失效,flag 题目也直接给了。也对,我们要找的 flag 应该是网站上正在运行的,而不是源码文件的,源码只是告诉了我们网站的框架。尝试访问 /tz.php,发现探针页面,这个页面下没找到 flag,但是找到了。打开一看这是网站源码,但是 fl000g.txt 里只有一个假的 flag。得到 flag ,这个 flag 挺特殊,不是以 ctfshow 开头的了。游戏是加载在浏览器上的,数据什么的都直接能拿到,我们来看源码。
2025-08-13 14:05:40
810
原创 从CTFshow-web入门-web40理解PHP函数构造
将数组内部指针向前移动一位并返回该元素,PHP数组遍历顺序通常是_GET、_POST、_COOKIE等,next()会跳过第一个_GET数组,返回_POST数组。current()的别名,返回数组当前指针指向的元素,在此处的效果:获取localeconv()返回数组的第一个值(小数点".")扫描目录内容,返回文件和目录名的数组,这里的参数是一步获取的"."(当前目录)弹出数组最后一个元素并返回,这里只有一个,所以返回 post 值。将数组内部指针向前移动一位并返回该元素,原来指向元素 0。
2025-08-13 14:02:41
471
原创 从CTFshow-web入门-web32~39理解PHP伪协议
本文介绍了web32-39的解题思路,主要利用PHP文件包含漏洞和伪协议绕过过滤限制。通过构造特殊的URL参数,如include$_GET[a]结合php://filter或data://伪协议,实现文件读取和命令执行。随着题目限制增多(如禁用echo、括号、冒号、数字等),逐步展示了更高级的绕过技巧,包括Base64编码、通配符替代和拼接字符串处理。
2025-08-13 14:00:13
477
原创 从CTFshow-pwn入门-pwn93深入理解格式化字符串
崩溃发生在 strlen函数内部(__strlen_avx2是 glibc 的优化版 strlen),strlen被调用是因为 printf遇到 %s时,会尝试读取栈上的一个地址并计算其长度,当 printf尝试用这些无效地址调用 strlen时,触发 Segmentation Fault。在 64 位程序函数调用约定中,参数分别放在 rdi、rsi、rdx、rcx、r8、r9 寄存器上,多余的压在栈上。这道题一定要花费大量的时间去调试,理解格式化字符串的原理。64 位小端序,保护全开,ida 反编译。
2025-08-12 21:25:25
433
2
原创 从CTFshow-pwn入门-pwn91入手格式化字符串
write_size 表示写入方式,是按字节(byte)、按双字节(short)还是按四字节(int),对应着hhn、hn和n,默认值是byte,即按hhn写,防止题目容器崩溃,我们用默认单字节写。的地址最先传入,那么这个地址就会在第 printf 函数的第 7 个参数的位置上。,不输出字符,但是把已经成功输出的字符个数写入对应的整型指针参数所指的变量。是有偏移的,最先传入的参数并不会老老实实放在栈上第一个位置上。两字节,一共 6 字节,也就是在第 7 个参数指向的地方写入。找到写入的地址,也就是。
2025-08-11 23:52:03
503
原创 CTFshow-pwn入门-前置基础(pwn0~34)WP
这种情况一般会出现在函数中需要使用 GOT 表地址的时候,简单来说就是主程序中 ebx 是有值的,在调用约定中 ebx 用来临时存放 GOT 表真实地址,方便函数使用,这时就会把 ebx 原来的值压入栈上先保存下来,让 ebx 临时储存 GOT 表的地址,函数结束时再恢复。命令是在子进程中执行的,这条命令重定向子进程的标准输出到标准输入,因此子进程的输出会被发送到父进程的标准输入,而我们的标准输入就是我们与题目容器连接的终端。函数在父进程中会返回该进程的 id 值(非 0),也就是 if 条件成立;
2025-08-10 23:54:22
2247
原创 从CTFshow-PWN入门-pwn32~34理解FORTIFY保护
FORTIFY_SOURCE 是 GCC 和 Clang 等编译器提供的一项重要安全特性,用于增强程序对内存操作漏洞的防护memcpymemmovememsetstrcpystrncpystrcatstrncatsprintfvsprintfsnprintfvsnprintfgetsfdopenfreadfwritereadrecvsendprintffprintfvprintf%ncheckse64 位小端序,这里没有显示 FORTIFY,说明没有打开这项保护,题目上也说防御等级是 0。
2025-08-10 23:50:50
715
原创 从CTFshow-PWN入门-pwn25分析ret2libc原理与实现
这是一道栈溢出的题目,具体用了 ret2libc 的方法,本属于后面模块的题目,放在这里是为了让大家了解一些保护以及对应的攻击手法。
2025-08-09 23:41:13
693
原创 深入分析CTFshow-PWN入门-pwn24的解法与原理
生成出的 shellcode 是汇编代码,需要汇编成机器码才能运行,asm()是pwntools中一个核心函数,用于将汇编代码转换为机器码(二进制指令)这里我们直接构造 shellcode,一段精心构造的机器码(二进制指令)来获取 shell。这里的 shellcraft 可以生成各种功能的 shellcode,我们生成一个最简单的。所以,只要输入获取 shell 权限的命令,程序就会执行,从而拿到 shell。可以看到存在一个RWX权限的段,即可读可写可执行的内存段。
2025-08-09 23:39:55
466
原创 深入分析CTFshow-PWN入门-pwn23的解法与原理
这一题相较之前题目难度跨度较大,对挨着做题的同学很不友好此文章简单解释了代码逻辑和栈溢出崩溃的原理,希望对入门者有帮助
2025-08-09 23:37:55
327
原创 深入分析CTFshow-PWN入门-pwn19的解法与原理
我参考了 My6n 师傅的 https://blog.youkuaiyun.com/Myon5/article/details/137891670 这篇文章。关闭了子进程的输出流,导致cat文件时看不到输出,所以在 payload 中我们要对输出重定向。所以exec并不会去调用父进程,即使跳出子进程执行也继承了子进程的文件描述符,也就是说输出流还是关闭的。如果exec真的调用了父进程,那么父进程的输出流是正常的,理应就不需要重定向,但是未能拿到flag。同理,我们也可以1>&2,因为错误信息也会被打印出来。
2025-08-09 23:36:10
453
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅