WEB应用(十二)---csrf+ssrf

CSRF

全称是Cross-Site Request Forgery,中文跨站请求伪造。黑客利用已经登录的用户,诱导其访问或登录某个早已构造好的恶意链接或者页面,然后在用户毫不知情的情况下,以用户名义完成了非用户本意的非法操作。

这个就涉及到上一篇中我们所提及的同源策略。同源策略是出于安全的考虑,但是我们在日常使用中无法避免的要去使用它,比如氪金,进行游戏内的虚拟货币的充值,在我们充值的过程当中就会只用微信或者支付宝,这就会涉及跨站请求了。

这里在说明一下,同源策略:协议,域名,端口相同,三者缺一不可。

那么csrf具体的攻击流程是什么呢?

首先是你自己,打开了某网站,进行了用户信息登录,登录成功后,服务器会返回登录成功后的操作页面,和sessionid,sessionid会保存存在浏览器的cookie中,但是这个网站可能存在一些广告,哎呀,手滑点到了,那么他就会发送一个请求,发送到你刚打开的某网站,并且会携带你的cookie信息一起发送过去,那么攻击者就可以使用你的用户信息登录网站,进行操作一些危害行为,修改密码等。当然也不一定是广告,还有可能是你的某一个朋友发送的一个网站,最为关键的是在你打开一个已经登录了你自己用户信息的网站,然后又在同一个浏览器打开一个不知名的网站,那么就有可能窃取你的cookie信息。

打开我们的环境(csrf(get)),点击提示,登录成功后,是可以修改用户信息的

这是登录用户自己的信息进行修改这是合规的操作,但是,假设该用户点击了某恶意链接,这个恶意链接我们抓包来构造

 

 这个恶意链接我们到一个新的网页去打开

 现在我们就可以看到,信息已经被修改了,我们可以再返回去看看原先的页面,同样也被修改了

 

接下来我们再去修改信息,在我们访问恶意链接之前,退出登录,然后,访问恶意链接,发现,我们返回到了登录页面无法修改信息了,这便是一种很好的防御策略。

get请求很好进行操作,但是,post呢,没有办法在地址栏中进行修改信息,该怎办呢,我们先来抓个包看看,我们只关注这俩个地方,那么我们该怎么进行构造post请求,进行修改数据,如果你们学过python那么就可以实现,但是我们没学过得怎么办嘞,我们之前是学过html的,我们在学习from表单的时候,是可以发送post请求,所以话不多说,上代码

将这个代码写入phpstudy目录中的www下的文件夹中,在我们登录的情况下,再去执行这个html文件就会发先我们的信息被修改了,同样在我们退出登录后再去执行的话就没有这个效果了

<body>
        <!--
            该页面被加载,按钮自动执行单击事件,
            向http://192.168.146.132:8000/vul/csrf/csrfpost/csrf_post_edit.php
            发送sex phonenum add email 等信息
        -->
        <form action="http://192.168.146.132:8000/vul/csrf/csrfpost/csrf_post_edit.php" method="post">
        <input type="text" name="sex" value="girl">
        <input type="text" name="phonenum" value="15988767679">
        <input type="text" name="add" value="zhongguo">
        <input type="text" name="email" value="youxiang">
        <input type="submit" name="submit" value="submit" id="postsubmit">
        </form>
        <script>
            // 当窗口加载页面内容时,调用这个匿名函数
            window.onload=function(){
                // 根据控件的ID,获取提交按钮控件,调用它的click方法。相当于自动点击该按钮。
                document.getElementById("postsubmit").click();
            }
        </script>
    </body>

 在靶场中我们可以看到有一个token,这个有什么用呢,他可以有效的去防御csrf攻击。我先讲讲过程哈:用户在登录以后,去修改自己的个人信息时,服务器会返回一个sessionid,和token,但是token没有存储到cookie中,而是存储到前端页面中,在用户提交自己修改后的信息时,将数据包发送到服务器,但服务器首先去验证token,再去验证sessionid,黑客在想要窃取到token可谓是难上加难,因为用户每一次刷新页面会返回一个新的token,且值是随机的,不可预测的,就像是我们去看电影,在进去之前是要检查电影票的,检查过后,会撕掉一部分,那么就不可以二次使用了

我给大家看看token,点击修改个人修改信息后,右键,查看源代码,你们可以试试,返回上一个页面,再去查看一次token,看看和上一次一样吗

SSRF

全称Server-Side Request Forgery,中文是服务器端请求伪造。由攻击者构造形成url,但是这个url的请求由服务器端发起(跳板)。攻击目标是从外网无法访问的内部系统。

ssrf原理:一个公司架设了自己的服务器,服务器呢,又分为,公网访问的服务器,还有公司内网访问的服务器,我们这些普通人就只能访问他们的公网服务器,但是黑客发送一个恶意的数据包,如果公网的服务器存在ssrf漏洞(就是没有进行很好的过滤),那么通过恶意的数据包就可以访问到内网的服务器,因为公网的服务器一定是可以访问内网服务器的。

Web应用中出现SSRF漏洞的常见功能点

  1. 分享:通过URL地址栏分享网页内容
  2. 转码服务:通过URL地址把原地址的网页内容调优以适合手机屏幕
  3. 图片加载、下载:通过URL地址加载或下载图片
  4. 收藏:图片及文章的收藏功能

相关函数

  1. curl_exec() - 执行curl会话
  2. file_get_contents() - 将整个文件读入一个字符串
  3. fsockopen() - 打开一个网络连接或者一个Unix套接字连接

接下来打开我们的环境,后端使用了,curl函数,curl实际上也是一款工具,他的功能十分强大,支持多个协议,大家可以去搜一下

点击,会返回一首诗,同时我们看到url地址栏中看到

 

通过get请求,传入url,去访问一地址,假设,我们去访问百度,百度是这个内网服务器

 可以看到访问成功,你们可以试试其他的网址

 上面是展示的是https,http,curl还支持file协议,有什么作用呢,假设内网服务器是windows,那么就可以使用file来访问文件,具体格式   ?url=file:///d/路径,当然你想访问其他盘符的文件就可以换,我这只做一个引路,其他的协议怎么用还请大家自行查找

如果后端使用的是file_get_contents()函数,他的使用几乎和上面没有什么区别,唯一的区别是,他能用的协议要少于curl,就比如file_get_contents()他支持http协议,但是不支持https协议,其他的就由大家自己去探索了

SSRF防御措施:

  •  禁用不需要的协议,例如:仅仅允许http和https请求
  •  设置黑,白名单方式
  •  限制请求的端口

在此以后,就由大家多去练习,多去尝试,这样记忆才会更加深刻。

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值