⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dce2_smb.c

📁 snort2.8.4版本
💻 C
📖 第 1 页 / 共 5 页
字号:
                switch (wct)                {                    case 12:                        break;                    default:                        alert = 1;                        break;                }                break;            case SMB_COM_RENAME:                switch (wct)                {                    case 0:                        break;                    default:                        alert = 1;                        break;                }                break;            default:                DCE2_Log("%s(%d) => Word count check for unused command: 0x%02x\n",                         __FILE__, __LINE__, com);                break;        }    }    if (alert)    {        DCE2_Alert(&ssd->sd, DCE2_EVENT__SMB_BAD_WCT, dce2_smb_coms[com], wct);        return -1;    }    return SMB_COM_SIZE(wct);}/******************************************************************** * Function: * * Purpose: * * Arguments: * * Returns: * ********************************************************************/static int DCE2_SmbGetBcc(DCE2_SmbSsnData *ssd, const SmbNtHdr *smb_hdr,                          const SmbCommon *com_ptr, const uint16_t com_size, const int com){    const int smb_type = SmbType(smb_hdr);    const uint8_t wct = SmbWct(com_ptr);    const uint16_t bcc = SmbBcc((uint8_t *)com_ptr, com_size);    int alert = 0;    if (smb_type == SMB_TYPE__REQUEST)    {        switch (com)        {            case SMB_COM_NEGPROT:                if (bcc < 2)                    alert = 1;                break;            case SMB_COM_SESS_SETUP_ANDX:                break;            case SMB_COM_LOGOFF_ANDX:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_TREE_CON:                if (bcc < 4)                    alert = 1;                break;            case SMB_COM_TREE_CON_ANDX:                if (bcc < 3)                    alert = 1;                break;            case SMB_COM_TREE_DIS:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_OPEN:                if (bcc < 2)                    alert = 1;                break;            case SMB_COM_OPEN_ANDX:                if (bcc < 1)                    alert = 1;                break;            case SMB_COM_NT_CREATE_ANDX:                break;            case SMB_COM_CLOSE:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_WRITE:                if (bcc < 3)                    alert = 1;                break;            case SMB_COM_TRANS:                break;            case SMB_COM_TRANS_SEC:                break;            case SMB_COM_WRITE_AND_CLOSE:                if (bcc < 1)                    alert = 1;                break;            case SMB_COM_WRITE_BLOCK_RAW:                break;            case SMB_COM_WRITE_ANDX:                break;            case SMB_COM_READ:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_READ_BLOCK_RAW:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_READ_ANDX:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_RENAME:                if (bcc < 4)                    alert = 1;                break;            default:                DCE2_Log("%s(%d) => Byte count check for unused command\n", __FILE__, __LINE__);                break;        }    }    else  /* it's a response */    {        switch (com)        {            case SMB_COM_NEGPROT:                break;            case SMB_COM_SESS_SETUP_ANDX:                break;            case SMB_COM_LOGOFF_ANDX:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_TREE_CON:                break;            case SMB_COM_TREE_CON_ANDX:                if (bcc < 3)                    alert = 1;                break;            case SMB_COM_TREE_DIS:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_OPEN:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_OPEN_ANDX:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_NT_CREATE_ANDX:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_CLOSE:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_WRITE:                switch (wct)                {                    case 1:                        break;                    default:                        alert = 1;                        break;                }                break;            case SMB_COM_TRANS:                switch (wct)                {                    case 0:  /* Interim Transact response - no data */                        if (bcc != 0)                            alert = 1;                        break;                    default:                        break;                }                break;            case SMB_COM_WRITE_AND_CLOSE:                break;            case SMB_COM_WRITE_BLOCK_RAW:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_WRITE_COMPLETE:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_WRITE_ANDX:                if (bcc != 0)                    alert = 1;                break;            case SMB_COM_READ:                if (bcc < 3)                    alert = 1;                break;            case SMB_COM_READ_ANDX:                break;            case SMB_COM_RENAME:                if (bcc != 0)                    alert = 1;                break;            default:                DCE2_Log("%s(%d) => Byte count check for unused command\n", __FILE__, __LINE__);                break;        }    }    if (alert)    {        DCE2_Alert(&ssd->sd, DCE2_EVENT__SMB_BAD_BCC, dce2_smb_coms[com], bcc);        return -1;    }    return bcc;}/******************************************************************** * Function: * * Purpose: * * Arguments: * * Returns: * ********************************************************************/static INLINE DCE2_Ret DCE2_SmbCheckComSize(DCE2_SmbSsnData *ssd, const uint32_t nb_len,                                            const uint16_t com_len, const int smb_com){    if (nb_len < com_len)    {        DCE2_Alert(&ssd->sd, DCE2_EVENT__SMB_NB_LT_COM,                   dce2_smb_coms[smb_com], nb_len, com_len);        return DCE2_RET__ERROR;    }    return DCE2_RET__SUCCESS;}/******************************************************************** * Function: * * Purpose: * * Arguments: * * Returns: * ********************************************************************/static INLINE DCE2_Ret DCE2_SmbCheckBcc(DCE2_SmbSsnData *ssd, const uint32_t nb_len,                                        const uint16_t bcc, const int smb_com){    if (nb_len < bcc)    {        DCE2_Alert(&ssd->sd, DCE2_EVENT__SMB_NB_LT_BCC,                   dce2_smb_coms[smb_com], nb_len, bcc);        return DCE2_RET__ERROR;    }    return DCE2_RET__SUCCESS;}/******************************************************************** * Function: * * Purpose: * * Arguments: * * Returns: * ********************************************************************/static INLINE DCE2_Ret DCE2_SmbCheckDsize(DCE2_SmbSsnData *ssd, const uint32_t nb_len,                                          const uint16_t dsize, const uint16_t bcc, const int smb_com){    if (nb_len < dsize)    {        DCE2_Alert(&ssd->sd, DCE2_EVENT__SMB_NB_LT_DSIZE,                   dce2_smb_coms[smb_com], nb_len, dsize);        return DCE2_RET__ERROR;    }    else if (bcc < dsize)    {        DCE2_Alert(&ssd->sd, DCE2_EVENT__SMB_BCC_LT_DSIZE,                   dce2_smb_coms[smb_com], bcc, dsize);        return DCE2_RET__ERROR;    }    return DCE2_RET__SUCCESS;}/******************************************************************** * Function: * * Purpose: * * Arguments: * * Returns: * ********************************************************************/static INLINE DCE2_Ret DCE2_SmbCheckTotDcnt(DCE2_SmbSsnData *ssd, const uint16_t dcnt,                                            const uint16_t total_dcnt, const int smb_com){    if (total_dcnt < dcnt)    {        DCE2_Alert(&ssd->sd, DCE2_EVENT__SMB_TDCNT_LT_DSIZE,                   dce2_smb_coms[smb_com], (int)total_dcnt, (int)dcnt);        return DCE2_RET__ERROR;    }    else if (total_dcnt == 0)    {        DCE2_Alert(&ssd->sd, DCE2_EVENT__SMB_TDCNT_ZERO, dce2_smb_coms[smb_com]);        return DCE2_RET__ERROR;    }    return DCE2_RET__SUCCESS;}/******************************************************************** * Function: * * Purpose: * * Arguments: *  uint8_t * - pointer to where the offset would take us. *  uint8_t * - pointer to bound offset *  uint8_t * - length of data where offset should be within * * Returns: *  DCE2_RET__SUCCESS - Offset is okay. *  DCE2_RET__ERROR   - Offset is bad. * ********************************************************************/static INLINE DCE2_Ret DCE2_SmbCheckOffset(DCE2_SmbSsnData *ssd, const uint8_t *off_ptr,                                           const uint8_t *start_bound, const uint32_t length,                                           const int smb_com){    /* Offset should not point within data we just looked at or be equal to     * or beyond the length of the NBSS length left */    if ((off_ptr < start_bound) ||        (off_ptr > (start_bound + length)))    {        DCE2_Alert(&ssd->sd, DCE2_EVENT__SMB_BAD_OFF, dce2_smb_coms[smb_com],                   off_ptr, start_bound, start_bound + length);        return DCE2_RET__ERROR;    }    return DCE2_RET__SUCCESS;}/******************************************************************** * Function: * * Purpose: * * Arguments: *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -