极客大挑战2024复现(更新中)
ez shellcode分析checksec
发现开了nx,没开canary
分析main函数
发现第一次read获取输入填入bss段的shellcode中,但bss段可读可写不可执行,找找有没有提权函数,没开canary可以利用gets部分截取执行流。
发现提权函数gift(真的是一个好gift)
mprotect()函数将bss段的shellcode部分设置为可执行
mprotect()函数注释
mprotect(shellcode, 0x500uLL, 4) 是一个调用 mprotect() 函数的语句,其作用是改变从地址 shellcode 开始、长度为 0x500 字节(即1280字节)的内存区域的保护属性。这里的参数解释如下:
shellcode:这是指向需要修改权限的内存区域起始地址的指针。
0x500uLL:表示要修改权限的内存区域的长度,单位是字节。这里使用无符号长整型(unsigned long long),确保可以处理较大的值。
4
:新的保护标志,通常代表可读、可写和可执行权限。在Linux中,这个值通常是通过宏定义组合而成的:
PROT_REA ...
基础学习
[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指令并且在 ...
ret2text
函数压入栈中是由上往下由栈底到栈顶,通过payload将数据压入栈是由下往上由栈顶往上压入到栈底
未开保护存在可利用函数类(地址跳转)有打印flag的函数什么保护都没开,存在gets函数有栈溢出漏洞,有打印flag的函数。
思路:利用栈溢出覆盖原函数到其ebp,用flag的地址覆盖原函数返回地址,以达到运行打印flag函数的效果
12345678910111213141516171819202122from pwn import *# 设置 pwntools 的上下文环境context(arch='i386', os='linux', log_level='debug')# 连接到远程服务器io = remote("pwn.challenge.ctf.show", 28182)# 加载本地二进制文件elf = ELF('./pwn')# 获取 get_flag 函数的地址flag = elf.sym['get_flag']# 构造 payload,cyclic用于生成 ...
2024玄武杯
序:玄武杯pwn只出了两题签到题有点可惜,但是还是学到了很多东西(下次不会再被保护吓到了!!)
Miscmisc0:一题图片识别题,刚开始还没头绪结果直接公布答案了qwq,看了学长的wp后发现了用谷歌识图就出来了
misc1:编码转换,给了一串二进制题目提示组cp,猜测应该要转为字符故首先尝试将其转为ASCII字符,出现一段有cp,的字符串,拖工具一键解码没出来,看元素只有了两个所以试着改了一下摩斯码,把c换成 . 把p换成 - ,当作分隔符,(因为没想到写脚本转就手打了,打完之后眼睛花了还出错了好几次,下次一定写脚本转),转换之后解码包裹得解,后来查文章发现cp也是摩斯码的一种表现形式
misc2:信息查找题,给了一张图片查该飞机在当天10点经过哪个城市
从图片中可以看到飞机机翼上有飞机的编号B-20A6,另一架飞机上有航空公司名字且两架飞机的logo一样故确认为中国国际航空公司的飞机,打开文件属性发现备注了拍摄时间2024年10月12号00:00故确认了范围,接下来寻找能够查航空轨迹的工具,我用的是航旅纵横里面可以用航班号、飞机编号查具体时间的飞机的飞行轨迹。
misc3:sno ...
ctfshow_pwn前置杂记
一些Linux指令SSHSSH(Secure Shell)是一种网络协议,用于安全地远程登录到计算机系统。SSH 主要用于以下场景:
远程命令行登录文件传输(通过 SFTP 或 SCP)端口转发
使用格式:
ssh ctfshow@题目地址 -p题目端口号
lsls 命令用于列出目录内容
eg:
ls:列出当前目录的内容。
ls -l:以长格式列出当前目录的内容,显示文件的详细信息。
ls -a:列出当前目录的所有文件,包括隐藏文件(以点开头的文件)。
ls /path/to/directory/:列出指定目录的内容。
注:ls后加 / 是为了明确指定路径避免歧义
ncnc(Netcat)是一个功能强大的网络工具,用于读取和写入网络连接
看起来你正在使用 gdb(GNU 调试器)来调试一个程序。gdb 是一个强大的工具,可以帮助你分析和调试程序的行为。如果你有具体的调试需求或遇到问题,请告诉我更多细节,我可以提供进一步的帮助。
echoecho 是一个常用的命令行工具,用于将指定的文本输出到标准输出设备(通常是终端,也可以是指定文件)。这个命令非常简单但功能强大, ...
第一篇文章
首先要感谢baozongwi//学长,帮我搭建了基础的hexo并装好了主题,并且在学习上帮了我很多,我会努力学习不辜负学长期望的!!
记录一下自己的目标:希望成为一名资深pwn手,能够在二进制方面有所成就。
最后因为刚入门,主题也没完全配置好所以博客会比较简陋,学习的知识也很少所以文章会比较基础。