第六天作业

一、总结CSRF和XSS区别

1. 攻击原理不同

  • CSRF(Cross-Site Request Forgery):

    • 攻击者诱使受害者在已经认证的情况下,执行一个不知情的请求。例如,攻击者可以通过伪造的表单或链接,利用受害者的登录状态,向目标网站发送恶意请求。
    • 攻击依赖于受害者的认证信息(如Cookies)被不正确使用。
  • XSS(Cross-Site Scripting)

    • 攻击者将恶意脚本注入到网页中,当其他用户访问该网页时,脚本会在他们的浏览器中执行。攻击者可以通过脚本窃取用户信息、劫持会话等。
    • 攻击利用了网站对用户输入的不足过滤或转义,导致恶意脚本被注入并执行。

2. 攻击目标不同

  • CSRF:

    • 主要目标是利用用户的认证信息,伪造用户的请求来执行未经授权的操作,如更改用户设置或发起资金转账等。
  • XSS:

    • 主要目标是操控网页内容或从用户那里窃取敏感数据,例如Cookies、会话标识符等。

3. 防御措施不同

  • CSRF:

    • 使用CSRF令牌:在请求中包含一个随机生成的令牌,服务器验证这个令牌以确保请求是合法的。
    • 使用SameSite Cookie属性:设置Cookies的SameSite属性,以限制跨站请求的发送。
  • XSS

    • 对用户输入进行严格的过滤和转义:确保所有动态内容都经过适当的处理,防止恶意脚本被注入。
    • 使用内容安全策略(CSP):定义允许哪些源的资源可以加载,从而限制恶意脚本的执行。

4. 利用场景不同

  • CSRF:

    • 通常用于操作性攻击,例如未授权的状态更改、交易等。
  • XSS:

    • 常用于窃取信息、篡改页面内容、执行恶意操作等。

二、总结CSRF攻击步骤

1. 选择目标

  • 攻击者选择一个具有用户认证功能的网站作为攻击目标。通常是用户已经登录并且拥有一定权限的网站(例如,在线银行、社交媒体等)。

2. 构造恶意请求

  • 攻击者构造一个恶意请求,该请求会对目标网站执行一些不希望用户进行的操作。这些操作通常是对用户有权限的敏感操作,比如转账、修改账户信息等。

3. 嵌入恶意请求

  • 攻击者将构造的恶意请求嵌入到一个网页或电子邮件中。常见的嵌入方式包括:
    • HTML表单:创建一个提交恶意操作的表单。
    • 图片标签:利用<img>标签的src属性发起请求。
    • JavaScript:利用<script>标签或其他JavaScript方法发送请求。
    • 链接:利用<a>标签的href属性发起请求。

4. 诱导受害者访问

  • 攻击者诱使目标用户访问恶意网页或点击恶意链接。这可以通过各种方式实现,例如发送钓鱼邮件、利用社交工程学等手段。

5. 执行恶意请求

  • 当受害者在目标网站上登录并访问了恶意网页时,浏览器会自动附带用户的认证信息(如Cookies)来发送请求。由于请求看起来是由合法用户发出的,目标网站会按照请求内容执行操作。

6. 观察效果

  • 攻击者观察请求的效果。如果攻击成功,受害者的账户或数据会被篡改,攻击者可能会获得非法利益或破坏目标用户的设置。

三、总结CSRF手工构造POST型页面方法

  1. 了解目标请求

    • 确定需要伪造的POST请求的URL、请求参数和请求方法。
    • 通过浏览器的开发者工具或网络抓包工具(如Fiddler、Burp Suite等)查看正常请求的详细信息。
  2. 构造HTML页面

    • 创建一个HTML文件,使用<form>标签来模拟目标请求。
    • 设置form标签的action属性为目标URL,method属性为POST
    • 根据目标请求的需要,添加隐藏字段(<input type="hidden">)以匹配请求参数。
    <!DOCTYPE html>
    <html>
    <head>
        <title>CSRF Attack</title>
    </head>
    <body>
        <form action="http://targetsite.com/submit" method="POST">
            <input type="hidden" name="param1" value="value1">
            <input type="hidden" name="param2" value="value2">
            <!-- 添加更多字段以匹配目标请求 -->
            <input type="submit" value="Submit">
        </form>
        <script>
            // 自动提交表单
            document.forms[0].submit();
        </script>
    </body>
    </html>
    
  3. 测试和验证

    • 将构造好的HTML文件放在可以访问的服务器上,或者直接在本地打开(如果浏览器允许)。
    • 确保当用户访问这个页面时,表单会自动提交,并且请求能够成功地伪造给目标网站。
  4. 避免被检测

    • 使用真实的表单字段名称和值,以尽可能模拟真实的请求。
    • 确保页面在加载时能够自动提交,以减少被用户察觉的机会。

四、说明token类CSRF利用方法

