軟件漏洞名詞介紹
- 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. 找到溢出點之后不要忘記驗證(重要)
