Skip to content

WEB 网络

HTTP

请求行(Request Line):
- 方法:如 GETPOSTPUTDELETE 等,指定要执行的操作。
- 请求 URI(统一资源标识符):请求的资源路径,通常包括主机名、端口号(如果非默认)、路径和查询字符串。
- HTTP 版本:如 HTTP/1.1HTTP/2
请求行的格式示例:GET /index.html HTTP/1.1

请求头(Request Headers):
- 包含了客户端环境信息、请求体的大小(如果有)、客户端支持的压缩类型等。
- 常见的请求头包括 HostUser-AgentAcceptAccept-EncodingContent-Length 等。

空行:
- 请求头和请求体之间的分隔符,表示请求头的结束。

请求体(可选):
- 在某些类型的 HTTP 请求(如 POST 和 PUT)中,请求体包含要发送给服务器的数据。

HTTP 响应报文也由三部分组成,分别是:状态行、响应头、响应体

信息收集

netdiscover

sudo netdiscover -r 192.168.100.0/24
/24 代表扫描 192.168.100.x
-i eth1 指定网卡,不指定默认 ifconfig 第一个

nmap

nmap -O IP 探测操作系统
nmap IP 扫描 IP
nmap -sV IP 扫描各个服务的版本

-e eth1 指定网卡

dirsearch

dirsearch 用于扫描目标网站上的隐藏目录和隐藏文件,它使用字典文件中的单词构建 url,然后发送 http 请求检查路径是否存在
dirsearch -u <url>
如果返回 429,代表访问过快,可以 dirsearch -u <url> -t 1 --delay 0.1
-t 代表线程数
--delay 代表访问之间的延迟

GitHack

.git 文件夹部署到线上环境,含有敏感信息
git clone https://github.com/lijiejie/GitHack.git
python GitHack.py http://www.example.com/.git/
原理为根据解析的 .git/index 文件,下载 .git/objects/ 文件夹下的内容后按原始目录结构写入源代码

Burp Suite

Burp Suite -> Proxy -> Proxy Settings 设置监听端口号,在浏览器中设置代理
HTTP 协议常见的考点是,修改 HTTP 头符合某种条件。要求从某个主机访问,一般修改 X-Forwarded-For X-Real-IP X-Forwarded-Host CLIENT-IP host 参数的值,要求从某个国家访问修改 Accept-Language ,要求从某个页面修改 referer ,有关身份认证类的修改 cookie
右键某个请求之后发送到 Repeater ,在 Repeater 尝试

搜索语法

使用 intitle: site: inurl: intext: filetype: 等关键字搜索敏感内容
还可以利用 shodan.io fofa.info 搜索网络资产

暴力破解

使用 Burp Suite 拦截请求,然后发送到 Intruder ,在 Positions 中选择要爆破的字段,设置 Payloads 中的内容,Payloads typeSimple list 可以加载自己的字典,开始攻击后可以根据 Length 的排序筛选
Attack type 有四种,Sniper 是狙击手模式,可以设置单个标记,Battering ram 是攻城锤模式,可以选择两个或多个标记,标记的位置都是用同一个字典值爆破,Pitchfork 是草叉模式,可以设置多个标记,可以通过选择 Payload set 来设置不同字段值的字典,两个字典值中的内容是一一对应的关系,按照长度少的字典中条目数来发送请求,Cluster bomb 集束炸弹模式,会分别遍历不同字段的字典爆破,总请求数是字典条目数的乘积

SQL 注入

SQL 注入攻击

万能密码

验证登录语句

$sql = "SELECT * FROM admin WHERE Username='".$username."' AND Password='".md5($password)."'"
SQL 语句中 = 优先于 NOT 优先于 AND 优先于 OR
用户名已知:
- 用户名:admin 密码:1' or '1'='1
- 用户名:admin' or '1'='1 密码:任意

第一种情况如果有 md5 加密则无效
第二种情况得到的语句是 SELECT * FROM admin WHERE Username='admin' or '1'='1' AND Password='password'
由于 AND 优先于 OR'1'='1' AND Password='password' 为假与 Username='admin'OR 连接,因此能返回 Username=‘admin' 的记录
- 用户名:admin'# 密码:任意

SELECT * FROM admin WHERE Username='admin'#' AND Password='password'
其中 # 代表注释

文件上传

文件上传漏洞靶场

前端绕过
修改 javascript 源码,或者可以上传其他后缀名的文件,然后使用 Burp Suite 拦截修改 filename
MIME 绕过
后端校验 MIME 类型,Burp Suite 修改 Content-Type
文件后缀检测绕过
如果对 .php 等后缀有限制,可以尝试上传 .phtml.php3 文件,Apache 服务器也可以使用 PHP 解析
对文件类型限制更多,对于 Apache 服务器,可以使用 .htaccess 文件覆盖某些规则,使服务器把 jpg 文件作为 php 文件解析,首先上传 .htaccess,内容如下:

<FilesMatch "webshell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
还可以:
- 尝试把文件后缀名改成大写
- 尝试文件名首尾加空格(仅限 Windows)
- 文件名末尾加 .(仅限 Windows 服务器)
- 文件名末尾加 ::$DATA (仅限 Windows)
- Apache 解析文件从右往左判断,如果不可识别解析再往左判断,如 a.php.owf.rar,Apache 不能解析 .owf.rar 这两种后缀,会解析成 .php 文件
- 白名单策略,文件扩展名在白名单为合法,服务端判断文件类型从后往前判断,而对文件解析是从前往后解析,可以利用 00截断,首先是 %00 截断,url 发送到服务器被解码,还未传输到验证函数,%00 会被解码成 0x00,例如文件名 test.php%00.png,第二种是 0x00截断 系统在对文件名读取时,如果遇到 0x00(指 ASCII 码为 0 的字符),就会认为读取已经结束,可以在 Burp Suite 里使用 16 进制模式编辑文件名,具体先在需要 0x00 的地方输入空格,然后把 0x20 改成 0x00
文件内容检测绕过
第一种是通过检测文件头来判断,可以通过添加文件头绕过,常用的 jpg 文件文件开头可以写 FF D8 FF E0 00 10 4A 46 49 46,gif 文件可以写 47 49 46 38 39 61,对应的 ASCII 值为 GIF89a,第二种是调用 api 或函数对文件进行加载测试,常见的是图像渲染测试,可以对一张图片进行代码注入,不破坏渲染结果的情况下找到空白区填充代码可以绕过渲染测试,如果是二次渲染(就是提取了图像数据再渲染,隔离了非图像数据部分),可以使用溢出攻击攻击文件加载器

Web 解析漏洞

Apache

Apache 从右到左判断解析,如果后缀名不可识别,就再往左判断,如 test.php.asd.fgh,Apache 会解析成 test.php

IIS 6.0

目录解析
形式:www.xxx.com/xxxx.asp/xxx.jpg,服务器默认把 .asp 目录下的文件解析成 asp 文件
文件解析
文件名为 test.asp;jpg,服务器默认不解析分号后的内容,因此会解析成 asp 文件

IIS 7.0

对于任意文件在 URL 后追加 /任意字符串.php 就会按照 php 方式解析

Nginx

任意文件名后追加 /任意字符串.php 按照 php 方式解析
任意文件名后面追加 %00.php 按照 php 解析(Nginx 版本 <= 0.8.37 空字节代码执行漏洞)

WebShell

PHP WebShell

GET 方式:

<?php eval($_GET['cmd']); ?>
POST 方式:
<?php eval($_POST['cmd']); ?>
上传到服务器后,可以通过 中国菜刀 中国蚁剑 等工具连接