首页 > 系统相关 >[网鼎杯 2020 白虎组]PicDown linux文件工作原理

[网鼎杯 2020 白虎组]PicDown linux文件工作原理

时间:2024-05-07 16:12:47浏览次数:52  
标签:PicDown E5% BB% E6% E7% E8% 2020 E4% 网鼎杯

今天遇到个毫无头绪的题,记录一下过程。
进入页面发现输入框,参数为url,那就试试文件读取。

看看环境变量。

其中PWD=/app,有可能存在app.py,试试吧。猜对了,运气吧~ (做完后才发现的T-T)

这里看其他wp说是在 linux读取当前进程执行命令/proc/self/cmdline发现了


看看app.py吧。

点击查看代码
from flask import Flask, Response
from flask import render_template
from flask import request
import os
import urllib

app = 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 response
        else:
            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 res


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)
发现在no_one_know_the_manager存在RCE漏洞,但是有两个参数,需要参数key等于SECRET_KEY才可以获取shell参数执行代码,而serect_key所在文件夹被删除了,但是就没思路了。看了wp,说是这个文件是用open打开的,会创建文件描述符,直接读这个文件描述符中的内容就好了,直接就给了位置,新手表示这是什么东西啊! 后来查资料发现了问题所在。 看看我的描述:
点击查看代码
当linux打开一个文件的时候,Linux内核会为每一个进程在/proc/ 『/proc/nnnn/fd/目录(nnnn为pid)』建立一个以其pid为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的f
在Linux中,文件是用文件描述符来表示的。文件描述符是一个非负整数,它唯一地标识打开的文件。在打开一个文件时,内核会返回一个文件描述符。close函数用于关闭文件,释放文件描述符,并关闭文件可能占用的资源。
而在源码中没有进行close,所以导致没有释放占用的资源,而文件描述符还存在在/proc/nnnn/fd/目录。
理解个大概就行,可能是错的,也请指出。

也可以看看https://www.cnblogs.com/sx66/p/16824323.html#:~:text=%E5%9C%A8Linux%E6%88%96%E8%80%85Unix%E7%B3%BB%E7%BB%9F%E4%B8%AD%EF%BC%8C%E9%80%9A%E8%BF%87rm%E6%88%96%E8%80%85%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86%E5%99%A8%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E5%B0%86%E4%BC%9A%E4%BB%8E%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9A%84%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E4%B8%8A%E8%A7%A3%E9%99%A4%E9%93%BE%E6%8E%A5%20%28unlink%29%E3%80%82,%E7%84%B6%E8%80%8C%E5%A6%82%E6%9E%9C%E6%96%87%E4%BB%B6%E6%98%AF%E8%A2%AB%E6%89%93%E5%BC%80%E7%9A%84%EF%BC%88%E6%9C%89%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%EF%BC%89%EF%BC%8C%E9%82%A3%E4%B9%88%E8%BF%9B%E7%A8%8B%E5%B0%86%E4%BB%8D%E7%84%B6%E5%8F%AF%E4%BB%A5%E8%AF%BB%E5%8F%96%E8%AF%A5%E6%96%87%E4%BB%B6%EF%BC%8C%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4%E4%B9%9F%E4%B8%80%E7%9B%B4%E8%A2%AB%E5%8D%A0%E7%94%A8%E3%80%82%20%E4%B8%80%E7%A7%8D%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%E6%98%AFkill%E6%8E%89%E7%9B%B8%E5%BA%94%E7%9A%84%E8%BF%9B%E7%A8%8B%EF%BC%8C%E6%88%96%E8%80%85%E5%81%9C%E6%8E%89%E4%BD%BF%E7%94%A8%E8%BF%99%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E5%BA%94%E7%94%A8%EF%BC%8C%E8%AE%A9os%E8%87%AA%E5%8A%A8%E5%9B%9E%E6%94%B6%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4%E3%80%82
那么下一步我们访问这个文件夹下的东西试试。 /proc/self/fd/{} {}里从1开始

发现serect_key,但是shell不会回显啊,想到可以利用dns外带法(自己搜搜吧),那么直接打吧(记得key要url编码啊,我也不知道为什么可能是环境问题)。

也可以利用tee将flag输出到/tmp文件夹下(为什么这个文件夹因为试了其他都不行,可能这个文件夹才有权限)

