1、日志里的flag(目录穿越)
打开就能看见源码
<?php
highlight_file(__FILE__);
print("FLAG就存在于日志文件里哦!");
if (isset($_GET['path'])) {
$path = $_GET['path'];
if (preg_match('/flag|\$|["\']/i', $path)) {
echo "错误";
} else {
$path = str_replace("log","", $path);
if (file_exists($path)) {
$content = file_get_contents($path);
echo highlight_string($content, true);
} else {
echo "文件不存在";
}
}
} else {
echo "请提供文件路径";
}
FLAG就存在于日志文件里哦!请提供文件路径
抓包能看见回显里有Server: nginx/1.22.1
在 Linux 系统上,Nginx 的默认访问日志和错误日志路径可以在 Nginx 的配置文件中进行设置。一般来说,默认情况下,Nginx 的访问日志和错误日志的位置如下:
访问日志:默认情况下,Nginx 的访问日志路径是
/var/log/nginx/access.log
。这个路径可以在 Nginx 的配置文件中通过access_log
指令进行设置。错误日志:默认情况下,Nginx 的错误日志路径是
/var/log/nginx/error.log
。这个路径可以在 Nginx 的配置文件中通过error_log
指令进行设置。
所以就是../../../../跳转去根目录再跳转去日志,同时双写绕过str_repalce
payload如下:
2、 购买flag
随便输入一个用户名进去
点花费1积分且抓包,能看见post请求体那里username=admin&value=-1
把-1改成10000000000000
利用这个逻辑漏洞增加余额,然后再去购买flag且抓包,在response就能看见flag
另一种方法就是前端拦截,通过修改源码里被注释的充值代码里的update_my_value(uname, 1)为update_my_value(uname, 10000000000)充值,再去购买flag
3、一只小蜜蜂(BEESCMS漏洞)
能扫出登录网站/admin/login.php,这个cms能找到有SQL注入和文件上传漏洞
但是当时这里刷新不了验证码后面没有继续找文章做,后面才知道这里其实在/includes/init.php有变量覆盖漏洞
if (!get_magic_quotes_gpc()){
if (isset($_REQUEST)) {
$_REQUEST = addsl($_REQUEST);
}
$_COOKIE = addsl($_COOKIE);
$_POST = addsl($_POST);
$_GET = addsl($_GET);
}
if (isset($_REQUEST)){$_REQUEST = fl_value($_REQUEST);}
$_COOKIE = fl_value($_COOKIE);
$_GET = fl_value($_GET);
@extract($_POST);
@extract($_GET);
@extract($_COOKIE);
通过@extract()来引入变量,进行变量的覆盖操作,可以通过post方法传递构造的session来绕过验证码登录
参考链接:【代码审计】 beescms 变量覆盖漏洞导致后台登陆绕过分析 | CN-SEC 中文网
按照给出的payload即可绕过验证码登录
CET:
http://www.beescms.test/index.php
POST:
_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999
然后直接访问后台登录
http://www.beescms.test/admin/admin.php
找到文件上传处上传一句话木马后抓包,修改MIME绕过检测
直接访问./admin/upload/img/文件名
就能看到flag
4、Better_php
dirsearch扫目录扫出/index.php.bak,打开发现以下源码后就没什么头绪了,看大佬wp
include 'conn.php';
$query = $_GET["query"];
if (!is_string($query)) {
die();
}
if (preg_match('/log|local|set|file/i', $query)) {
die('no hack');
}
$result = $mysqli->query($query);
if ($result === false) {
die("database error, please check your input");
}
$row = $result->fetch_assoc();
if ($row === NULL) {
die("searched nothing");
}
if (in_array($query, $row)) {
system('echo Great hacker, but there are bigger challenges waiting for you next, you can find something in ;ls');
}
$result->free();
$mysqli->close();
学到了sed p /[e-g][0-2]* ;这种读文件的方法,转换下sed p /[e-g][i-m]* ;就相当于cat /flag了