shellcode基礎知識


軟件漏洞名詞介紹

  • Vulnerability: 中文直譯為漏洞
  • Exploit:中文直譯為漏洞利用,他是能夠利用或觸發漏洞的一段代碼(或指導性思路),也就是漏洞的利用方法。Exploit 代碼/方法一般執行在攻擊者機器上,或執行在權限受限的環境中。
  • ShellCode:中文直譯為“殼代碼”,他是通過Exploit順利執行后,將一部分代碼以巧妙地方式在指定機器上以指定的權限運行,這段代碼被稱為ShellCode,ShellCode一般執行在被攻擊者的機器上,或執行在權限相對不受限的環境中。
  • PayLoad:中文直譯為“有效荷載”(一般指導彈的彈頭),PayLoad是ShellCode的一部分,ShellCode的執行往往是為了給PayLoad代碼開山鋪路,使其能夠按照攻擊者的意圖執行,也就是PayLoad部分是做具體壞事的那部分代碼。

學習順序

  • PayLoad部份
    -ShellCode部份
    -編寫Expliot
    -漏洞挖掘
  • 技術本質:編寫一段可以在任何程序上運行的代碼 *

典型的棧溢出

       int VerifyPassWord(char *pszPassword, int nSize)
        {
                  char szBuffer[50];
                  memcpy(szBuffer, pszPassword, nSize);
                  return strcmp(PASSWORD, szBuffer);
        } 
 
       int _tmain(int argc, _TCHAR* argv[])
        {
                  int nFlag = 0;
                  char szPassWord[0x200];
                  FILE *fp;
                  LoadLibraryA("user32.dll");

                  if (NULL == (fp = fopen("PassWord.txt", "rb")))
                  {
                   MessageBoxA(NULL, "打開文件夾失敗", "error", NULL);
                   exit(0);
                   }
 
                  fread(szPassWord, sizeof(szPassWord), 1, fp);
                  nFlag = VerifyPassWord(szPassWord, sizeof(szPassWord));
 
                  if (nFlag) printf("密碼錯誤\n");
                  else       printf("密碼正確\n");
                  fclose(fp);
                  system("pause");
                  return 0;
        }
  • 手動Fuzz測試
    ** 用一段連續的字符串,構造一個明顯會觸發溢出的文件
    • Step1. 程序崩潰
      a. 控制面板 > 管理工具 > 事件查看器 > Windows日志 > 應用程序
      b. 查看最后一次錯誤日志
      Step2. 尋找溢出點
      a. 利用順序字符串、二分法等定位溢出點
      b. 找到溢出點之后不要忘記驗證(重要)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM