金九银十求职必备 Web安全常见面试问题

OSI七层模型和HTTP请求

OSI 物理层-数据链路层-网络层-传输层-会话层-表示层-应用层

五层协议 物理层-数据链路层-网络层-传输层-应用层

HTTP请求类型:

  • GET 请求的数据在url头

  • POST 请求的数据在请求体

  • PUT 更新资源

  • DELETE 删除

  • CONNECT http/1.1协议中预留给能将连接改为管道方式的代理服务器

  • OPTIONS 描述目标资源的通信选项

  • TRACE 回显服务器收到的请求,主要用于测试或诊断

  • PATCH PUT请求会替换掉目标资源的全部内容,而PATCH请求则只修改部分内容。PATCH请求也是HTTP/1.1中新增的方法。

如果qq微信可以使用但是打不开网页是哪里出了问题

一般是.DNS服务器出了问题

  1. ping 127.0.0.1,排查本机 TCP/IP 协议是否正常;

  2. ping 本机IP 排查网卡或网卡驱动是否正常;

  3. ping 同网段IP,排查交换机端口工作模式、vlan划分

  4. ping 通网段网关;排查主机到本地网络是否正常;

  5. ping 公网IP 排查路由是否正常;

XSS

1. 原理

XSS是被动攻击

跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS漏洞通常是通过PHP的输出函数将Javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。常见输出函数

  1. HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,<title>与</title>之间的字符是页面的标题等等。当**动态页面**中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。

echo printf printprint_r sprintf dievar-dump var_export

2. 2.分类

(1)反射型 经过后端,不经过数据库 一般出现在留言板,用户发帖回帖

(2)存储型 经过后端的同时经过数据库 一般出现在url 、搜索框,也可能出现在GET、POST参数中

(3)DOM型 基于DOM文档对象模型的一种XSS,不与后台服务器产生数据交互,通过前端的dom节点形成的xss漏洞

3. 3.常见的XSSplaylod构造及绕过

反射型

(1)无过滤<script>alert(1)</script>

(2)双写绕过<sc<script>alert(1)</script>

(3)大小写绕过<ScRIpt>alert(1)</sCriPt>

(4)<img>绕过,过滤了script,<><img src=1onerror=alert(1)

对一个登录框怎么进行渗透测试

  • 尝试弱口令

  • sql注入

  • 观察有没有用户注册或者密码重置

  • 先挖web漏洞,再暴力破解

常见逻辑漏洞

验证码漏洞
  1. 验证码重复使用

  2. 验证码绕过

  3. 验证码回显

  4. 验证码自动识别

越权漏洞
  • 垂直越权:用户可以访问或操作权限比自己高的账户

  • 水平越权:用户可以访问或操作权限和自己一样的其他账户

密码漏洞

密码更改漏洞:不验证旧密码就可以改密码

密码重置漏洞:验证逻辑不严格

支付漏洞

修改支付金额

越权支付

支付接口漏洞

常见的爬虫库

requests发送http请求

beautifulsoup或者lxml用于解析html

import requests
from bs4 import BeautifulSoup

def fetch_webpage_title(url):
    """
    从指定URL抓取网页的标题
    """
    try:
        # 发送HTTP GET请求
        response = requests.get(url)

        # 检查请求是否成功
        if response.status_code == 200:
            # 使用BeautifulSoup解析HTML内容
            soup = BeautifulSoup(response.text, 'html.parser')

            # 查找并返回<title>标签的内容
            title = soup.title.string
            return title
        else:
            return f"Failed to retrieve content (HTTP {response.status_code})"
    except requests.RequestException as e:
        return f"Network request failed: {e}"

# 示例URL
url = "https://www.example.com"

# 调用函数并打印结果
title = fetch_webpage_title(url)
print(title)

一般网站渗透测试流程

1、信息收集
        a、服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)
        b、网站指纹识别(包括,cms,cdn,证书等),dns记录
        c、whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
        e、子域名收集,旁站,C段等
        f、google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等
        g、扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等
        h、传输协议,通用漏洞,exp,github源码等
2、漏洞挖掘
a、浏览网站,看看网站规模,功能,特点等
b、端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。
c、XSS,SQL注入,上传,命令注入,CSRF,cookie安全检测,敏感信息,通信数据传输,暴力破解,
任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等
3、漏洞利用&权限提升
a、mysql提权,serv-u提权,oracle提权
        b、windows 溢出提权
        c、linux脏牛,内核漏洞提权e
