CSRF
CSRF:跨站请求伪造(盗用身份,以你的名义进行某些非法的操作)
CSRF攻击是建立在会话之上的。
主要有2点:1,CSRF建立在浏览器与Web服务器的会话中
2,欺骗用户访问URL
方法GET
方法POST
<html>
<body>
<form id="myfrom" method="post" action="http://173.82.206.142:8005/">
<input type="hidden" name="target" value"end123">
<input type="hidden" name="money" value"100000000000000000000000000000000000000">
<input type="hidden" name="messages" value" ">
</form>
<script>
var myfrom = document.getElementById("myfrom");
myfrom.submit();
</script>
</body>
</html>
Cookie机制
cookie主要2种表现形式:1,本地cookie又称为持久型Cookie;
2,临时cookie又称Session Cookie;
检测:
CSRF只能通过用户的正规操作进行攻击,实际上就说劫持用户的操作。
敏感操作:修改密码,转账,发表留言。
CSRFTester半自动检测。
预防跨站请求伪造
1,二次确认
要求用户二次输入密码
2,Token认证
①攻击者可得知URL的所有参数项,并了解其含义;
②诱导用户访问构造好的POC。
验证思路:
①服务器端生成验证字符串并保存在Session中,然后在客户端使用图片显示这段字符串。
②用户输入验证码之后交给服务器处理,如果验证码与Session中的字符串相匹配,就代表验证码正确,可以发起请求。
TOken验证思路:
①用户登录Web应用程序后,服务器端会随机产生一段字符串分配给此用户,存储在Session中。
②当用户进入某页面时,直接传递给用户界面或者Cookie中。
逻辑错误漏洞
逻辑漏洞一般出现在业务流程上,例如:任意密码修改,越权访问,密码找回,交易支付金额修改等。
①业务流程
②HTTP/HTTPS请求篡改
绕过授权验证
授权:对特定资源的读写权限
越权:水平越权,垂直越权
1,水平越权
修改密码的代码`
public String execute(){
int id = Integer.parseTnt(request.getParameter("userId"));//获取用户id
String password = request.getParameter("password");//获取原密码
String password2 = request.getParameter("password2")//获取新密码
if(!("".equals(password)||"".equals("password2"))){
return ERROR;
}
if{!password.equals(password2)){
return ERROR;
}
User u = new UserBiz().findUserById(id);//根据ID获取User具体对象
u.setPassword(password);
boolean flag = new UserBiz().saveOrUpate(u);//更新对象
if(flag){
return SUCCESS;
}else{
return ERROR;
}
}
错误在没有进行二次密码验证(原密码),可以修改其他用户的密码
添加:
String oldpass =request.getPass
if(!(u.getPassword().equals(oldpass))){//判断原密码是否相同
return "-1";
}
垂直越权
管理员表与普通用户表是同一张数据库表,必须要在存在权限验证字段,用来区分是否是管理员。
代码注入
1,OS命令执行
<?php
$command = $_REQUEST["command"];
system($command);
?>
URL/注入点?command=ls
2,文件包含
<?php
$page=$_REQUEST["page"];
include($page);
?>
URL/注入点?page=info.txt
3,动态函数调用
<?php
function A(){
echo "A";
}
function B(){
echo "B";
}
$func = $_REQUEST["fun"];
$func();
?>
4,代码执行
<?php
$myvar=varname";
$x = $_GET['arg'];
eval("\$myvar= \$x;");
?>