第六天作业
一、CSRF跨站请求伪造
CSRF攻击的核心在于利用受害者浏览器中的认证凭据(如Cookie、Session等),向受信任的网站发送非预期的HTTP请求。由于这些请求附带了受害者的认证信息,因此,Web服务器可能会误认为这些请求是合法用户的行为,从而执行相应的操作,如转账、修改密码等。
1.CSRF和XSS的区别
CSRF:跨站请求伪造是一种通过诱导用户进行他们未授权的操作的攻击。攻击者利用受害者的合法会话,发送恶意请求到目标网站,从而执行受害者可能不希望进行的操作。
XSS:跨站脚本攻击则是将恶意脚本注入到网页中,当其他用户浏览这些页面时,恶意脚本会在用户的浏览器中执行,从而窃取敏感信息或进行其他恶意操作。
具体区别:
1.csrf通常需要用户先登录目标网站并获取cookie,然后利用这些cookie进行攻击,xss不需要用户登录即可进行攻击,因为攻击者直接在目标网站上注入恶意脚本。
2.csrf盗取cookie时并不知道cookie的具体值即可利用,xss盗取cookie时能够直接获取cookie的值。
3.csrf虽然危害较大,但其危害范围相对有限,通常只能执行受害者已经授权的操作,xss由于可以在任何页面上执行恶意脚本,因此其危害性更大,可以窃取用户的cookie、会话信息等敏
2.CSRF攻击步骤
1.用户登录受信任网站:用户C打开浏览器,访问受信任网站A,并输入用户名和密码请求登录。
2.生成Cookie并返回给浏览器:在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户成功登录网站A,可以正常发送请求到网站A。
3.用户未登出访问危险网站:用户在没有登出网站A的情况下,访问到了危险网站B。
4.构造恶意请求:网站B对网站A发送恶意请求,诱导用户点击某个链接或按钮。
5.执行恶意操作:由于用户的浏览器已经保存了从网站A获取的Cookie,因此这些请求会被服务器认为是来自该用户的合法请求,从而执行恶意操作。
3.CSRF手工构造POST型页面方法
1.首先,需要确保已经成功登录到目标网站,并且浏览器中保存了相应的Cookie信息。
2.在本地或远程服务器上创建一个HTML页面,该页面包含一个表单,表单的提交方式设置为POST,并且指定要提交的数据和目标网站的URL。
例如:
<form action="url" method="post">
<input type="hidden" name="姓名" value="张三">
<input type="submit" value="点击提交">
</form>
在表单中需要提前设置好要发送请求的内容,然后类型改为隐藏。
3.将上述恶意页面嵌入到另一个网页中,或者通过邮件、即时消息等方式发送给目标用户。确保这个页面看起来是合法和可信的,以增加用户点击的可能性。
4.当用户访问并点击恶意页面中的表单时,浏览器会自动携带用户的Cookie信息,向目标网站发送包含恶意参数的POST请求。由于浏览器信任用户的Cookie信息,目标网站会认为这是用户本人发起的请求,并执行相应的操作。
此外,可以通过burp suite抓包,在抓包后右键选择生成csrf poc,可以获得构造好的post型页面html代码。
例如在pikachu靶场中,打开csrf(post)关卡,用户登录成功后,抓取提交修改资料的包。
此时可以右键选择generate csrf poc,获取html代码。
然后新建一个html文件,可将上述代码粘贴到该html文件,然后通过构造恶意的数据替换value的值,并设置隐藏。
打开该html文件,若用户点击了该页面中的提交按钮,则会提交我们恶意构造好的post请求包,此时需要注意是同一浏览器打开,确保cookie值是一样的。
提交后可以发现成功执行了构造的请求包。
4.token类csrf利用方法
token定义
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
流程:
1.客户端使用用户名和密码请求登录。
2.服务端收到请求,验证用户名和密码。
3.验证成功后,服务端会生成一个token,然后把这个token发送给客户端。
4.客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。
5.客户端每次向服务端发送请求的时候都需要带上服务端发给的token。
6.服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。码请求登录。
在请求包中带有token时,可以利用burp suite进行抓包,利用插件CSRF Token Tracker,对token进行跟踪。
例如在pikachu靶场中,先登录用户,再用burpsuite进行抓包,可以发现请求包中出现了token字段。
再拓展中下载插件CSRF Token Tracker,将得到的token值复制到CSRF Token Tracker中,设置成以下进行token值追踪:
此时修改参数phonenumber的值为123456,可以发现token没变的情况下仍然修改成功。
二、SSRF服务端请求伪造
SSRF即服务器端请求伪造,攻击者利用这种漏洞,通过篡改服务器的请求目标地址来伪造请求,从而获取敏感信息。SSRF漏洞的产生,主要是因为服务端提供了从其他服务器应用获取数据的功能,但未对目标地址进行足够的过滤和限制。
漏洞成因:
-
服务端提供了从其他服务器应用获取数据的功能,例如从指定的URL地址获取网页内容、加载指定地址的图片、数据、下载等。通常情况下,服务端请求的目标是与该请求服务器处于同一内网的资源服务。
-
如果服务端未对请求的目标地址、文件等进行充足的过滤和限制,攻击者就有可能通过篡改请求的目标地址来进行伪造请求。例如,当服务端使用file_get_contents()函数从用户指定的URL获取内容时,如果未对目标URL进行合法性检查,攻击者可以构造一个恶意URL来获取敏感信息。
1.SSRF常用伪协议
1.file:// 用于访问本地文件系统,几乎是SSRF中最常用的伪协议之一,可以尝试从服务器端任意读取文件
2.http:// 和 https:// 用于访问HTTP(s)网址,可以用来探测内网服务或资源
3.ftp:// 用于访问FTP(s) URLs,同样可以用来探测内网服务或资源
4.php:// 用于访问各个输入/输出流(I/O streams),可以用来执行PHP代码或读取文件
5.data:// 用于数据(RFC 2397),可以用来执行数据URI
6.zlib:// 用于压缩流,可以用来读取压缩文件
7.glob:// 用于查找匹配的文件路径模式
8.phar:// 用于PHP归档,可以用来执行PHP归档文件中的代码
2.SSRF pikachu靶场通关
2.1 SSRF(curl)
观察到url中含有参数url指向一个地址。
尝试修改参数url的值为www.baidu.com,可以观察到页面出现了baidu的页面。
尝试修改url值为自己目录下的文件路径。
2.2 SSRF(file_get_content)
PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()
file_get_contents() 把整个文件读入一个字符串中
打开pikachu发现file地址
尝试修改file路径为自己目录下的文件路径
3.源码分析
3.1 SSRF(curl)
通过对源代码分析,发现通过get方法获取url的值,但是未对url的值进行过滤,然后又通过curl_exec()函数执行了获取目标url的php代码,即存在服务端请求伪造。
3.2 SSRF(file_get_content)
服务端未对URL进行严格的过滤和验证,获取文件名后利用file_get_contents函数,用户即可通过file参数请求任意文件包括远程文件和内部资源,即存在服务端请求伪造。