引子
毕业在即,作为一个21年应届大专生,毕设的工作迫在眉睫啊!!!
工作室老师(我的傲娇领导),给出了我两个选项,
一个可以用docker即时搭建的综合漏洞靶场靶机
一个渗透用的工具合集
给你们怎么选?那必然工具合集啊!搞一个靶机,把什么burp,cs,msf,九头蛇,nmap啥啥的都给装进去了,论文给AI一写,搞定!
但是,我的老师提出了致命任务,需要我自己写一个任意工具。。非常抱歉,我承认我声音大了。
好吧,那就来搭一个综合靶场靶机吧!(感谢我的傲娇领导)
实话说,学渗透2年,各种漏洞挖掘挖的还可以,打打ctf,参加参加hvv(狗头保命)。
真让我做渗透,别管web,内网,溯源了,我还是有点底气。
不过让我搭一个综合性的平台,我还是有点发怵。
在我苦思冥想了很久之后,呵呵,没有任何结果。。
真让我做一个像是知名的,诸如DVWA,sql-labs,这种知名的,大的,厉害的,牛*的,
啊这种漏洞平台,那我是做不到的(我很有自知之明)
所以,咱慢慢来。
(因为是系列开篇,所以可能废话过多,不过我觉得这些话说出来是很有必要的,各位看官见谅!
想看搭建教程的,可以直接跳转至XXX,另外,这也是我的毕设,足有2-3月的时间来做我的毕
设,在这期间如果有人看到我的文章,如果您有什么宝贵的意见或者更好的见解,请随时联系我,
我会尽可能更到我的毕设完成,并且期间的细节全部分享给各位,结束后,我也会把这个开源项目
放出来给大家,万一有大佬感兴趣,给我添一笔,那我真的感激不尽了!好了,各位看
官,我们开始了!在)
思路
1.端口靶机
这个思路呢,来自于我打的比赛,一个IP,比如:
192.168.6.1:1001 192.168.6.1:1002 192.168.6.1:1003 192.168.6.1:1004 ......
这样以此类推,一个端口一个漏洞,或者一个端口一个cms,
这样其实很好,很方便,只要制作或者借鉴开源项目,然后移植到对应端口就可以
但我总觉得不好,先不说这样太过于分类化,一些常见的cms各位都玩的快吐了吧,
然后也没有自己制作漏洞页面的快感,直接去更改。。
实话说,我前端,js,php,数据库学的都半斤八两,看看还行,真让我去改大成的作品,
我怕崩啊!
2.正常靶场
然后就是我现在的思路:
一个首页,然后一堆选项卡,一点就跳到对应的漏洞页面
也就是最寻常的网页靶场,(要不要放一些cve呢?是不是太麻烦?再说吧)
这样的快感与难点是一个,也就是自己制作存在漏洞的页面。比如...
首页制作
首页啊,当然要帅气*人的了!
我想着拿V字仇杀队,又觉得太花哨,想着拿原神这种二次元,又觉得太有病,
(不针对任何xp,如有冒犯,您对)
所以目前只有一个AI写的框架,很简单
(给点建议吧兄弟们,真的,我也想搞华丽点啊!!)
嗯,中间最开始想写一些自己想说的话,对如网络安全的爱好,对现状的分析啊等等,
但我发现我写不了那么多字,想插入点图片,或者一些交互的挺有趣的东西,我也没啥想法,
现在是凌晨1点半,脑子实在没东西,哎,再说吧
sql注入漏洞页面制作
OK!总算来到的技术环节,诸位等急了吧,我告诉你,先别急
众所周知,sql注入来自于不安全的设置导致用户输入的数据拼装在了数据库语句里面,从而操作数据库。
那我们最常见的也就是,登陆页面。来,有请AI!
一个简陋的登陆页面,但是现在不管输入什么,肯定是没有任何反应的。
然后就是我查阅各种资料,借鉴诸位大佬随手的珍宝,和gpt如此的智能(智障)
一个登录验证页面源码,被我拼了出来
(因为不考虑未来做公网环境,不考虑任何除用作毕设和开源的任何用处,所以除个人以外的所有信息全部公开)
这是经过各类试错后的成品,很简单但是很有效吼~
然后在搞一个登陆成功的页面:
(这也是AI写的,一点没动呢,后期我自己美化一下就OK了)
这时候出现一个问题,无论输入什么,就算是正确的也是这样
然后找问题,我就用sql语句添加了n个用户来,也没用
后来忘了在哪看了一个提示,说啥表里没有对应的用户
嘶,之前工作的时候,确实也有一个表专门存储用户名和密码是吧?
再回头仔细读了读登录验证的那个PHP文件
嗯,对,我搞个登录表试试
如此,创建一个user表,然后插入一个数据、
再回头试一试:
用户名:test
密码:123456
OK!
成功!
此时搭建成功了,然后我们进行测试,
burp!启动!!
简单测试
post的sql注入,手注我就是拿burp抓包然后试,再就是sqlmap,别的我还真不知道,大佬有知道
的可以让我学习一下。
如此抓包,在注入点输入万能密码:
‘ or 1=1 --+
此时用户名密码肯定是错的,输入万能密码以后放包,
ok,看页面看回显都已经成功了,那么这个简单的sql注入页面也就可以使用了。回头移植到
Linux上就可以了
现在还不知道基底用什么,网上有推荐wordpress的,也有用小皮Linux版的,我还没想好,
回头我挨个试一下对比对比,lnmap扩展性够好,但我功底属实没有那么优秀。
源码展示
最后展示一下源码吧
test2.php(登陆页面)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login</title> <style> body { font-family: Arial, sans-serif; background-color: #f0f0f0; margin: 0; padding: 0; } .container { width: 300px; margin: 100px auto; background-color: #fff; padding: 20px; border-radius: 5px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); } h2 { text-align: center; margin-bottom: 20px; } .input-group { margin-bottom: 20px; } label { display: block; margin-bottom: 5px; } input[type="text"], input[type="password"] { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 3px; box-sizing: border-box; } button { width: 100%; padding: 10px; background-color: #007bff; color: #fff; border: none; border-radius: 3px; cursor: pointer; } button:hover { background-color: #0056b3; } </style> </head> <body> <div class="container"> <h2>Login</h2> <form action="login2.php" method="post"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <br><br> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <br><br> <button type="submit">Login</button> </form> </div> </body> </html>
login2.php(登陆验证页面)
<?php // 获取POST请求中的用户名和密码 $username = $_POST['username']; $password = $_POST['password']; // 连接到数据库(假设使用MySQL数据库) $conn = mysqli_connect('127.0.0.1', '123', '123456', 'test'); // 构造SQL查询语句 $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'"; // 执行查询 $result = mysqli_query($conn, $sql); // 检查查询结果是否包含匹配的用户 if (mysqli_num_rows($result) > 0) { // 用户存在,登录成功 header('Location: user_home.php');; } else { // 用户不存在,登录失败 echo "Login failed!"; } // 关闭数据库连接 mysqli_close($conn); ?>
登陆成功的页面不给你们了,嫌麻烦的,可以把上面的
header('Location: user_home.php');
改成
echo "login Successful";
ok!,今天搞定。