Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 해당 프로그램에서 취약성을 이해하기 위해 ACCOUNT 구조체에 대한 이해가 필요합니다.
    • 해당 구조체는 전역 변수로 선언되어 있습니다.
    • 해당 프로그램은 3개의 ACCOUNT 구조체를 사용합니다.
      • 첫번째 구조체에는 'Admin' 계정 정보가 저장되어 있습니다.
      • 2,3번째 구조체는 사용자가 생성한 계정의 정보가 저장됩니다.
Panel
0x6042400x604220Admin.stateAdmin.number
0x604240604230Admin.fdAdmin.bk
0x604240gAccount[1].stategAccount[1].number
0x6042400x604250gAccount[1].fdgAccount[1].bk
0x6042400x604260gAccount[2].stategAccount[2].number
0x6042400x604270gAccount[2].fdgAccount[2].bk
  • House of lore 취약성은 다음과 같은 Fake chunk가 필요합니다.
    • 다음과 같이 
Panel
titleFake chunk
0x604220Admin.stateAdmin.number
0x604230Admin.fdAdmin.bk
0x604240gAccount[1].stategAccount[1].number
0x604250gAccount[1].fd = Free chunk head - 0x16gAccount[1].bk = 0x604268
0x604260gAccount[2].stategAccount[2].number
0x604270gAccount[2].fdgAccount[2].bk = 0x604240


  • 다음과 같이 House of lore 취약성에 필요한 Fake chunk를 생성할 수 있습니다.
    • delAccount() 함수를 이용해 gAccount[1].fd 영역에 Free chunk의 Head 주소를 저장 할 수 있습니다.


Panel
0x604240gAccount[0].stategAccount[0].number
0x604240gAccount[0].fdgAccount[0].bk
0x604240gAccount[1].stategAccount[1].number
0x604240gAccount[1].fdgAccount[1].bk
0x604240gAccount[2].stategAccount[2].number
0x604240gAccount[2].fdgAccount[2].bk




Code Block
struct ACCOUNT{
    long state;
    long number;
    struct IDPW *fd;
    long bk;
};

...