首页 > 代码库 > CSRF学习笔记之CSRF的攻击与防御以及审计【00x2 】
CSRF学习笔记之CSRF的攻击与防御以及审计【00x2 】
Medium完整代码:
<?php if (isset($_GET[‘Change‘])) { // Checks the http referer header if ( eregi ( "127.0.0.1", $_SERVER[‘HTTP_REFERER‘] ) ){ // Turn requests into variables $pass_new = $_GET[‘password_new‘]; $pass_conf = $_GET[‘password_conf‘]; if ($pass_new == $pass_conf){ $pass_new = mysql_real_escape_string($pass_new); $pass_new = md5($pass_new); $insert="UPDATE `users` SET password = ‘$pass_new‘ WHERE user = ‘admin‘;"; $result=mysql_query($insert) or die(‘<pre>‘ . mysql_error() . ‘</pre>‘ ); $html .= "<pre> Password Changed </pre>"; mysql_close(); } else{ $html .= "<pre> Passwords did not match. </pre>"; } } }?>
在第六行增加了一个函数,这个函数相对于我较为生僻。eregi:不区分大小写的正则表达式匹配 ps:这个函数已经被高版本的PHP遗弃了。
关于eregi函数的案例:
<?php $string = "hello world";if(eregi(‘E‘,$string)){//匹配E是否再$string变量中,不区分大小写 echo "xxx";//如果存在输出xxx}else{ echo "bbbbb";//否则输出bbbbb} ?>
知道了那个函数就很容易知道,这个Medium的防御措施是如何的。既然对来源的$_SERVER[‘HTTP_REFERER‘]即referer进行了匹配,那么应该咋绕过呢?
绕过方法:
文件名也是在referer当中,那么我们就可以将其匹配的$_SERVER[‘HTTP_REFERER‘]当作我们的文件明来绕过。
比如攻击者的域名是www.aaaa.com
被攻击者的域名是:www.bbb.com
在攻击者的服务器上上传一个文件,名字改为:www.bbb.com。即www.aaa.com/www.bbb.com
如此便成功绕过。
CSRF学习笔记之CSRF的攻击与防御以及审计【00x2 】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。