0x00 Cross Site Request Forgery (CSRF)

CSRF已经在owasp top10 2017当中被移除了,目前来看CSRF漏洞确实也是越来越少了。

直接看源码吧

 <?php$current_user = isset($_SESSION['user']) ? $_SESSION['user'] : '' ;$password = isset($_GET['passwd']) ? $_GET['passwd'] : '' ;$confirm = isset($_GET['confirm']) ? $_GET['confirm'] : '' ;include('../../config.php');if($current_user){if(isset($_GET['submit'])){if(empty($password) && empty($password)){echo "Passwords can not be blank !! Try Again ";}else if($password != $confirm){echo "Passwords don't match !! Try Again";}else{$stmt = $conn1->prepare("UPDATE users set password=:pass where username=:user");$stmt->bindParam(':pass', md5($password));$stmt->bindParam(':user', $current_user);$stmt->execute();if($stmt->rowCount() > 0){echo "<b>Password Changed successfully<br></b>";}else{echo "<b>Invalid user<br></b>";}}}}else{echo "<b> You are not logged in. </b>";}?>

可以看到,先验证了登陆状态,如果没有登陆,是无法修改密码的,做了pdo也无法注入。但是在修改的密码的时候没有其他验证了,存在明显的CSRF

漏洞利用

直接伪造url诱骗其它用户点击,其他用户在登陆的情况下,点击链接就会触发CSRF

http://www.baynkc610.com/xvwa/vulnerabilities/csrf/?passwd=123&confirm=123&submit=submit

在另外一个浏览器中登陆xvwa用户。

当其它用户访问此链接时,密码就会变成123

退出再登陆时,用原来的xvwa密码进行登陆就会失败。

修复建议
  1. 防止跨站请求伪造,通常需要在每个HTTP请求中添加一个不可预测的令牌。这种令牌至少应该对每一个用户会话来说是唯一的。最好的方法是将独有的令牌包含在一个隐藏字段中。这将使得该令牌通过HTTP请求体发送,避免其包含在URL中从而被暴露出来。
  2. 该独有令牌同样可以包含在URL中或作为一个URL参数。但是这种方法的巨大风险在于:URL会暴露给攻击者,这样秘密令牌也会被泄漏。
  3. 要求用户重新认证或者判明他们是一个真实的用户(例如通过CAPTCHA )也可以防护CSRF攻击。

0x01 Cryptography

A developer should understand which cryptography should be suitable for each required modules in application, it can be encoding, encrypting or hashing. Insecure implementation of cryptography can leads to sensitive data leakage.

这个主要说的是不安全的加密设置可能会导致敏感数据泄露

直接看源码

<?php$str = $_GET['item'];
if($str){echo "<table style=\"border-collapse:collapse; table-layout:fixed; width:700px;\">";echo "<tr><th width>Crypto Used</th><th>Value</th></tr>";# --- ENCODING ---echo "<tr><td style=\"word-wrap:break-word;\">Base64 Encode</td>";echo "<td style=\"word-wrap:break-word;\">". base64_encode($str)."</td></tr>";echo "<tr><td colspan=2>&nbsp;&nbsp;</td></tr>";# --- ENCRYPTION ---echo "<tr><td style=\"word-wrap:break-word;\">AES Encryption<br>"; $key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");$key_size =  strlen($key);echo "Key Size : " . $key_size. "</td>";# create a random IV to use with CBC encoding$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);# creates a cipher text compatible with AES (Rijndael block size = 128)$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,$str, MCRYPT_MODE_CBC, $iv);# prepend the IV for it to be available for decryption$ciphertext = $iv . $ciphertext;# encode the resulting cipher text so it can be represented by a string$ciphertext_base64 = base64_encode($ciphertext);echo  "<td style=\"word-wrap:break-word;\">". $ciphertext_base64 . "</td></tr>";echo "<tr><td colspan=2>&nbsp;&nbsp;</td></tr>";# --- HASHING ---echo "<tr><td style=\"word-wrap:break-word;\">MD5 Hashing without salt</td>";echo "<td style=\"word-wrap:break-word;\">" . md5($str)."</td></tr>";echo "<tr><td colspan=2>&nbsp;&nbsp;</td></tr>";include_once('PasswordHash.php');echo "<tr><td style=\"word-wrap:break-word;\">PBKDF2 with sha256 and 1000 iteration <br> (salt : hash)</td>";echo "<td style=\"word-wrap:break-word;\">" . create_hash($str)."</td></tr>";echo "<tr><td colspan=2>&nbsp;&nbsp;</td></tr>";
}
?>

