文章目录

(原创)北京邮电大学网络空间安全-自主招生复试CTF题wp

由 ssnhy13 发布

写在开头的话:

    今年总共有三所院校自主招生里面提到了对网络空间安全特长生有高考优惠政策招生,分别是四川大学,北京邮电大学,中国科技大学。其中中国科技大学和北京邮电大学是降分到当地一本线录取,川大有三个等级,第一等级是降分到当地一本线录取,第二个等级是降分一本线下30分录取,第三个等级是破格录取,即不看高考分数录取。  因为在今年自招报名的时候,正好川大限制的报名院校数量是三所,所以我都报名了这三所学校。  最终的初审结果是通过了川大和北邮的初审,中国科技大学初审没通过(看来中科大对文化课成绩要求还是很高-_-),其中,川大初审全国通过了三十多个人,北邮初审全国通过了七个人。 最终一番纠结还是选择了去北邮复试,于是乎高考考完英语下午就直奔北京参加考试去了,昨天回到克拉玛依,和同行的也通过了川大和北邮初审最终选择了北邮的好朋友iosmosis一同记录下这篇关于北邮自招复试的文章内容,希望能对有需要的小伙伴提供到帮助~  值得一提的是北邮的最终复试,当天只有四个人到了现场,其中一个人选择的ACM,我和剩下两人选择的CTF。北邮复试分为上午机试(CTF和ACM二选一)三小时,下午面试每个人大约十分钟时间,抽两个问题回答,和其他问题。


上午CTF内容(WEB和RE各三道)

RE  下载链接   https://www.klmyssn.com/CTF/BUPTzizhao.zip

*simple

这题还是比较简单的,首先直接ida打开。

图片1.png

通过下面的 图片7.png 我们便可以得出flag长度为32 然后分析内部的操作。 我们可显然可以看出算法核心就是对flag进行一堆骚操作之后与v6数组进行比较--->遇见这种题目我们很容易想出使用z3约束进行求解 但是这里其实还有一个坑,他在骚操作的时候用了uint8,uint8的上限是256,所以我们在写约束的时候要%256. code如下

from z3 import *

str1 = [


0x4f,0x3b,0x23,0x11,0xe1,0x1f,0xfe,0xb3,0x4b,0xdd,0x75,0xfe,0x47,0xec,0xf2,

0 x43,0xdc,0x38,0xd4,0x64,0xde,0x45,0xbd,0x01,0x1b,0x04,0xb9,0x89,0x7d,0xb6,0x 4e,0xe2]


str2 = [

0x6b,0x6e,0x26,0x54,0x56,0x4b,0xe8,0x80,0xdc,0x28,0x46,0x18,0x71,0xcb,0x65,0 x44,0x9b,0x2b,0x22,0x82,0x2b,0x56,0x8e,0xe7,0x69,0x41,0x4c,0x1f,0x3a,0x45,0x 5c,0x35]

flag = [BitVec("flag%d"%i,16) for i in range(32)]

S = Solver()