4、清除测试数据&输出报告
        日志、测试数据的清理
        总结,输出渗透测试报告,附修复方案
5、复测
        验证并发现是否有新漏洞,输出报告,归档

内网渗透流程

1. 信息收集

 首先,对服务器资产信息进行收集,了解哪些ip是存活的,存活的ip开放了哪些端口,以及端口所对应的服务。

推荐工具:F-NAScan

2. 弱口令检测
   在这些服务器开放的端口服务中,主要服务由为系统服务、数据库服务、web服务。对常见的端口服务进行弱口令检测是非常有必要的。


常见系统服务弱口令:

1、IPC$、SSH、Telnet等弱口令,基本上等于拿到了系统权限了

2、MSSQL数据库SA弱口令可直接调用存储过程执行系统命令

3、mysql数据库root弱口令,可尝试udf直接提权,mysql5.1以上版本关键的第一步是否能创建plugin目录,默认一般是不存在的。

弱口令--提权--读取缓存密码

常见Web常见应用端口服务:

1、WebLogic 默认端口:7001 弱口令,console后台部署webshell Java反序列化

2、Tomcat 默认端口:8080 弱口令,manager后台部署war包上传

3、jboss   默认端口:8080 弱口令,未授权访问,java反序列化

以某系统开放的Tomcat服务为例,其IP地址为192.1.33.133:8080。通过iscan的弱口令检测,发现Tomcat存在弱口令,直接使用弱口令可以成功登录Tomcat控制台,如图所示。

NAT协议

地址复用:共享公共ip

地址隐藏:外部网络只能看到NAT设备的公网ip,而无法直接看到访问内部网络的私有IP

简化网络管理

负载均衡

透明代理

ARP协议和ARP欺骗

arp协议作用是将ip地址转换为mac地址

arp欺骗原理

攻击者发送伪造的ARP报文,使得受害者的计算机将攻击者的MAC地址误认为是网关或者目标主机的MAC地址。这样,所有原本应该发送给目标主机或网关的数据包都会被转发到攻击者的计算机上,从而实现窃取、篡改或假冒身份等恶意行为。

一般步骤
  1. 扫描网络:攻击者首先会扫描网络中的IP地址和MAC地址,以了解网络拓扑结构和设备信息。

  2. 构造伪造ARP报文:攻击者根据扫描结果,构造伪造的ARP报文。这些报文中包含网络中其他设备的IP地址和攻击者自己的MAC地址。

  3. 发送伪造ARP报文:攻击者将伪造的ARP报文发送到网络中,以广播或单播的方式发送给目标设备或网关。

  4. 更新ARP缓存:当目标设备或网关接收到伪造的ARP报文后,会更新其ARP缓存表,将攻击者的MAC地址与目标IP地址关联起来。

  5. 截获数据包:之后,目标设备或网关在发送数据包时,会根据更新后的ARP缓存表将数据包发送到攻击者的计算机上,而不是真正的目标设备或网关。

防范措施

使用静态ARP缓存:将目标主机的IP地址和MAC地址添加到静态ARP缓存中,以防止ARP缓存被恶意修改。

IP与MAC地址绑定:在路由器、交换机等网络设备上配置IP与MAC地址的绑定,确保数据包只能发送到指定的MAC地址。

使用ARP防御工具:部署ARP防火墙等防御工具,实时监测和阻止ARP欺骗攻击。

定期更新和修补系统:及时更新操作系统和应用程序的安全补丁,修补已知的漏洞。

使用加密协议:通过使用HTTPS、SSL/TLS等加密协议来保护传输的数据,防止数据被窃取或篡改。

IP协议

无连接不可靠

ipv6
 

图片



ipv4
 

图片


 

TCP协议

面向连接,面向字节流,可靠,协议号6,传输层

TCP适用于对数据完整性要求较高的应用场景,如HTTP、FTP、SMTP等协议,以及文件传输、网页浏览等需要可靠传输的服务。

报文格式


 

图片


PSH,RST,SYN,FIN。

URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促 中间层设备要尽快处理这些数据;

ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1, 为1的时候表示应答域有效,反之为0;

PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序, 而不是在缓冲区中排队;

RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;

SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1, ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送 一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这 种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全 的主机将会强制要求一个连接严格的进行TCP的三次握手;

