- Q& L/ P9 p L4 G% r2019--国赛--第一次参加线上赛的自己的整理' X3 b, p1 {6 y- w$ T/ C5 H
misc第一题:签到: s/ I3 F6 k! I( d8 G8 i
' P! ~) a- U" a- @打开压缩包,发现一个exe文件和一个txt,要三个人一起站到摄像机,然后等软件识别,就出flag了2 O ~ ]' r5 a# W( z
s* S( E" F8 q" o但是我发现,你拿手机放一张照片(有三个人或比三人多)上去也可以出flag,所以推测出,该软件是甄别像素点来进行识别的 3 }" a/ t0 H3 O4 w. F8 b p6 W0 W ^/ K
misc第二题:saleae9 @, n/ o% R2 |4 j0 ~
5 R# [9 u6 }$ b( g下载压缩包,得到一个.logic的程序,都是新东西,没人知道这是用什么软件来打开的,我发现这个特别考百度能力(捂脸)就是需要logicdata软件 7 w2 k/ h# ^4 @2 K# H8 D; H9 k c6 |/ I( j
下载后,发现其中给的是波形 3 \# p" U" g3 N C) e# Z/ f% A0 P M! e3 _
然后去百度,发现这个软件是与芯片的输入输出有关,(后面是可以利用旁边的软件来读取flag的): E1 K- P8 l, Z3 X+ e3 l- I4 X
9 y1 G4 r/ O( i& i m
当时的我们没发现这个好办法,只能是0101010101的将flag读出来,然后进行转换成字符串 / [7 a$ q- A& g2 j v 3 Z$ B( K4 C) o! E# r+ C1 Nmisc第三题:24C 7 o# V8 b, S- Z% E% Z- i1 K6 {7 z; f9 r+ F
与第二题类似,但是需要一点脑洞,就是记得改变它的读取顺序就好了 6 I T& M. _- C V 3 V/ ?' W6 i" a; Y9 Kcrypto第一题:puzzle $ ~, W9 h0 a) N6 I& R B! J " F. Y. _9 L+ j, Y6 E首先是给了一个网站,心想还是不是web+密码,那就有点…舒(zi)适(nue)了吧" y* v+ Y$ L. T" y m
* o/ z( [3 N3 {* S( M让我深深的感受到数学的重要性,三重积分还没学的我,简直看的如痴如醉,第一题的素数来找规律,让我懵逼好久,这是什么题哦$ d& V+ r3 k' H: ]) K
3 c+ J3 ^0 f# T- y' ^- n5 e所有的一切都是从0开始的感觉,于是就开启了自学之旅9 O* c0 Q) u. f$ v0 W
! a* E& }+ m! T
提示一下:1、question0 记得化简运算,当然网上也有计算器(当时死算到无奈,后面还错了)! @' ^3 |; l4 J' d$ T( S3 K; p6 n
: a& t/ n+ _% [* v8 ? 2、question1就是分组找规律,与素数有关# E( E" y+ o3 C; m) r2 b3 a
9 [: i$ O: j/ q2 c/ W, f* F 3、question2是做的最舒服的一道题,简简单单的高数上的计算) V* f o9 z9 |9 `- ^1 Q
8 [( b' P! O; t9 H0 T# U
4、question4是高中的知识,不过用一下大学的思想就就是大物的东西了,记住公式就没啥大问题了. f+ I; B A. ^5 f' p2 U
4 y6 j3 O/ ?* [1 o, y p& _ V2 s 5、question5是三重积分,与二重积分类似,具体自己去算$ p% {7 R, b; p
1 ! x# y5 l; @$ \, ~24 |8 G) s/ l3 c- H$ R; C, x& H
3 - t' r) a8 Z- k1 ~; \6 L% m4 8 D3 W! {+ q5 ~* T# w7 @5 7 r Q# e2 c( v0 [6 T+ P, ^3 w! F' X72 H9 Q- k9 V/ t( y
总而言之,这一道题就是叫你好好的去学习高数,一定要认认真真学习高数) N- U* M; p. E8 z8 S3 M
" a J9 E' n' F' V更改SPI的某个特殊点后,进行一个对照,发现只有将setting中最后的一个参数,改成high值,原屏幕的右下角就出现了flag。 + {- v: E |+ A# i$ A , _( A$ b0 M: C5 Sweb第一题( t" p7 U, w$ ^/ i1 [) ?
& m: |2 `3 S1 y. I7 {Just so so0 k8 U1 v% i/ y& d8 z9 C
7 a, h: b1 e" ^6 L开始时,用伪协议拿到源码,然后就是反序列化利用了, u# N& C0 y, k9 I
- [% _3 p k) r9 U" E<?php index.php error_reporting(0); $file = $_GET["file"]; $payload = $_GET["payload"]; if(!isset($file)){ echo 'Missing parameter'.' , B$ C. N( y& o% \ O( y7 t'; } if(preg_match("/flag/",$file)){ die('hack attacked!!!'); } @include($file); if(isset($payload)){ $url = parse_url($_SERVER['REQUEST_URI']); parse_str($url['query'],$query); foreach($query as $value){ if (preg_match("/flag/",$value)) { die('stop hacking!'); exit(); } } $payload = unserialize($payload); }else{ echo "Missing parameters"; } ?> hint.php <?php class Handle{ private $handle; public function __wakeup(){ foreach(get_object_vars($this) as $k => $v) { $this->$k = null; } echo "Waking up\n"; } public function __construct($handle) { $this->handle = $handle; } public function __destruct(){ $this->handle->getFlag(); } } 2 I, _5 y3 J+ Aclass Flag{ ) r: j, e# n+ \+ u w) ^public $file; % [* d: Z0 b Zpublic $token; 8 H( y- h1 l \: _- v( npublic $token_flag; ( u6 Y& K/ A2 }: ]- I: w; n7 c2 }
function __construct($file){5 z' V( I Y. B' D2 I, }
$this->file = $file;0 ]; J/ E2 z2 \$ ?. a2 }
$this->token_flag = $this->token = md5(rand(1,10000)); 7 ^7 Y4 W* n( g+ o% t& Z$ L- i} ( j2 k0 U& _* n0 @( d/ U+ x) T7 R( e! l7 L* C+ U: P/ |& L3 Q
public function getFlag(){ 6 \0 u( D# y6 ?8 v $this->token_flag = md5(rand(1,10000));0 }7 A5 a% m3 p4 q/ a% C h' K0 B
if($this->token === $this->token_flag)# }. h+ j1 X9 M+ w# k/ I
{ 8 X( }* f7 z( d- D! Y7 m- K3 v( E if(isset($this->file)){ + `/ i9 ~* x5 Y2 k* C2 F8 N, n echo @highlight_file($this->file,true); # V9 }3 ^7 o/ Q } 3 r: _ r) S& @6 L } 2 r' Y2 @) Z1 B) ^. U1 W0 N}$ F6 [6 n: Q; F4 W, i. a2 u) G/ @
1 / ?! O+ h! c2 `+ E% W8 j2# G% V9 {& \7 d) F# o; v
3 & f' n. v) h- E9 }# G, s4 , P8 X3 |3 i7 g" @& Z1 h) [! w& y; a& L5' f3 \9 c d% M+ ~5 K' ^' m8 t( a
6 : W5 U! X- [ g% _3 U8 k6 K8 a7 0 [! e9 e7 G6 x& u" p' H/ e8 5 `7 j6 @: b5 }9 - }0 ]/ h* C6 k" v- N* s10" y( N9 p8 {3 a4 k3 g$ t% u! S8 X
11 " e7 K& `1 o9 {& f8 x12 ( I% B1 |! l" y2 g) b0 P13 ' E& x2 I, {/ J9 G4 O14 : P/ [+ Q1 e+ s. k5 |} + F* @5 R* z5 ]: J- w?> 2 f! v7 E' `9 P' l; O2 f' a 大佬说: 可以看到Handle类有个__destruct函数,该函数可以触发getFlag函数,但是__wakeup函数会将所有东西清空,这里改下属性个数就能绕过,参考SugerCRM漏洞,然后getFlag函数的条件可以用指针绕过,以前安恒的月赛也考过,最后flag的匹配可以利用parse_url漏洞,三个斜杠就能绕过了 # Y; h; G. H) r5 o! z' q: k; Gexp, F- E, w9 Q" _
! ]% L* Q2 p8 j) |View Code $ X9 b9 r8 D& k+ B * P$ h+ Q U! t- n( n/ |1 h! Z& S/ i
, e6 O" \- y1 E5 ?( n) H* ~0 n, o8 [4 ?
https://xi4or0uji.github.io/2019/04/22/2019-4-22-2019-全国大学生信息安全竞赛-writeup/#more j& y& X7 c2 H H# f" v- h8 \
总结:本次比赛只是做了misc的题,web的题目打的也太少了,要继续加油,多进行php的审计,同时多做一些web题总结经验,下次争取多打几道web题 - M3 D2 l7 ~' \( |9 {; p, j# T0 u--------------------- ! G5 Z* ]( V2 {9 d: J
作者:Jeff King # n' i. I: v0 M5 R6 Z h
来源:CSDN ) M& I' y5 Y3 b% Q6 T% H
" l3 ], h' U- j! O# t
* c! Y3 r+ U! G5 F" R. G' R+ S
6 N# W4 `6 i8 l) I- r0 C- m