for i in range(32):


 S.add(flag[i] > 32

 S.add(flag[i] < 128)

 S.add((str2[i]^(((16*flag[i])|(flag[i]>>4))%256)) == str1[i])

if S.check() == sat: 

m = S.model() 

flag1 = ''
for i in range(32):
     flag1 += chr(m[flag[i]].as_long()) print flag1

print flag1



运行得到flag:

 BUPT{Ea3y_3ncrypt1on_13n'T_it?!}


*kaisa

依然直接IDA打开

图片5.png

合hint 很显然可以看出是凯撒加密同时v5=11 显然右移了11位,直接取出数据用工具暴力跑一波 得到flag

BUPT{Ka1_3A_I3_vERy_SmarT_R1Gni?!?}

*main

不会。。。。。



WEB


*easyphp

右键查看网站源码





<html>

   <head>

       <meta http-equiv="content-type" content="text/html;charset=utf-8">

   </head>

   <body>

   

    <!--

    index.php

    <?php    

$flag='xxx';    

extract($_GET);    

if(isset($gift)){        

   $content=trim(file_get_contents($flag));

   if($gift==$content){

      echo'flag';     }

    else{      

      echo'flag has been encrypted';}  

    }

?>

-->

   </body>

</html>



发现hint 存在flag这个文件 读入到content

输入gift 如果 gift=content则输出flag

尝试访问

      http://10.112.163.9:8888/web2/index.php?gift=


返回




Warning: file_get_contents(xxx): failed to open stream: No such file or directory in /var/www/html/web2/index.php on line 6

flag is OHCG{82s5r276o3006q2054048p6799op543q}


根据提示 flag has been encrypted

所以猜测flag被某种方式加密

猜测为凯撒加密

用工具爆破了一下



               

                
PIDH{82t5s276p3006r2054048q6799pq543r}
QJEI{82u5t276q3006s2054048r6799qr543s}
RKFJ{82v5u276r3006t2054048s6799rs543t}
SLGK{82w5v276s3006u2054048t6799st543u}
TMHL{82x5w276t3006v2054048u6799tu543v}
UNIM{82y5x276u3006w2054048v6799uv543w}
VOJN{82z5y276v3006x2054048w6799vw543x}
WPKO{82a5z276w3006y2054048x6799wx543y}
XQLP{82b5a276x3006z2054048y6799xy543z}
YRMQ{82c5b276y3006a2054048z6799yz543a}
ZSNR{82d5c276z3006b2054048a6799za543b}
ATOS{82e5d276a3006c2054048b6799ab543c}
BUPT{82f5e276b3006d2054048c6799bc543d} //因为提示flag格式为BUPT{}因此此为flag
CVQU{82g5f276c3006e2054048d6799cd543e}
DWRV{82h5g276d3006f2054048e6799de543f}
EXSW{82i5h276e3006g2054048f6799ef543g}
FYTX{82j5i276f3006h2054048g6799fg543h}
GZUY{82k5j276g3006i2054048h6799gh543i}
HAVZ{82l5k276h3006j2054048i6799hi543j}
IBWA{82m5l276i3006k2054048j6799ij543k}
JCXB{82n5m276j3006l2054048k6799jk543l}
KDYC{82o5n276k3006m2054048l6799kl543m}
LEZD{82p5o276l3006n2054048m6799lm543n}
MFAE{82q5p276m3006o2054048n6799mn543o}
NGBF{82r5q276n3006p2054048o6799no543p}

OHCG{82s5r276o3006q2054048p6799op543q}

*计算题

题目提示 1s中回答随机产生的数学题
运算符号不发生改变 所以用python先取出需要运算的数然后进行运算 最后post提交即可
EXP

               

                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
               

                
import urllib2, urllib
data = {'v' : '1'}
f = urllib2.urlopen(
url = 'http://10.112.163.9:8888/web1/index.php',
#data = urllib.urlencode(data)
)
res = f.readlines()
temp = str(res).split('<br/>')
print temp
res1 = temp[len(temp)-1]
print res1
temp = str(res1).split('=')
res2 = temp[len(temp)-6]
print res2
res =res2
re1 = str(res).split('*')
print re1
a = re1[len(re1)-3]
re2 = re1[len(re1)-2]
re2 = str(re2).split('+')
print re2
b = re2[len(re2)-2]
print b
q = int(a)*int(b)
print q //前两位相乘
c = re2[len(re2)-1]
print c
re3 = re1[len(re1)-1]
print re3
re3 = str(re3).split('(')
print re3
re3 = re3[len(re3)-1]
re3 = str(re3).split(')')
print re3
re3 = re3[len(re3)-2]
print re3
re3 = str(re3).split('+')
print re3
d = int(re3[len(re3)-2])+int(re3[len(re3)-1])
print d //括号里面的相加
p = int(c)*int(d)
print p //括号外相乘
ss = int(p)+int(q)
print ss //执行完整的运算
data = {'v' : ss}
f = urllib2.urlopen(
url = 'http://10.112.163.9:8888/web1/index.php',
data = urllib.urlencode(data)
)
print f.read()

运行即可获取flag
flag is BUPT{7b28f26afca4bc2654bd83d2a2bdc546}






author: Mr.R(https://darkeyer.github.io/)    


iosmosis(https://iosmosis.github.io/) 



0条评论

发表评论


验证码