DVWA靶场之CSRF通关详解
原理CSRF漏洞是指利用受害者尚未失效的身份认证信息( cookie、会话等信息),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下,以受害者的身份向服务器发送请求,从而完成非法操作(如转账、改密、信息修改等操作)。
形成原因
CSRF的形成原因主要是由于Web应用程序没有充分验证请求来源的问题。正常的请求必须携带正确的Cookie信息,而攻击者可以构造一个恶意网站,在其中包含一个发送CSRF请求的链接或表单,当用户访问这个网站时,浏览器会自动发送CSRF请求到被攻击的网站,从而实现攻击。
防御措施
[*]随机令牌:在表单中增加一个随机生成的令牌(token),每次提交表单时都需要提交该令牌,服务器验证令牌是否正确,从而保证请求来源的合法性。
[*]Referer验证:通过检查HTTP头部中的Referer字段,判断请求来源是否合法。但是该方法并非绝对可靠,因为发送请求时可能会篡改Referer字段。
[*]Cookie:设置cookie的SameSite属性,值为Strict或Lax,可以限制第三方网站访问该cookie,从而避免其他网站利用cookie发起CSRF攻击。
[*]双重认证:采用双重认证机制,例如使用短信验证码、Google Authenticator等方式,增强用户身份验证,防止受到CSRF攻击。
[*]请求验证:在服务器端对所有请求进行验证,判断请求是否合法,例如判断请求头是否包含特定的自定义HTTP头字段,或者验证请求参数是否合法等。
突破方式
[*]Session劫持:攻击者通过某些手段获取用户的Session ID,然后模拟用户的身份访问服务器,从而完成攻击。
[*]跨域POST:攻击者以受害者身份向其他网站发起POST请求,通过头部设置绕过同源策略(Same-Origin Policy),达到攻击目的。
[*]Clickjacking:攻击者在一个网站上通过iframe嵌套形式,覆盖另一个网站的操作界面,使用户执行不知情的行为。
[*]XSS攻击:攻击者将恶意脚本注入到目标网站或者通过链接传递给受害者,当受害者访问包含恶意脚本的网页时,攻击者就可以利用受害者的权限发送恶意请求,完成攻击。
【Low】级别
在csrf的界面,点击Test credentials,输入默认的账号和密码(admin,password),点击登录,提示密码有效。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111134536-393823535.png
修改密码界面输入新的密码,再使用工具burpsuit抓包,抓到包后,点击右键,选择Engagement tools,点击CSRF Poc,最后会生成一段payload。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111257187-283604558.png
复制这段html代码,把它单独存下来,再将这个html文件的两个密码都改成123456,并在浏览器里面打开。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111316184-1295010003.png
点击submit request后会跳转回dvwa,这时再次验证原来的密码,会发现密码已经失效。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111343804-669058295.png
输入更改后的密码(123456),验证成功,证明crsf修改了用户密码。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111534247-567756770.png
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111548616-659449802.png
【Medium】级别
这里查看源码,与刚刚的low等级比较发现,这里只有一个等级发生了改变,即在传入密码和确认密码参数前先进行了一个if语句的判断,判断里面的内容主要是验证这个访问请求是否从dvwa网站本身发起的,如果不是这个网站发起的请求,后面的操作就不执行。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111749492-72950809.png
源码是通过referrer这个字段的参数进行判断的,通常情况下在增加referrer验证时就是网站本省当前页面的ip地址,这里需要抓包看看相关信息。
首先,修改密码为10086(这里密码没有要求,随便设置一个),修改密码成功,这里的网站如下图url栏中所示。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111804418-113040711.png
将刚刚url栏中的网址复制到一个新的网页打开,发现change下面有提示,大致意思就是请求的来源不正确。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111818787-935077606.png
利用工具burpsuit抓包分析有:
对于最开始更改密码成功的页面抓包,可以看到有referer信息。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111835233-495057770.png
那解决办法就将刚刚页面没有问题的referer信息复制到第二个页面中,再返回给浏览器响应,可以看到密码已经更改成功。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623111900261-10220070.png
【High】级别
首先查看源码,发现该级别加入了token机制,当用户访问修改密码页面修改时,服务器会返回一个随机的token,向服务器发送请求时,需要提交token,服务器接收请求时会先检查token,只有token正确,才会去处理响应请求。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623120540460-1123737372.png
利用burpsuit工具抓包可以看到主机名和token值。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623120559242-106536182.png
通过存储型的XSS获得token,这里name长度限制抓包解决,然后将name值设为,forword,然后网页中就得到了一个没有使用过的token值。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623120722087-72030939.png
然后回到csrf界面,修改密码,将url栏中的token值改为刚刚得到的新token值。即把:
http://www.dvwa.com/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change&user_token=7732854e8c3912dd284538ed7533fe51#
改为:
http://www.dvwa.com/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change&user_token=3914162e7106cc2b9dc4905883a2b636#
然后修改密码成功。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623120736372-321802355.png
然后去登录验证,修改密码成功。
https://img2023.cnblogs.com/blog/3174456/202306/3174456-20230623120753977-784704722.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]