小组任务1(phpbug#69892)
参考文献:https://github.com/CHYbeta/Code-Audit-Challenges
1.php的Bug#69892
$users = array(
"0:9b5c3d2b64b8f74e56edec71462bd97a" ,
"1:4eb5fb1501102508a86971773849d266",
"2:facabd94d57fc9f1e655ef9ce891e86e",
"3:ce3924f011fe323df3a6a95222b0c909",
"4:7f6618422e6a7ca2e939bd83abde402c",
"5:06e2b745f3124f7d670f78eabaa94809", //hund
"6:8e39a6e40900bb0824a8e150c0d0d59f",
"7:d035e1a80bbb377ce1edce42728849f2",
"8:0927d64a71a9d0078c274fc5f4f10821",
"9:e2e23d64a642ee82c7a270c6c76df142",
"10:70298593dd7ada576aff61b6750b9118"
);
$valid_user = false;
$input = $_COOKIE['user'];
$input[1] = md5($input[1]);
foreach ($users as $user)
{
$user = explode(":", $user);
if ($input === $user) {
$uid = $input[0] + 0;
$valid_user = true;
}
}
if (!$valid_user) {
die("not a valid user\n");
}
if ($uid == 0) {
echo "Hello Admin How can I serve you today?\n";
echo "SECRETS ....\n";
} else {
echo "Welcome back user\n";
}
题目其实很容易理解,就是输入user[0]和user[1]
,其中user[0]==0
且user[1]=$users中的任意一个
看见0~10这些内容第一反应就是md5解密,都试过一遍之后发现只有第五个能解出来,user[0]=5;user[1]=hund
这个就可以得到你是普通用户的欢迎信息了,但是想要的是管理员的,所以得尝试将$uid=0
这个条件实现,这个时候就需用到php的Bug#69892
[2015-06-20 14:29 UTC] nikic@php.net 描述: ------------
var_dump([0 => 0] === [0x100000000 => 0]); //布尔(true)
所有版本:http://3v4l.org/Sjdf8</pre>
php运行在32位系统的会将数组的键 0x100000000=2^32=4294967296 变换为字符串,而在64位系统会直接 数组中的键4294967296 为unsigned long 类型 且等同于0
- 最后的payload
Cookie: user[4294967296]=5;user[1]=hund;
2.PHP 0819
<?php
// closure, because of namespace!
$challenge = function()
{
$f = Common::getGetString('eval');
$f = str_replace(array('`', '$', '*', '#', ':', '\\', '"', "'", '(', ')', '.', '>'), '', $f);
if((strlen($f) > 13) || (false !== stripos($f, 'return'))){
die('sorry, not allowed!');
}
try{
eval("\$spaceone = $f");
}
catch (Exception $e){
return false;
}
return ($spaceone === '1337');
};
?>
通过get的eval参数
传入并赋值到变量f,然后经过str_replace()的过滤,要求长度小于13,并且不包含字符串return,接着执行eval,然后让`spaceone === '1337'返回True。最后一行
spaceone === '1337'`,要求类型和值都得相等。看一下str_replace(),过滤了单引号,双引号,所以如果直接get传参`index.php?eval='1337'`进去,在经过过滤后,到最后会变为spaceone=1337,不等。
可以用heredoc
构造绕过单引号
<<<EOF
内容
EOF;
内容中不能包括特殊符号,以一个变量起始,以相同的变量名+;
结束(还要再加上一个换行符!)
- 最终payload
?eval=<<<s%0a1337%0as;%0a

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
python+pytest单元测试框架之介绍
前言 pytest是Python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。pytest是一个成熟的全功能的Python测试工具,可以帮助你写出更好的程序,让我们很方便的编写测试用例。适合从简单的单元到复杂的功能测试。有很多的第三方插件可以自定义扩展,并且支持allure。 一、pytest介绍 pytest官方文档 1.能够支持简单的单元测试和复杂的功能测试 2.执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败 3.支持重复执行失败的case 4.支持运行由nose, unittest编写的测试case 5.具有很多第三方插件,并且可以自定义扩展 6.方便的和持续集成工具集成 7.支持参数化 二、安装pytest 1.在CMD窗口下输入以下指令 >pip install -U pytest # 通过pip安装 >py.test --version # 查看pytest版本 2.安装插件 pytest-html(自动生成HTML格式测试报告) pytest-descr...
-
下一篇
基于 Django 的手机管理系统
前段时间和小组一起完成数据库作业,觉得收获挺多的,分享到博客来。 一、概述 打算通过设计数据库,然后结合 Python 框架Django,实现在网页上对数据库的增删改查(本例以手机的管理为例,不考虑订购功能),有普通用户界面和管理员用户界面,普通用户只能做简单的查看需求,管理员用户可以实现对数据库内容的实时修改。网站主体如下图: 二、设计数据库 根据业务需求,设计数据表,需要下列这些属性:手机型号、品牌、手机描述、出厂年份、价格、照片、产地。根据数据表设计原则,数据表设计需要满足基本的函数依赖和范式要求,因此我们将上述属性拆分为四张表格,并建立这些数据表之间的联系,相关的E-R 图如图所示:(由于 Django 在建立每一个数据表的时候就会有一个内建的 id 作为主键,因此在此就不需要另外再设置主键字段) 此数据库字段由于是我从 sqlite 迁移到 MySQL 中,Django 自动帮我再生成的字段,所以有些字段名和我在 Django 写的字段不一致,但数据表关系还是一致的。 在 Django 中设计数据表相关代码如下: from django.db import models...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8编译安装MySQL8.0.19
- MySQL数据库在高并发下的优化方案
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池