kali构建PHP_MYSQL

配置Mysql

sudo mysql -u root //第一次可以直接进入
alter user 'root'@'localhost' identified by '123456';
create database usr;

配置PHP

进入目录:cd /etc/php/8.2/apache2

执行:sudo vim +904 php.ini
将这行代码前面的注释去除:extension=mysqli

进入到目录:cd /var/www/html/
创建以下文件:vim TestConn.php
TestConn.php测试文件代码

<?php
// 启用错误报告
error_reporting(E_ALL);
ini_set('display_errors', 1);

// 数据库配置
$servername = "localhost";
$username = "root";
$password = "123456"; // 替换为实际密码,修改密码命令,alter user 'root'@'localhost' identified by '123456';
$dbname = "usr"; // 替换为实际数据库名,需要自己创建,命令,create database usr;

try {
    // 创建连接
    $conn = new mysqli($servername, $username, $password, $dbname);
    // 检查连接
    if ($conn->connect_error) {
        throw new Exception("连接失败: " . $conn->connect_error);
    }
    // 设置字符集
    if (!$conn->set_charset("utf8mb4")) {
        throw new Exception("字符集设置失败: " . $conn->error);
    }
    echo "MySQL连接成功!服务端版本: " . $conn->server_version;
    // 关闭连接
    $conn->close();
} catch (Exception $e) {
    die("数据库错误: " . $e->getMessage());
}
?>

配置apache2服务器

进入目录:cd /etc/apache2/
修改文件:sudo vim +174 apache2.conf
直接添加以下内容


     <Directory "/var/www/html">
         Options Indexes FollowSymLinks
         AllowOverride All
         Require all granted
     </Directory>
     DirectoryIndex index.php index.html:ml-citation{ref="2,3" data="citationList"}

     AddType application/x-httpd-php .php
     AddHandler php7-script .php 

     LoadModule php_module modules/libphp.so

测试

先执行这个DROP掉系统的RST包sudo iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP

from scapy.all import *
import random
import time

target_ip = "127.0.0.1"
target_port = 80
source_port = random.randint(1024, 65535)

ip = IP(dst=target_ip)
syn = ip / TCP(sport=source_port, dport=target_port, flags="S", seq=1000)
syn_ack = sr1(syn, timeout=2, verbose=0)

if not syn_ack or not syn_ack.haslayer(TCP):
    print("未建立TCP连接。")
    exit()

server_seq = syn_ack[TCP].seq
server_ack = syn_ack[TCP].ack

# 第三次握手
ack = ip / TCP(sport=source_port, dport=target_port, flags="A", seq=server_ack, ack=server_seq + 1)
send(ack, verbose=0)

# 构造HTTP请求
http_get = "GET /TestConn.php HTTP/1.1\r\nHost: 127.0.0.1\r\nConnection: close\r\n\r\n"
http_payload = http_get.encode("UTF-8")
get_request = ip / TCP(sport=source_port, dport=target_port, flags="PA", seq=server_ack, ack=server_seq + 1) / http_payload
send(get_request, verbose=0)

# 接收所有响应数据段
response_data = b""
seq = server_ack
timeout = time.time() + 5  # 最多等待5秒

while time.time() < timeout:
    pkt = sniff(filter=f"tcp and src host {target_ip} and port 80", count=1, timeout=1)
    if not pkt:
        continue
    tcp = pkt[0][TCP]
    if tcp.sport == target_port and tcp.dport == source_port and tcp.haslayer(Raw):
        payload = bytes(tcp[Raw].load)
        response_data += payload
        # 发送ACK回执
        ack_pkt = ip / TCP(sport=source_port, dport=target_port, flags="A",
                           seq=tcp.ack, ack=tcp.seq + len(payload))
        send(ack_pkt, verbose=0)

# 打印HTTP响应
#if response_data:
#    print("=== 服务器完整响应内容 ===")
#    try:
#        print(response_data.decode("utf-8", errors="ignore"))
#    except Exception:
#        print(response_data)
#else:
#    print("未接收到HTTP响应数据。")

效果图

浏览器
image

wireshark
image

posted on 2025-10-15 19:29  suiseiseki  阅读(2)  评论(0)    收藏  举报

导航