web基础

本篇是平常做题需要总结的知识点,在各大平台刷题时总结下来的,极其基础,各位师傅见笑了.

编码方案

url编码

url编码方案主要是用于对扩展ASCII字符集中的任何有问题的字符进行编码,使其可以通过HTTP安全的传输,任何url编码的字符都以%为前缀。其后是这个字符的两位16进制,ASCII代码。
需要知道的是其中+能代表url的空格。

Unicode编码

Unicode是一种支持全世界所使用的各种编写系统而设计的字符编码标准,它采用各种编码方案,其中可以用于表示web应用中不常见的字符。他以%u为前缀,与url编码相似。Unicode 是字符集,而 utf-8,utf-16,utf-32 是编码规则
其中,utf8是一种长度可变的编码标准,它是用一个或者几个字节表示每个字符。utf8编码的多字节字符以%为前缀

html编码

html编码是一种表示问题字符与以将其安全的并入HTML文档的方案。

base64编码

base64编码能仅用可打印的ASCII字符就可以传输任何二进制数据。
编码将输入数据转化为三个字节块,每个块分为4个段,每段为6个,数据为这6个数据位有64种不同的排列,因此每一个段可以用一组64个字符表示。
如果不能构成三个段输出数据,就用一个或两个等号补足输出。

16进制编码

有些二进制数据可以直接使用16进制编码。

php

php核心

php标记

在一次做题中,发现要上传<script language="php">的木马才能做出来,后来查了一下关于php标记问题.
在php5中:

  1. <?php echo 'if you want to serve XHTML or XML documents, do like this'; ?>
  2. <script language="php">
    echo 'some editors (like FrontPage) don't like processing instructions';
    </script>
  3. <? echo 'this is the simplest, an SGML processing instruction'; ?>
    <?= expression ?> This is a shortcut for "<? echo expression ?>"
  4. <% echo 'You may optionally use ASP-style tags'; %>
    <%= $variable; # This is a shortcut for "<% echo . . ." %>

上例中的 1 和 2 总是可用的,其中 1 是最常用,并建议使用的。

短标记(上例 3)仅在通过 php.ini 配置文件中的指令 short_open_tag 打开后才可用,或者在 PHP 编译时加入了 --enable-short-tags 选项。
其中例3第一个例子这种形式在html中不被解析,会被译为注释,第二个例子<?=expression?>等价于<?echo expression?>

ASP 风格标记(上例 4)仅在通过 php.ini 配置文件中的指令 asp_tags 打开后才可用。

在php7中:

例1被强力推荐,short_tag仍然可以使用,但是例2已经不在被解析,asp风格标记在此不做验证

验证源码如下:
验证脚本

php7:
QQ截图20190805142841.png

php5:
QQ截图20190805142921.png

php常见函数

is_numeric

is_numeric ( mixed $var ) : bool

Description

如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。
常常使用科学计数法,和在数字后加字符串进行绕过(弱类型比较才行)

strstr

strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] ) : string

Description:

Returns part of haystack string starting from and including the first occurrence of needle to the end of haystack.

substr

substr ( string $string , int $start [, int $length ] ) : string

Description:

Returns the portion of string specified by the start and length parameters.

parse_str

parse_str ( string $encoded_string [, array &$result ] ) : void

Description:

Parses encoded_string as if it were the query string passed via a URL and sets variables in the current scope (or in the array if result is provided).

md5

我们重点分析md5函数的漏洞:

  • md5无法处理数组,若传入数组,则函数返回NULL
  • php在弱类型比较中把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0
    payload常有:

    • QNKCDZO
    • 240610708
    • s878926199a
    • s155964671a
    • s214587387a
    • s214587387a
      更多详细查看这个链接:php弱类型比较

assert

assert ( mixed $assertion [, Throwable $exception ] ) : bool

Description:

如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行.

extract

extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] ) : int

Description:

Import variables from an array into the current symbol table.And return the number of the variables successfully imported into the symbol table.
若处理不当,可能产生extract变量覆盖漏洞,覆盖原有的变量值.

trim

trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string

Description:

This function returns a string with whitespace stripped from the beginning and end of str. Without the second parameter, trim() will strip(移除) these characters:

" " (ASCII 32 (0x20)), an ordinary space.
"\t" (ASCII 9 (0x09)), a tab.
"\n" (ASCII 10 (0x0A)), a new line (line feed).
"\r" (ASCII 13 (0x0D)), a carriage return.
"\0" (ASCII 0 (0x00)), the NUL-byte.
"\x0B" (ASCII 11 (0x0B)), a vertical tab.

However,And you can customize hte second parameter,like this blow:

$str = "Hello World!";
echo trim($str,"Hed!");
移除字符串两侧"Hello" 中的 "He" 以及 "World" 中的 "d!"

本文链接:

http://chrisyy.top/index.php/archives/4/
1 + 4 =
快来做第一个评论的人吧~