http://115.28.90.49:23080/index.php?action=front&mode=register
查看url , 感觉可以任意文件包含
尝试使用 php 协议
利用 filter 可以读取到任意文件源码
$value){
if(!is_array($value)){
!get_magic_quotes_gpc()&&$value=addslashes($value);
$array[$key]=$value;
}else{
$array[$key] = d_addslashes($array[$key]);
}
}
return $array;
}
$_POST=d_addslashes($_POST);
$_GET=d_addslashes($_GET);
include_once('common.php');
if(!isset($_GET['action'])||!isset($_GET['mode'])){
header("Location: ./index.php?action=front&mode=login");
}elseif(!preg_match('/\.{2}/is',$_GET['action'])&&preg_match('/^[0-9A-Za-z]+$/is',$_GET['mode'])){
$action=$_GET['action'];
$mode=$_GET['mode'];
$file=$action.'/'.$mode.'.php';
// echo $file;
}else{
die("Invalid Request!");
}
include($file);
先把所有文件都读取下来再说
query($sql) or die("查询数据库出错!");
return $res;
}
function encode($str){
return md5($_SESSION['SECURITY_KEY'].$str);
}
function set_login($uname,$id,$level){
$_SESSION['userid']=$id;
$_SESSION['level']=$level;
$endata=encode($uname);
setcookie("uid","$uname|$endata");
}
function check_login(){
$uid=$_COOKIE['uid'];
$userinfo=explode("|",$uid);
if($userinfo[0]&&$userinfo[1]&&$userinfo[1]==encode($userinfo[0])){
return $_SESSION['userid'];
}else{
return FALSE;
}
}
function get_level(){
$uid=$_COOKIE['uid'];
$userinfo=explode("|",$uid);
if($userinfo[0]&&$userinfo[1]&&$userinfo[1]==encode($userinfo[0])){
if($_SESSION['level']!=="0"){
return $_SESSION['level'];
}else{
return FALSE;
}
}else{
return FALSE;
}
}
function get_page_size(){
$sql="select num from page";
$res=mysql_my_query($sql);
$row=$res->fetch_assoc();
return $row['num'];
}
function set_page_size(){
$sql="update page set num=20";
$res=mysql_my_query($sql);
}
function get_uname($userid){
$sql="select uname from user where id='$userid'";
$res=mysql_my_query($sql);
$row=$res->fetch_assoc();
return htmlspecialchars($row['uname']);
}
结合之前扫描到存在 admin 目录
可以再来读取一下 admin 的文件
index.php
alert('not login!');";
echo("");
die();
// $result=mysql_my_query($sql);
}
?>
记事本管理系统
记事本管理系统后台
welcome:admin
userid:1
前条笔记
user
title
content
fetch_assoc()){
echo "";
echo "".get_uname($row['userid'])." ";
echo "".$row['title']." ";
echo "".$row['content']." ";
echo " ";
}
?>
© 记事本管理系统.
login.php
fetch_assoc(); //获取第一条记录
if($row['id']){
set_login($uname,$row['id'],$row['level']);
header("Location: ./index.php?action=admin&mode=index");
exit();
}else{
echo("");
}
}
?>
记事本管理系统
记事本管理系统后台
管理员登录
© 记事本管理系统.
alert('update success!');";
echo("");
}else{
echo "";
die();
}
}
}else{
echo "";
echo("");
die();
// $result=mysql_my_query($sql);
}
?>
记事本管理系统
记事本管理系统后台
设置显示条数
© 记事本管理系统.
这里存在二次注入
if($userid!==false&&$level!==false){
if(isset($_POST['page'])&&isset($_POST['TOKEN'])){
$page=$_POST['page'];
$TOKEN=$_POST['TOKEN'];
if($TOKEN!=$_SESSION['CSRF_TOKEN']){
die("token error!");
}
if(!is_numeric($page)){
die("page must be a number!");
}
if($page<1) $page=1;
$sql="update page set num=$page";
$res=mysql_my_query($sql);
if($res){
echo "";
echo("");
}else{
echo "";
die();
}
}
}else{
echo "";
echo("");
die();
// $result=mysql_my_query($sql);
}
通过二次注入拿到 :
database :
information_schema,ctf,mysql,performance_schema
ctf : tables :
flags,note,page,user
flags :
id,flag
page :
num
note :
id,content,title,userid
user :
id,uname,password,level,Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv,Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show
直接获取flag的内容为 :
admin 管理员的笔记 此内容无法删除 asla /5ebe2294ecd0e0f08eab7690d2a6ee69/reverseit 1
好像是一个路径 , 下载得到一个 .net 的二进制程序
逆向一下看看
只需要绕过这些正则匹配就可以了
最终flag为 :
EKO{ooOOoo_sup3r_r3g3x_challenge_OOooOO}