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