1、利用bp抓包和插件窃取Token(以pikachu靶场为例)

1.1、在burpsuite的插件扩展上安装CSRF Token Tracker扩展并启用。

1.2、在CSRF Token Tracker上进行以下配置。

1.3、在pikachu的CSRF(Token)的修改个人信息页面进行抓包,并把请求包发送到重放模块。

1.4、此时在 CSRF Token Tracker插件上得到Token。

1.5、在重放模块修改表单值,如sex栏0修改为boy,phonenum栏10086修改为111111,然后点击“跟随重定向”按钮,一直点击“发送”。

1.6、然后放包,可以看到页面信息已经按照我们的意愿改变。

2、 Token缺失

如果目标应用在某些情况下没有检查CSRF Token,攻击者可能会利用这种漏洞进行攻击。例如,有些页面可能不要求CSRF Token,或只有部分请求需要验证Token。

3、Token伪造

如果应用程序存在XSS漏洞,攻击者可以注入恶意脚本来窃取用户的CSRF Token,并用该Token发起伪造请求。

4、Token固化

某些系统使用硬编码或静态生成的Token。攻击者可以预测或复制这些Token进行攻击。

五、SSRF常用协议

  1. file://

    • 允许访问服务器本地文件系统中的文件。攻击者可以尝试读取敏感文件(如/etc/passwd/proc/self/environ等)。
    • 示例:file:///etc/passwd
  2. ftp://

    • 用于访问FTP服务,可以尝试通过FTP协议连接到其他服务器。
    • 示例:ftp://example.com
  3. http:// 和 https://

    • 尽管是常用的HTTP协议,但在SSRF中,攻击者可以用它们来访问内部服务,例如API或管理接口。
    • 示例:http://localhost:8080
  4. gopher://

    • Gopher协议允许访问文档和信息,攻击者可以利用它来发送任意请求。
    • 示例:gopher://example.com/
  5. mailto:

    • 伪协议可能用来构造邮件地址,攻击者可以通过此协议发送请求。
    • 示例:mailto:attacker@example.com
  6. data:

    • 可以用来在请求中嵌入小型数据,攻击者可能利用它进行各种数据传输。
    • 示例:data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==(这代表“Hello, World!”的Base64编码)
  7. ws:// 和 wss://

    • WebSocket协议,攻击者可以通过WebSocket发起连接,执行实时数据传输。
    • 示例:ws://example.com/socket
  8. http+unix://

    • 用于通过Unix套接字发送HTTP请求,可以在本地与某些应用程序进行通信。
    • 示例:http+unix://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json
  9. redis://

    • Redis协议,允许攻击者连接到Redis服务并执行命令。
    • 示例:redis://localhost:6379

六、SSRF靶场通关(pikachu)

1、SSRF之curl

curl的用法:PHP cURL 函数 | 菜鸟教程

PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

1.1、点击页面中的“累了吧,来读一首诗吧”进入新页面,发现地址栏中出现了一个URL地址,URL后面的内容正是可以利用的地方。

1.2、由于curl支持很多协议,我们依次尝试http、file和dict协议。输入 url=http://www.cqupt.edu.cn可以用http访问外网链接。输入url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/test.txt请求内网资源。

1.3、利用file协议查看本地文件,输入url=file:///D:\phpstudy\phpstudy_pro\WWW\test.txt

 1.4、使用dict协议可以获取内网主机开放端口相应服务的指纹信息,输入url=dict://127.0.0.1:80

2、SSRF之file_get_content

file_get_content()的用法:PHP file_get_contents() 函数 | 菜鸟教程

file_get_contents() 把整个文件读入一个字符串中。

该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。

语法:  file_get_contents(path,include_path,context,start,max_length)

2.1、利用file协议查看本地文件,输入file=file:///C:\Users\Lenovo\Desktop\test.txt

2.2、读取ssrf.php源码,输入file=php://filter/read=convert.base64-encode/resource=ssrf.php,得到base64编码后,放到在线解码器中解码即可得到源码。

2.3、利用http协议探测内网主机其他端口, 输入:file=http://127.0.0.1:902

2.4、利用http协议请求内网资源,输入file=http://127.0.0.1/sqli-labs/index.html

七、 对pikachu靶场SSRF漏洞成因说明

SSRF之curl_exec()

源代码如图

该靶场利用curl_exec()函数从其他服务器应用获取数据,但没有对目标地址做过滤与限制,curl又支持很多协议,攻击者就能利用伪协议伪造出恶意请求,比如访问内网资源、查看内网文件、探测内网其它主机端口等。

SSRF之file_get_contents()

源代码如图。

该靶场则是利用 file_get_contents()函数实现从其他服务器应用获取数据的功能,同样也是因为没有对目标地址进行过滤和限制,导致攻击者可以利用http、file等伪协议进行请求伪造来请求内网资源,甚至能读取PHP源码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值