Unsorted bin attack이 가능하고, 전역변수로 힙이 관리되면서, 이를 수정할수 있고, 전역변수의 주소를 알수 있다. 대충 이런 조건이면 Unsorted bin attack만을 활용해서 쉘을 얻어낼 수 있다. 힙베릭, 립베릭, 빈베릭 ( If PIE )가 필요하긴한데, 위 조건을 만족하면 view만 있으면 다 릭할 수 있으니까 크게 상관 없다. 빈베릭이 걸리기는 하지만... 어쨋든 이런 조건이면 전역변수에다가 Unsorted bin attack 으로 main_arena + 88 을 적어준다. 보통 Unsorted bin attack이후의 malloc은 main_arena가 꼬이면서 에러를 뱉는데, 여기서 Edit을 통해서 main_arena를 고쳐줄 수 있다. 이를 고치면서, 뒷부분에는 one..
off by one 으로 인해서 heap_amount부분에 할당이 된다. 이걸로 적당히 조져서 unsafe unlink해주고 적당히 쉘따면 된다.
힙오버 있으니까 그걸로 릭하고덮어서 aaw 만들고그걸로 fucntion ptr 덮고nx없으니 쉘코드 올리면 된다.옵셋 대충짠건지 한방에는 잘 안따인다 여러번 해야할듯
전에 풀어야지 올려놓고 글도 써놓고 까먹고 있다가 이제와서 푼다. 문제보면 message 부분에서 bof를 준다. 막 A넣어보면, fmt.padString부분에서 에러가 난다. ida로 까서 스택보면 stdin부분이 덮히는 걸 볼 수 있다. 이부분을 맞춰주면 되는데, printf가 2번 호출됨으로, 2개 맞춰주면 된다. 그 후에는 걍 c바이너리 rop하듯 rop 해주면 되는데, 왜인지 모르겠지만 syscall이후에 체이닝이 정상적으로 안됐다. 그래서 read => execve는 포기하고, mov [rdi], rax를 이용해서 /bin/sh를 쓰고, 쉘을 땄다.
제목 그대로 unsorted bin 을 통해서 하는 libc leak 없이 진행될수 있는 fastbin duplicate다. 간단하게 got에도 libc 주소가 0x7f~~꼴로 들어가니까 이걸 써서 할수도 있는데, 지금 해볼건 조금 다른거다. 다음같은 조건이 있을경우 써먹을 수 있다. 1. bss영역에 heap pointer가 존재할것.2. view메뉴가 있을것 ( 상황에 따라 생략 가능 )3. bss에 stdin, stdout 중 하나가 있을것4. Heap edit가 가능할것 이 4가지만 있으면 간단하게 fastbin duplicate가 가능하다. bss에는 보통 stdin, stdout이 있는데, 이건 libc영역에 존재하는것이라, 0x7f~~꼴의 주소를 가지게 된다. 이를 이용해서 이부분에 fake..
왜인지는 모르겠는데 비교중에 비교값이 맞으면 rdx에 값을 세팅해주는거 같다. 혹시라도 pop rdx없으면 이거라도 써먹자ㅠㅠ
특정 문제에서 쓸려고 원래 reverse shellcode 에서 어떻게든 줄여봤다,,, 문제는 더 줄이던가 다른방법을 찾아봐야 한다는것,,,
만약 Free된 청크를 Realloc 시킨다면 어떻게 될까. 만약 저장되는 bin 이 바뀐다면, realloc 시 DFB가 터지게 된다. 하지만, 이런코드에서는 다음같이, Free된 같은 주소를 받아낼 수 있다. 이말은 Fastbin일경우 Free된 fd를 control이 가능하단 얘기이다 (grin)~
menu_input 함수에서