结束,又学到一招-_-

标签:PicDown,E5%,BB%,E6%,E7%,E8%,2020,E4%,网鼎杯
From: https://www.cnblogs.com/jocker-love-you/p/18177588

相关文章

  • [WUSTCTF2020]CV Maker
    [WUSTCTF2020]CVMaker打开环境注册了账号登陆,发现有上传头像的地方,尝试上传文件可以上传图片马GIF89a<scriptlanguage='php'>@eval($_POST['shell']);</script>BP里抓包改为php,得到上传成功路径http://1d2ee33c-dfe2-49ec-88c3-d3305f7bd2f3.node5.buuoj.cn:81/upload......
  • [Zer0pts2020]Can you guess it?
    [Zer0pts2020]Canyouguessit?打开环境没有什么特殊的地方,可以点击按钮查看源码<?phpinclude'config.php';//FLAGisdefinedinconfig.phpif(preg_match('/config\.php\/*$/i',$_SERVER['PHP_SELF'])){exit("Idon'tknowwhatyou......
  • [MRCTF2020]套娃
    [MRCTF2020]套娃打开环境发现有张图片显示不出来查看网页源代码发现部分代码$query=$_SERVER['QUERY_STRING'];if(substr_count($query,'_')!==0||substr_count($query,'%5f')!=0){die('Y0uareSocutE!');}if($_GET['b_u_p_t�......
  • [WUSTCTF2020]颜值成绩查询
    [WUSTCTF2020]颜值成绩查询打开环境是一个成绩查询的页面1.手工注入输入1发现有admin的账号和得分输入1'会提示学号不存在1/**/or/**/1=1#过滤了空格1/**/order/**/by/**/3#存在1/**/order/**/by/**/4#不存在由此得知有3个字段1/**/union/**/select/**/1,2,......
  • 2020-2021 ICPC NERC (NEERC), North-Western Russia Regional Contest (Northern Sub
    E-EasyCompare-and-Set题意给定n个条件,如果存在一个合法序列使得这n个判断条件成立,则输出Yes和这个合法序列,否则输出No。分析首先可以发现对于\(w_i=0\)的操作我们可以在处理完\(w_i=1\)的操作之后讨论一下即可。发现\(a_i\)和\(b_i\)很大需要对其进行离散化操作。离......
  • [羊城杯 2020]A Piece Of Java
    发现我java基础不牢,做点老题,多思考思考。打开jar包先看到MainController.class:/index路由设置一个cookie,访问的时候没设置cookie就会重定向到hello路由。这个cookie也就是username和password进行serialize来的,看到下面序列化和反序列化的方法:序列化没什么好说的,反序列化这里......
  • [GYCTF2020]FlaskApp
    [GYCTF2020]FlaskApp打开环境是一个base64编解码的网站提示里是一张图片源码提示PIN尝试输入错误字符看看页面结果,于是在解码页面输入123有源码泄露@app.route('/decode',methods=['POST','GET'])defdecode():ifrequest.values.get('text'):text=r......
  • [BJDCTF2020]EasySearch
    [BJDCTF2020]EasySearch打开环境页面中与源代码没有发现什么有用的信息,通过扫描工具扫描,看看有没有什么有用的文件结果发现无论是dirsearch、dirmap还是御剑,通通扫描不出来什么有用的东西,查了师傅们的WP才知道,这里的文件名是index.php.swp<?php ob_start(); functionget_......
  • P7114 [NOIP2020] 字符串匹配
    P7114[NOIP2020]字符串匹配看到循环部分\(AB\),自然想要去枚举它,并且用哈希。开始想到的是倍增+hash求出最长循环的右端点,复杂度是\(O(n\logn)\),结果不好写,没写出来。我们先思考找到右端点怎么计算贡献。最朴素的,我们再枚举前缀\(ABAB\cdotsAB\),容易预处理出后缀出现奇数......
  • [BJDCTF 2020]YDSneedGirlfriend
    [BJDCTF2020]YDSneedGirlfriendUAF|所谓UAF漏洞是指程序在运行时通过悬空指针(悬空指针是指仍然指向已被释放内存空间的指针)访问已经被释放的内存.bamuwe@bamuwe:~/YDSneedGirlfriend$lddgirlfriendlinux-vdso.so.1(0x00007ffd09fec000)/home/bamuwe/pw......