三次握手


 

图片


第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认。(客户的建立连接并等待确认)


第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态。(服务器端发送相关报文段信息并等待连接)


第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。(客户的接收到服务端信息并实现连接)

然后就可进行数据传输

四次挥手

第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了。(一方数据发送完成)

第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我也没有数据要发送了,可以进行关闭连接了。(另一方数据发送完成)

第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态。(请求关闭连接并等待)

第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。(关闭连接)

UDP

无连接,不可靠,面向报文,协议号17

无连接指的是:UDP传输知道对应的IP和端口号就可以直接进行传输,不需要建立连接。

UDP只有接收缓冲区,没有发送缓冲区

无法传输较大的数据

报文格式

图片

TCPUDP区别

特点 TCP UDP

面向连接/无连接 面向连接 无连接

可靠性 提供可靠的数据传输服务 不提供可靠性保证

流量控制和拥塞控制 有 无

面向字节流/面向报文 面向字节流 面向报文

传输速度 相对较慢(由于需要确认和重传机制) 相对较快(由于没有确认和重传机制)

适用场景 对数据完整性要求较高的应用场景(如HTTP、FTP、SMTP等) 对实时性要求较高的应用场景(如VoIP、视频会议、网络游戏等)

DNS协议

UDP53

域名解析服务

windows路径 C:\Windows\System32\drivers\etc\hosts

linux路径 /etc/hosts

解析方式 迭代 递归

PKI

公钥基础设施

PKI是一个安全框架和体系结构,用于建立、管理和分发公钥,并提供安全和可信赖的通信和数据传输。它是基于非对称加密算法的一种广泛应用的加密技术框架,通过数字证书和证书颁发机构(Certificate Authority, CA)来实现身份验证和信任。

图片

(1)身份验证:你的信封上会附上你的身份信息,这样收信人可以确认你是合法的发件人。(类似地,PKI为参与通信的人提供CA机构颁发的数字证书,用于证明其身份的可信性。)


(2)加密通信:邮局会将你信封中的信件加密,只有收件人可以解开。(使用PKI的非对称加密算法,通信中的数据也会被加密,只有合法的接收方能够解密内容。)


(3)数字签名:邮局会在信封上盖上你的名字,在收信人那里验证你的真实性。(使用PKI的数字签名,可以对通信数据进行签名,以确保通信内容在传输过程中没有被篡改。)

反序列化漏洞

1. 序列化与反序列化过程

序列化:将对象转换为字节流的过程,以便可以将其保存到文件、数据库或通过网络传输。

反序列化:将这些字节流重新构造成原始对象的过程。

2. 漏洞产生原因

当应用程序反序列化来自不可信源的数据时,如果没有适当的验证和安全措施,攻击者可以操纵这些数据来执行恶意代码。

信任外部输入:应用程序盲目信任外部输入的数据进行反序列化。

缺乏输入验证:缺乏对反序列化数据的严格验证和清洁化。

使用不安全的库或方法:使用存在已知漏洞的序列化/反序列化库。

反序列化漏洞利用方式

1. 执行远程代码

通过远程对象序列化,攻击者可以执行本地计算机上的远程代码。

2. 扫描端口

攻击者可以使用这种漏洞扫描应用程序依赖的其他系统和服务的端口。

3. 向数据库添加恶意查询

攻击者可以通过向会话添加受控查询来更改数据库的状态。

4. 修改访问控制

攻击者可以通过修改应用程序的授权和身份验证来更改访问控制策略。

具体利用方法(以PHP为例)

__wakeup()绕过:在PHP中,反序列化时如果表示对象属性个数的值大于真实的属性个数,就会跳过__wakeup()方法的执行。攻击者可以利用这一点绕过某些安全限制。

Session漏洞:PHP中的Session经序列化后存储,读取时再进行反序列化。如果Session数据没有被适当保护,攻击者可以注入恶意数据到Session中,并在用户下次会话时执行恶意代码。

PHAR利用:PHAR是PHP里类似于JAR的一种打包文件,在PHP 5.3或更高版本中默认开启。攻击者可以创建包含恶意代码的PHAR文件,并通过反序列化漏洞在目标系统上执行这些代码。

防御措施

避免使用不安全的序列化方法:使用更安全的序列化方法,如JSON或XML,这些格式不容易受到此类攻击。

