hacking(13)
-
[Dreamhack] baby-bof
#include #include #include #include #include #include #include void proc_init () { setvbuf (stdin, 0, 2, 0); setvbuf (stdout, 0, 2, 0); setvbuf (stderr, 0, 2, 0); } void win () { char flag[100] = {0,}; int fd; puts ("You mustn't be here! It's a vulnerability!"); fd = open ("./flag", O_RDONLY); read(fd, flag, 0x60); puts(flag); exit(0); } long count; long value; long idx = 0; int main () { char n..
2023.12.10 -
[ codegate - pwn] librarian
main __int64 __fastcall main(__int64 a1, char **a2, char **a3) { unsigned int v3; // eax int v5; // [rsp+8h] [rbp-798h] BYREF int v6; // [rsp+Ch] [rbp-794h] char book_list[1928]; // [rsp+10h] [rbp-790h] BYREF unsigned __int64 v8; // [rsp+798h] [rbp-8h] v8 = __readfsqword(0x28u); sub_184C(); v3 = time(0LL); srand(v3); memset(book_list, 0, 0x780uLL); while ( book_num 14 ) { puts("The book list is ..
2023.06.18 -
[ CCE 사이버공격방어대회 ] n0t rand0m
우리 팀이 예선 7등으로 본선을 가게 되었다. 그런데 좀 아쉬운 점은 내가 개인사정으로 인해 본선날에 시간이 안 돼서 못 간다 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 전체 코드 void __fastcall __noreturn main(int a1, char **a2, char **a3) { unsigned int v3; // eax unsigned int nbytes; // [rsp+0h] [rbp-30h] unsigned int case_1; // [rsp+4h] [rbp-2Ch] char name[8]; // [rsp+8h] [rbp-28h] BYREF char comment[24]; // [rsp+10h] [rbp-20h] BYREF unsigned __int64 v8; // [rsp+28h] [rbp-8..
2023.06.12 -
[ Dreamhack ] house_of_spirit
house of spirit은 free함수를 통해 자신이 원하는 임의의 메모리를 해제할 수 있을 때 사용할 수 있는 공격 기법이다. tcache는 속도 등 여러가지 이유로 보안 검사들이 많이 생략되어 있다. 그래서 stack에 실제 tcache 청크와 같은 구조를 가지는 청크를 구성하고 해당 영역을 free하면 stack 영역을 해제하여 tcache에 stack 영역을 넣을 수 있다. 그리고 ptmalloc은 비슷한 크기의 요청이 오면 재사용 한다는 특징이 있다. 이를 통해 stack 주소로 동적 할당을 받을 수 있다. 만약 해당 프로그램에서 동적 할당을 받은 뒤 그 할당받은 주소에 입력을 줄 수 있다면 bof가 발생할 수도 있고 그 프로그램의 지역변수 등을 바꿀 수 있다. 위 코드와 같이 data의 주..
2023.05.28 -
[ Dreamhack ] Kind kid list
int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { char password[8]; // [rsp+0h] [rbp-E0h] BYREF __int64 v4; // [rsp+8h] [rbp-D8h] char name[8]; // [rsp+10h] [rbp-D0h] BYREF __int64 v6; // [rsp+18h] [rbp-C8h] char dest[8]; // [rsp+20h] [rbp-C0h] BYREF __int64 v8; // [rsp+28h] [rbp-B8h] char kid_list[132]; // [rsp+30h] [rbp-B0h] BYREF char src[8]; // [rsp+B4h] [rbp-2Ch]..
2023.05.23 -
[ Dreamhack ] STACK_AEG
이 문제는 nc로 접속을 하면 base64 인코딩이 된 바이너리를 출력해준다. 이를 디코딩하고 분석해서 쉘을 20단계모두 따서 sub flag 인증에 성공하면 플래그를 준다. 한 단계마다 중어진 시간은 10초이고 바이너리에서 bof가 발생하지만 buf의 위치가 계속해서 바뀌기 때문에 buf의 위치를 자동으로 분석해서 진행해야 한다. 바이너리 분석 read에서 bof터지고 카나리는 read바로 아래 printf에서 릭하고 shell함수로 ret바꾸면 되는데 문제는 저걸 자동으로 분석해야한다. 익스 시나리오 base64 인코딩된 바이너리를 받아오고 os.system을 활용해서 base64디코딩한뒤 그 값을 파일에 저장한다. 그 파일을 대상으로 objdump를 사용해서 main함수를 디스어셈블하고 read를 ..
2023.05.04