邪恶的strip_tags()函数

简介:  爆人品的一次.下了个loudblog最新版看看,好像是0.8inc/buildwebsite.
 爆人品的一次.
下了个loudblog最新版看看,好像是0.8
inc/buildwebsite.php里:
//template required by URL? Override template-setting
if (isset($_GET['template'])) {
    $requested_template = killevilcharacters(strip_tags($_GET['template']));
    $settings['template'] = $requested_template;

}

//building the right path to required template
$templpath = $GLOBALS['templatepath'] .
             $settings['template'];//. "/index.html";
//
//copies template into variable
$connect = @fopen ($templpath, "rb") OR die("Unfortunately I could not find a valid template! $templpath");
$template = fread ($connect, 262144);
fclose($connect);
$_GET['template']最终会带到fopen里,但前面经过了strip_tags函数和killevilcharacters函数的检查,strip_tags是过滤HTML和PHP标签的,那就看下killevilcharacters函数过滤了什么东西
同目录下的function.php:
#################################################
#################################################

function killevilcharacters($text) {
    $trans       = array();
    $trans[" "] = '';
    $trans[".."] = '';
    $trans["/"] = '';
    $trans["'"] = '';
    $trans['"'] = '';
    $trans['"'] = '';
    $trans['<'] = '';
    $trans['>'] = '';

    return strtr($text, $trans);
}

#################################################
#################################################
看来作者意识到之前这个变量出过LFI的漏洞,所以对目录的操作限制了一下,可惜没有过滤. 和/
可以很轻松的构造出跳转的URL如下:
index.php?template=/././%5c/././%5c/././%5c/././%5c/././%5cINSTALL.txt%00
用/././就把..带进去了
理论上这个漏洞是成功利用了,确实函数写的过滤不严格,可以绕过得,可问题就是根本读不出文件,%00并没有截断后面的/index.html,找了很多可能出现过滤得地方都没有发现原因,还有哪里会出问题呢...
最后只能回到strip_tags函数上,根本没抱希望的测试了下
$b = strip_tags($_GET['a']);
include "$b.php";
居然%00被过滤掉了... 手册里没提到这函数还有这个特性啊...
还有多少这种小地方是我们不知道的呢-_-
目录
相关文章
|
8月前
|
存储 缓存 数据库连接
Python基础教程——字典(Dictionary)
Python基础教程——字典(Dictionary)
Python中strip()、lstrip()和rstrip()方法的区别与用法详解
在Python中,字符串是一种常见的数据类型,而处理字符串时,经常会用到 strip()、lstrip() 和 rstrip() 这几个方法。它们都用于删除字符串开头和/或结尾的指定字符或字符集合,但在具体使用时有一些区别。
|
8月前
GEE错误:Dictionary does not contain key: bucketMeans.
GEE错误:Dictionary does not contain key: bucketMeans.
86 0
|
Python
Python:字符串基操_strip()/rstrip()/lstrip()_lower()/upper()_startswith()/endswith()_split()/rspilt()_join
Python:字符串基操_strip()/rstrip()/lstrip()_lower()/upper()_startswith()/endswith()_split()/rspilt()_join
236 0
|
前端开发 PHP
TP5 使用strip_tags过滤html标签不起作用的解决方法
TP5 使用strip_tags过滤html标签不起作用的解决方法
293 0
|
存储 JavaScript Python
Python基础教程之dict和set
Python基础教程之dict和set
使用 English words 包生成文本来替换字符串“Hello World”.
使用 English words 包生成文本来替换字符串“Hello World”.
117 0
|
JavaScript 前端开发 测试技术
Array.from() 五个超好用的用途
任何一种编程语言都具有超出基本用法的功能,它得益于成功的设计和试图去解决广泛问题。
157 0
|
Unix C++ Windows
回车"(carriage return)和"换行"(line feed)的区别和来历
这两天研究小票打印机编程手册,遇到这样一个问题: LF,即Line Feed,中文意思“换行”;CR,即Carriage Return,中文意思“回车”。
4946 1