输入验证:对反序列化的数据进行严格的输入验证,确保数据的安全性。

使用白名单:只允许特定的类进行反序列化,避免接受处理任何未授权的类。

最小化使用:尽量减少序列化和反序列化的使用,降低漏洞风险。

权限最小化:确保应用程序以最小的必要权限运行,限制恶意代码可能造成的损害。

代码审计:对代码进行安全审计,查找和修复潜在的反序列化问题。

使用安全配置:使用安全配置选项来限制反序列化操作。


常见漏洞 shiro反序列化 weblogic反序列化漏洞

LINUX 用户密码存放位置

/etc/passwd和/etc/shadow

常见渗透测试工具

Burpsuite:针对请求进行抓包改包等操作,可以对前端参数进行进一步测试,如测试逻辑漏洞,爆破弱口令,寻找页面传参点等


Sqlmap:可以检测或者注入后台数据库为关系型数据库的站点,还可以访问文件系统,使用-file-read “xxx.txt”来读取目标目录下xxx.txt文件,更可以使用-os-cmd执行操作系统命令,-os-shell使用交互的操作系统shell,功能十分强大,其丰富的tamper也为绕过一些waf提供了很大的帮助。当然大部分情况下还是要手动判断waf规则的。


御剑:很优秀的目标扫描工具,在一次真实的场景中,我通过御剑扫描得到了对方的数据库文件,看到了数据库ip,port及账号口令,直接连接数据库后,所有我想要的已经呈现在我面前了。


Mimikatz:抓取当前系统中所有用户的明文密码。在提权的时候可能会使用Owasp Zap/AWVS:漏洞扫描工具,我个人是不怎么喜欢用漏扫的,在不摸清楚对方情况的条件上直接使用漏扫,很可能导致ip被ban,而且参加过一些众测的项目,很多白帽子使用漏扫对目标展开疯狂的扫描,导致目标连正常访问都有问题,有点反感这些操作。但漏扫工具在一定程度上也会让我们大概了解目标的信息,如路径,可能存在的漏洞等,以免我们遗漏了某些点


Namp/masscan:目标开放服务扫描,弱点端口扫描,操作系统辨识,属于信息收集。如-p指定端口,-sV识别服务版本,-O识别操作系统,-sS(不建立三次握手的隐式扫描),sT(TCP扫描,信息相对准确),对于禁ping的站点可以用-Pn等,另外nmap强大的脚本也可以提供多种方式,如dos(可能造成拒绝服务),exploit(检测安全漏洞)。相比较来说,masscan在扫描上速度更快,效果更好一些(个人认为),所以可以两者配合使用,masscan快速扫出端口,nmap通过这些端口再去识别服务。

HTTP协议

80

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有**GET、HEAD、POST**。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。


2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。


3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。


4.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

5、支持B/S及C/S模式。


字段:host,referer,orgin,content-type,accept-lnguage,accept-encoding,connection,if-modified-since,cookie,xff,user-agent,请求方法。。。


referer是你想要访问的url,xff是你从哪里来,显示ip地址,referer也是显示从哪里来,显示url。


xff是告诉服务器当前请求者的最终ip的http请求头字段

通常可以直接通过修改http头中的X-Forwarded-For字段来仿造请求的最终ip


referer就是告诉服务器当前访问者是从哪个url地址跳转到自己的,跟xff一样,referer也可直接修改

HTTPS

443 加密,SSL/TLS

HTTPS的工作原理主要包括以下几个步骤:


建立SSL连接:客户端通过HTTPS的URL访问服务器,要求与服务器建立SSL连接。

证书验证:服务器将网站的SSL证书(包含公钥)发送给客户端,客户端验证证书的有效性。

密钥交换:客户端和服务器通过公钥加密技术交换密钥信息,生成会话密钥。

加密通信:使用会话密钥加密客户端和服务器之间的通信数据,确保数据传输的安全性。

OWAS TOP10 2023

1.对象级别授权失效(水平越权)

2.失效的身份认证

3.对象属性级别授权失效

4.资源消耗无限制 DDOS

5.功能级授权失效(垂直越权)

6.访问敏感业务流无限制 撞库 爬虫

7.服务器端请求伪造 SSRF

SSRF

SSRF漏洞成因:

(1)服务端提供了从其他服务器应用获取数据的功能;

(2)服务端对目标地址做过滤与限制 。

