web-Welcome
打开是405错误,抓包后看到是Method Not Allowed
搜索后发现是请求方式错误,换成POST传参就可以拿到源码了
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php error_reporting(0); if ($_SERVER['REQUEST_METHOD'] !== 'POST') { header("HTTP/1.1 405 Method Not Allowed"); exit(); } else { if (!isset($_POST['roam1']) || !isset($_POST['roam2'])){ show_source(__FILE__); } else if ($_POST['roam1'] !== $_POST['roam2'] && sha1($_POST['roam1']) === sha1($_POST['roam2'])){ phpinfo(); } }
|
前面都是刚刚遇到的,我们只需要关注最后一个else if语句就可以了
一个简单的sha1哈希绕过,传数组就可以了
然后在里面查找flag就可以了
web-Myblog
可以看到有登录入口,测试一下
输入1和1后页面显示
可以看到url中有admin和user,应该是需要管理员登陆,我们先fuzz一下sql注入什么的,但是发现打不进去,后来发现在url中有?page=login参数,猜测可能是任意文件读取漏洞,试一下
什么也没得,看了wp后才知道这里的话源码中是闭合了php后缀的,那我们再试一下,然后就读出来了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| //login.php <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Login</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="robots" content="all,follow"> <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/4.2.1/css/bootstrap.min.css"> <link rel="stylesheet" href="css/style.default.css" id="theme-stylesheet"> </head> <body> <div class="page login-page"> <div class="container d-flex align-items-center"> <div class="form-holder has-shadow"> <div class="row"> <div class="col-lg-6"> <div class="info d-flex align-items-center"> <div class="content"> <div class="logo"> <h1>欢迎登录</h1> </div> <p>—— 博客后台 ——</p> </div> </div> </div> <div class="col-lg-6 bg-white"> <div class="form d-flex align-items-center"> <div class="content"> <form method="post" action="/?page=admin/user" class="form-validate" id="loginFrom"> <div class="form-group"> <input id="login-username" type="text" name="username" required data-msg="请输入用户名" placeholder="用户名" class="input-material"> </div> <div class="form-group"> <input id="login-password" type="password" name="password" required data-msg="请输入密码" placeholder="密码" class="input-material"> </div> <button id="login" type="submit" class="btn btn-primary">登录</button> <div style="margin-top: -40px;">
<div class="custom-control custom-checkbox " style="float: right;"> <input type="checkbox" class="custom-control-input" id="check2" > <label class="custom-control-label" for="check2">自动登录</label> </div> <div class="custom-control custom-checkbox " style="float: right;"> <input type="checkbox" class="custom-control-input" id="check1" > <label class="custom-control-label" for="check1">记住密码 </label> </div> </div> </form> <br /> <small>没有账号?</small><a href="#" class="signup"> 不给注册</a> </div> </div> </div> </div> </div> </div> </div> <script src="https://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/4.2.1/bootstrap.min.js"></script> <script src="vendor/jquery-validation/jquery.validate.min.js"></script> <script src="js/front.js"></script> </body> </html>
<?php require_once("secret.php"); mt_srand($secret_seed); $_SESSION['password'] = mt_rand(); ?>
|
1 2 3 4 5
| //secret.php <?php $secret_seed = mt_rand(); ?>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?php error_reporting(0); session_start(); $logined = false; if (isset($_POST['username']) and isset($_POST['password'])){ if ($_POST['username'] === "Longlone" and $_POST['password'] == $_SESSION['password']){ $logined = true; $_SESSION['status'] = $logined; } } if ($logined === false && !isset($_SESSION['status']) || $_SESSION['status'] !== true){ echo "<script>alert('username or password not correct!');window.location.href='index.php?page=login';</script>"; die(); } ?>
|
最后一个是我没想到的,尽管看着不像文件,但是还是读取出来了emm
这里我们分析一下代码,需要让username=Longlone,然后密码的话是session中password的值,也就是经过随机后的值,那我们怎么去拿到password的值呢?
我们把cookie中的值删除,令password为空,那我们的username对应的password为空的话就可以绕过验证了,但是好像必须输入密码,那我们把密码对应的HTML中 required 属性规定必需在提交之前填写输入字段。直接找到它把它删了,然后就成功登录了
发现一个上传头像的地方,看看是不是文件上传漏洞
发现可以上传,那我们这里可以将php文件打包成zip,改后缀名为jpg,再利用zip
伪协议进行读取。zip协议是可以解压缩jpg后缀的压缩包的。
先写一个木马文件,然后用zip压缩转成jpg文件后缀进行上传,上传成功后进行访问发现并不能看到图片(是因为我们这个文件是个压缩包,不是个正常的图片)
利用zip伪协议读取一下
zip:// + zip路径 + %23 + php文件名
这里用%23去把源码中自动接上的php后缀去掉,然后传入参数执行命令就可以了
web-Rceme
打开是一个命令执行界面
可以看到