分别做了base64encryptohash。。
另外还有PasswordHash.php里面有自定义的hash算法。。。我就不看了,看着密码学有点怕。

漏洞利用


提交的数字为1,但是好像丢失了函数,导致后续无法继续下去,只显示了base64出来,解码一下。

确实是1。其余的就不折腾了,了解下就行。

不懂编码,加密和哈希的区别的还是得再去查一查的。

修复建议
  1. 预测一些威胁(比如内部攻击和外部用户),加密这些数据的存储以确保免受这些威胁。
  2. 对于没必要存放的、重要的敏感数据,应当尽快清除。
  3. 确保使用了合适的强大的标准算法和强大的密匙,并且密匙管理到位。可参考FIPS 140 validated cryptographic modules。
  4. 确保使用密码专用算法存储密码,如:bcrypt、PBKDF2或者scrypt。
  5. 禁用自动完成防止敏感数据收集,禁用包含敏感数据的缓存页面。

0x02 Unvalidated Redirects and Forwards

未验证的重定向和转发同样也从owasp top10 2017移除了,但是在挖src时这个还是比较常见的。

Web应用程序经常将用户重定向和转发到其他网页和网站,并且利用不可信的数据去判定目的页面。如果没有得到适当验证,攻击者可以重定向受害用户到钓鱼软件或恶意网站,或者使用转发去访问未授权的页面。

#home.php<strong><a href="redirect.php?forward=https://www.owasp.org">Open Web Application Security Project</a> <br><a href="redirect.php?forward=http://www.webappsec.org/">The Web Application Security Consortium (WASC)</a></strong>
<?phpif (isset($_GET['forward'])){$forward=$_GET['forward'];if (strlen($forward)>0){ob_start();ob_end_flush();header("Location: ".$forward);}}
?>#redirect.php
<?phpif (isset($_GET['forward'])){$forward=$_GET['forward'];if (strlen($forward)>0){header("Location: ".$forward);}}
?>

homeredirect都可以直接进行跳转。
不过为啥home里面要加个ob_start()就有点没理解了。

漏洞利用

www.baynkc610.com/xvwa/vulnerabilities/redirect/redirect.php?forward=https://www.baidu.com

redirect此页面正常跳转,使用home时,就发现报错了。

提示在另外一个页面已经开启了缓存了,不折腾了,理解就OK了。

修复建议
  1. 避免使用重定向和转发。
  2. 如果使用了重定向和转发,则不要在计算目标时涉及到用户参数。这通常容易做到。
  3. 如果使用目标参数无法避免,应确保其所提供的值对于当前用户是有效的,并已经授权。建议把这种目标的参数做成一个映射值,而不是真的URL或其中的一部分,然后由服务器端代码将映射值转换成目标URL。

应用程序可以使用ESAPI重写sendRedirect()方法来确保所有重定向的目的地是安全的。避免这种漏洞是非常重要的,因为钓鱼软件为了获取用户信任,往往最喜欢攻击这种漏洞。