攻击目标:一般情况下 , SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。

端口扫描(扫描内网)

攻击Web应用进行指纹识别及其中的漏洞 工具whatweb;wafw00f

8.安全配置错误

9.库存管理不当

10.API不安全使用

WAF

web应用防火墙

WAF可以通过对Web应用程序的流量进行过滤和监控,识别并阻止潜在的安全威胁。WAF可以检测Web应用程序中的各种攻击,例如SQL注入、跨站点脚本攻击(XSS)、跨站请求伪造(CSRF)等,并采取相应的措施,例如拦截请求、阻止访问、记录事件等。

WAF的工作原理通常包括以下几个步骤:

流量识别:WAF识别来自客户端的请求,并对请求进行分析。WAF可以检查请求头、请求体、Cookie、URL参数等信息,并识别其中的攻击。

攻击检测:WAF对识别的请求进行攻击检测。WAF可以使用多种技术来检测攻击,例如正则表达式、特征匹配、行为分析等。WAF可以检测多种攻击,包括SQL注入、XSS、CSRF、命令注入等。

攻击响应:WAF根据检测结果采取相应的措施,例如拦截请求、阻止访问、记录事件等。WAF可以使用多种技术来响应攻击,例如重定向、报错、拦截等。

日志记录:WAF记录所有请求和响应的详细信息,包括请求头、请求体、响应头、响应体等。WAF可以将日志发送给中央日志管理系统,以便进行分析和审计。

IDS和IPS

IDS入侵检测系统 是被动的;通过监视网络或系统资源,寻找违反安全策略的行为或攻击

IPS入侵防御系统,是主动的;通过直接嵌入到网络流量中,利用一个网络端口接收外部流量,经过检查确认其中不包含异常活动或可疑内容,再通过另一个端口转发给内部系统(实际是对恶意流量进行清洗)。

IDS基本原理:

1、IDS分为实时入侵检测和事后入侵检测:

#1 实时入侵检测:在网络连接过程中进行,发现入侵迹象立即断开当前连接,并收集证据和实施数据恢复。

#2 事后入侵检测:由安全人员进行检测。

2、入侵检测分类:

#1 基于网络:通过连接在网络的站点捕获数据包,分析是否具有已知攻击模式。

#2 基于主机:通过分析系统审计数据来发现可疑活动,比如内存和文件的变化;输入数据只要来源于系统日志。

3、入侵检测技术途径:

#1 信息收集:系统日志、目录以及文件的异常改变、程序执行中的异常行为、物理形式的入侵信息

#2 数据分析:

IPS基本原理:

1、IPS拥有众多的过滤器,能够防止各种攻击;IPS检查2-7层,逐一字节进行检查。

2、IPS分类:

#1 基于主机的入侵防护(HIPS):通过在主机/服务器安装软件代理程序,防止网络攻击入侵操作系统以及应用程序。

#2 基于网络的入侵防护(NIPS):通过检测流经的网络流量,对网络系统提供安全防护。

防火墙

作用

区域隔离,访问控制,路由交换,VPN,攻击防护,日志记录

CSRF

原理

跨站请求伪造是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会觉得这是真正的用户操作而去运行。

常见的防御 CSRF 的手段

许多现代应用程序会在请求中包含 CSRF 令牌来防御此类攻击。可以检查以下几个方面:

  • 令牌验证:查看是否所有修改用户数据的请求都包含了 CSRF 令牌。通常,CSRF 令牌是一个随机生成的值,它会被包含在请求中(通常是请求头或请求体中)。

  • 表单中的隐藏字段:在 HTML 表单中查找是否存在**csrf\_token**之类的隐藏字段。

  • 请求头中的令牌:某些应用程序会使用自定义请求头(如**X-CSRF-Token**)来传递 CSRF 令牌。

  • 使用**SameSite**属性:为 Cookies 设置**SameSite**属性,以限制跨站请求的能力。

  • 验证 Referer 头:检查 HTTP 请求中的 Referer 头,确保请求来源于可信的页面。

知道上面原理及防御以后就可以测试一下

如果怀疑一个功能点可能存在 CSRF 漏洞并且没有做防御,可以进行以下测试:

