利用TP5.0.24漏洞进行RCE尝试

需积分: 0 1 下载量 95 浏览量 更新于2024-08-05 收藏 965KB PDF 举报
"记一次tp5.0.241 - 先知社区" 这篇内容讲述了作者在探索一个基于ThinkPHP 5.0.24版本的网站时的经历,该版本通常被认为没有远程代码执行(RCE)漏洞。作者首先表明这个网站是一个非法站点,所以不用担心未授权访问的问题。在尝试过程中,他们首先发送了一个错误报告,发现网站运行的是ThinkPHP 5.0.24。 接着,作者尝试利用可能存在的漏洞进行攻击。他们使用了一个特定的URL参数组合,例如`_method=__construct&method=get&filter[]=call_user_func&get[]=phpinfo`,成功触发了PHP的`phpinfo()`函数,这表明可能存在某种形式的安全问题,因为`call_user_func`函数通常用于执行用户提供的函数,如果未经适当过滤,可能会导致代码执行。 在发现能够执行某些函数后,作者试图利用`file_put_contents`函数创建一个名为`axgg.php`的文件并写入`phpinfo()`,但未能成功。随后,他们尝试了其他几种攻击方法,如通过`index/think\app/invokefunction`接口使用`call_user_func_array`函数来执行代码,以及利用session包含来执行PHP代码,但这些尝试也都失败了。 这些尝试展示了针对ThinkPHP框架的渗透测试技巧,包括利用构造函数、过滤器、函数调用等手段尝试RCE。尽管在这个特定的5.0.24版本中没有直接的成功,但它提醒我们,即使被认为安全的版本也可能存在未知的脆弱性,而且不断尝试和测试是网络安全防护的重要部分。 在实际应用中,开发者应当注意限制并过滤输入参数,避免使用可能引发代码执行的函数,同时及时更新框架到最新安全版本,以减少被攻击的风险。对于安全研究人员而言,理解这些漏洞利用技巧有助于发现和修复潜在的安全问题。

修改这个函数,要实现防止连续点按 while (1) { tp_dev.scan(0); if (tp_dev.sta & TP_PRES_DOWN) { //触摸屏被按下 if (tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 0 && tp_dev.x[0] < 130 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] = '1'; } } else if (tp_dev.x[0] > 130 && tp_dev.x[0] < 260 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 130 && tp_dev.x[0] < 260 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] = '2'; } } else if (tp_dev.x[0] > 260 && tp_dev.x[0] < 390 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 260 && tp_dev.x[0] < 390 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] ='3'; } } else if (tp_dev.x[0] > 390 && tp_dev.x[0] < 520 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 390 && tp_dev.x[0] < 520 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i < 5) { password[i++] = '4'; } } else if (tp_dev.x[0] > 520 && tp_dev.x[0] < 650 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 520 && tp_dev.x[0] < 650 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i > 0) { password[--i] = '\0'; } } else if (tp_dev.x[0] > 650 && tp_dev.x[0] < 800 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480) { while(tp_dev.x[0] > 650 && tp_dev.x[0] < 800 && tp_dev.y[0] > 380 && tp_dev.y[0] < 480){ tp_dev.scan(0); } if (i == 4) { break; //退出密码输入循环 } else { Show_Hz16(300,250,"提示信息:用户名或密码错误",RED,WHITE); } } //显示部分 LCD_ShowString(400,150,400,24,24,password); } }

2023-05-22 上传