46.9-2 垂直越权漏洞原理和测试流程案例(Av96582332,P46)
if(isset($_GET['submit']) && $_GET['username']!=null){
//没有使用session来校验,而是使用的传进来的值,权限校验出现问题,这里应该跟登录态关系进行绑定
$username=escape($link, $_GET['username']);
$query="select * from member where username='$username'";
$result=execute($link, $query);
水平越权
lucy登陆之后
127.0.0.1:4431/pikachu/vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF
把名字换为kobe,也能查看信息
127.0.0.1:4431/pikachu/vul/overpermission/op1/op1_mem.php?username=kobe&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF
46.9-2 垂直越权漏洞原理和测试流程案例(Av96582332,P46)
开bp,关闭拦截
用超级管理员登陆,添加账户,bp找到添加账户的post请求发到repeater
超级管理员已经退出登录,重放,会有重定向,检测到没有登陆,要求登录
登录普通账户,找到目前登录get请求,记下cookie到phpsessid,把前面的换成这个:普通用户的登录态重放超级管理员的操作(后台没有对权限限制,现实情况比较难,要抓到高级管理员有哪些操作)
重放时也会有重定向,不要跟踪,直接点开看,或者刷新一下,用户被重新添加了
$link=connect();
// 判断是否登录,没有登录不能访问
//这里只是验证了登录状态,并没有验证级别,所以存在越权问题。
if(!check_op2_login($link)){
header("location:op2_login.php");
exit();
}
if(isset($_POST['submit'])){
if($_POST['username']!=null && $_POST['password']!=null){//用户名密码必填
$getdata=escape($link, $_POST);//转义
$query="insert into member(username,pw,sex,phonenum,email,address) values('{$getdata['username']}',md5('{$getdata['password']}'),'{$getdata['sex']}','{$getdata['phonenum']}','{$getdata['email']}','{$getdata['address']}')";