执行修改操作,进行抓包,用 bp 生成一个 poc 来伪造请求(将BP抓取到的数据包转至Repeater,然后在Repeater界面 “右键—>Engagement tools—>Generate CSRF POC”,即可生成POC)。这个页面可以包含针对目标应用的请求,尝试用不同的请求方法(如POSTGET)来验证是否能成功执行操作。

仔细想一下,csrf 攻击中黑客的网站是如何利用用户已登录网站的 cookie 呢?不是有同源策略限制吗?

  • 当用户登录到一个网站(比如https://example.com),服务器会在用户的浏览器中设置一个或多个 Cookies,这些 Cookies 通常用于保持用户的会话状态,如session_id

  • 浏览器会将这些 Cookies 存储在本地,并在后续对https://example.com的请求中自动附加这些 Cookies。

  • 这是浏览器的默认行为,用于在用户与特定网站之间进行会话管理。

  • 当用户在登录状态下访问恶意网站(如http://malicious.com),恶意网站可以在其页面上包含恶意请求(如通过隐藏的表单或 JavaScript),指向目标网站(https://example.com)。

  • 当恶意网站发起这样的请求时,浏览器会自动将与目标网站相关的 Cookies(例如session_id)附加到这个请求中。

  • 跨站 Cookies:Cookies 是按域名隔离的,这意味着http://malicious.com不能直接访问https://example.com的 Cookies。但是,浏览器会自动处理与请求相关的 Cookies。因此,恶意网站不能直接查看或提取 Cookies,但会自动将与请求匹配的 Cookies 附加到请求中。

  • Cookies 的域限制:Cookies 的域属性决定了哪些域可以访问该 Cookie。虽然 Cookies 不能被跨站读取,但它们会随着请求自动发送到匹配的域。(该处主要针对的是跨域资源,samesite不同属性决定了访问哪些资源携带cookie 哪些资源不携带cokie 本质是资源的区别(a img))

SQL注入怎么getshell

一. into outfile
利用条件

1.先决条件

  • web目录具有写权限,能够使用单引号

  • 知道网站绝对路径(根目录,或者是根目录往下的目录都行)

  • secure_file _priv没有具体值(在mysql/my.ini查看)

2.secure_file _priv

secure_file _priv是MySQL服务器系统变量之一,用于限制load data infile、SELECT ... INTO OUTFILE 和 LOAD_FILE() 函数可以访问的文件系统路径。这个变量的目的是增加数据库服务器的安全性,通过限制这些功能可以访问的文件位置,来防止潜在的恶意文件访问或数据泄露。

  • secure_file _priv默认值为空(""),表示这些功能不受限制,可以在服务器的任何路径下读写文件。

  • 如果secure_file _priv被设置为一个具体的目录(如/var/lib/mysql-files/),则LOAD DATA INFILE、SELECT ...INTO OUTFILE和LOAD_FILE()函数只能访问或写入该目录下的文件。

  • 如果secure_file _priv被设置为'NULL',这些功能将被禁用

  • 查看secure_file _priv

show global variables like '%secure%';

设置secure_file _priv

  1. 在mysql配置文件中设置:

[mysqld]
secure_file _priv='';
  1. 运行时设置:

SET GLOBAL secure_file _priv='';


写入一句话木马

二.--os-shell

--os--shell是SQLmap中的一个参数,用于在成功注入数据库后执行操作系统命令并获取其输出。

原理

依赖数据库sql注入漏洞和数据库的文件操作功能,利用into...outfile或者类似的语句将恶意代码写入服务器的文件系统。一般向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件。

具体来说,SQLMap会执行以下步骤:

  1. 注入SQL语句:SQLMap首先通过SQL注入漏洞注入一个SQL语句,该语句利用 INTO OUTFILE 或其他文件写入功能,在服务器上创建一个PHP文件。这个文件通常包含用于上传和执行其他文件的代码。

  2. 上传执行文件:通过第一步创建的PHP文件,SQLMap可以上传另一个PHP文件到服务器。这个新文件包含执行操作系统命令的代码。

  3. 执行命令:一旦上传了包含命令执行代码的文件,SQLMap就可以通过HTTP请求触发该文件,执行操作系统命令,并获取命令的输出。

先决条件

  • 要求为数据库DBA,使用--is-dba查看当前网站连接数据库账号是否为mysql user表中的管理员如root,是则为dba

  • secure_file_priv没有具体值

  • 知道网站绝对路径

猜你喜欢

转载自blog.csdn.net/MachineGunJoe/article/details/142789926