XVWA CSRF、Cryptography、Unvalidated Redirects and Forwards相关推荐

  1. 一万个bug——安装阿里云SDK核心库遇到的问题(涉及Rust、cryptography、openssl等的安装)

    本文涉及Rust.cryptography.openssl等的安装 ----解决方式都是硬方式(仅凭报错信息分析,没有技术分析,按需参考) 其中: Rust 安装时遇到的问题在1-5 cryptogr ...

  2. SQL 登录注入脚本_常见web安全问题,SQL注入、XSS、CSRF,基本原理以及如何防御...

    1.SQL注入 原理: 1).SQL命令可查询.插入.更新.删除等,命令的串接.而以分号字元为不同命 令的区别.(原本的作用是用于SubQuery或作为查询.插入.更新.删除--等 的条件式) 2). ...

  3. web安全性测试用例(输入、输出、SQL注入、跨站请求伪造(CSRF)、跨站脚本攻击(XSS))实实在在的干货

    https://www.cnblogs.com/qmfsun/p/3724406.html 建立整体的威胁模型,测试溢出漏洞.信息泄漏.错误处理.SQL 注入.身份验证和授权错误. 1.   输入验证 ...

  4. SQL注入、XSS、XXE、CSRF、SSRF、越权漏洞、文件上传、文件包含总结篇

    漏洞总结篇 SQL注入 什么是SQL注入? 怎么防御? 过滤特殊字符 修改php.in 使用mysqli_real_escape_string()函数 加固数据库方面 加固管理方面 Mybatis 防 ...

  5. Django之Cookie、Session、CSRF、Admin

    Django之Cookie.Session.CSRF.Admin Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES[ 'key' ] request.get ...

  6. 有关cookie:验证_token、CSRF攻击、保存信息_cookie与本地存储、indexDB、

    浏览器"同源策略": ajax跨域限制.iframe跨域限制. LocalStorage跨域限制.Cookie跨域限制. W3C标准的浏览器:运行在不同域的JavaScript无法 ...

  7. XSS、SSRF、CSRF、XXE 漏洞的区别

    XSS(跨站脚本攻击) XSS属于客户端攻击,受害者最终是用户.但特别要注意的是网站管理员也属于用户之一,这就意味着XSS可以进行"服务端"攻击,因为管理员要比普通用户的权限大得多 ...

  8. (29.1)【CSRF详解】CSRF原理、利用过程、分类、举例、工具……

    目录 CSRF 一.简介: 二.CSRF与XSS的区别: XSS CSRF 三.原理: 四.基本流程: 五.危害: 六.分类: 站外攻击: 站内攻击: 七.举例: Get提交方法: Post提交方法: ...

  9. 鉴权必须了解的 5 个兄弟:cookie、session、token、jwt、单点登录

    本文你将看到: 基于 HTTP 的前端鉴权背景 cookie 为什么是最方便的存储方案,有哪些操作 cookie 的方式 session 方案是如何实现的,存在哪些问题 token 方案是如何实现的, ...

最新文章

  1. 苹果手机怎么设置时间24小时制_外媒实测苹果iPhone 12续航:5G网络下表现不佳...
  2. 展望:模型驱动的深度学习
  3. 带你手写基于 Spring 的可插拔式 RPC 框架(二)整体结构
  4. list在codeblocks和vs2013中编译提示不同
  5. 【Unity技巧】制作一个简单的NPC
  6. 工业机器人行业研究报告
  7. 洛谷P2730 [IOI]魔板 Magic Squares
  8. 普罗米修斯java_springboot集成普罗米修斯(Prometheus)的方法
  9. web input光标的颜色
  10. 禁用笔记本键盘_如何禁用/启用笔记本内置键盘?
  11. 【动态规划】矩阵链相乘 (ssl 1596)/能量项链 (ssl 2006)
  12. linux-使用xftp远程传输文件给主机
  13. 查看linux文件的日期格式,5个在Linux中管理文件类型和系统时间的有用命令
  14. 亚马逊AWS营收1700亿,阿里云213亿,差距巨大能追赶吗?...
  15. Apache Tomcat选择哪个版本好?
  16. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323
  17. 如何快速发表一篇SCI论文
  18. 对数学期望、方差、协方差、协方差矩阵的理解
  19. 模式分解保持函数依赖判断——数据库考试复习
  20. Web 开发中地图使用——高德地图定位功能

热门文章

  1. html对比时间,js比较日期时间【转载】
  2. 如何使用多配置yml
  3. 80端口被NT kernel System 占用pid 4
  4. 数据湖06:Delta Lake原理和功能概述
  5. (附源码)计算机毕业设计SSM基于的在线怀旧电影歌曲听歌系统
  6. 详解二叉排序树(二叉搜索树、二叉查找树)以及Python实现相关操作
  7. 智能家居设备连接路由的技术AirKiss
  8. [原]Blog 手记
  9. 期待我的app快点上线哈
  10. 美甲店如何通过小红书开拓渠道?美甲店做小红书有效果吗