목록Hack/CTF (19)
CIDY
포너블중에 가장 쉬운 문제였다. 다른 거는 뭐가 쉬운지 모르겠어서 솔브 나오면 풀랬는데 거의 모든 문제가 한참동안 0솔이어서 다른 거 잡다가 관뒀다.. 나중에 보니 Shell이 그나마 할만해 보였던 것 같은데 해볼 걸 그랬나 ㅠㅠ //gcc -o chall chall.c -no-pie -z relro -O2 -fno-stack-protector#include #include #include #include uint32_t random_list[10] = {0,};uint64_t total_random = 0;void banner(){ printf(" __ _ _ \n"); ..
flash memory 일단 열어보면 가장 먼저 요 작업을 수행하는데, gdb에서 vmmap한 것 같은거(/proc/self/maps)를 한 줄씩 읽어오는거다. 그 중에서도 write권한이 있으며, heap, stack이 아닌 애들 주소를 xorxor함수에 돌려서 암호화해서 출력을 해 준다. 그리고 49c0에 배열로 길이 쭉 저장해놓고, 4940에 주소 쭉 저장해둔다. 그리고 addrs_48c0에는 진짜 주소들을 저장해둔다. write권한이 있는 쪽에 memcpy하기 때문에 주소만 다를 뿐 내부 값은 거의 다 가지고 있다. xorxor함수는 위와 같이 생겼는데, 주소 총 8바이트를 또 각 1비트씩 1인가 0인가 판단하면서 0혹은 0xedb88320을 xor하는데, 이게 내 머리로는 도저히 역연산을 짤 수..
보호되어 있는 글입니다.
커널공부 해보려니 이 문제가 ret2usr기법 활용으로 많이 보이는 것 같아서 풀어보기로 했다. https://github.com/ctf-wiki/ctf-challenges/tree/master/pwn/kernel/QWB2018-core 문제 파일은 여기서 다운로드할 수 있다. 다운로드해서 압축을 풀어보면 이런 파일들이 들어있다. bzImage는 커널 이미지 파일, start.sh는 실행 스크립트, vmlinux는 커널 컴파일 시 생성되는 elf파일로, 심볼이 들어 있다. 여기서 내가 모르는건 core.cpio파일이다. 이 파일은 뭘까? cpio는 아카이브 형태로 파일을 변형하지 않고 압축할 때 쓰인다고 한다. cpio파일을 압축 해제하는 방법을 검색해보니 어째서인지 .cpio.gz파일을 압축 해제하는 ..
#include #include #include #define NOTE_NUM 4 #define NOTE_SIZE 0x800 void print(const char *s) { if (write(STDOUT_FILENO, s, strlen(s))
이번 주말에 간단하게 했던 CTF다. 시험공부하다가 머리식히는 용으로 해서 막 본격적으로는 못했다. pwn말고도 크립토 포렌식 (엄청쉬운거였지만) 하나씩 더 풀었다. 커널문제 하나 빼고 포넙 셋다 솔브했는데 두번째문제가 리모트에서 타임아웃 + 로되리안 이슈로 말을 안 들어서 (게다가 준 도커파일도 안 돌아감..) 시험공부가 우선이라고 생각해서 접었다. Soulcode 간단한 쉘코딩 문제였다. seccomp이랑 자체 syscall명령어 필터링이 걸려있었는데 우회는 간단했다. 이유는 모르겠는데 메인함수만 디컴파일이 안 돼서 그냥 어셈으로 봤다. 대충 쉘코드 받고 실행시켜주는 내용이다. 그런데 filter랑 install_syscall_filter가 눈에 띈다. filter함수는 이렇게 생겼다. 블랙리스트는 ..
32비트 + 힙문제이다. 요즘 ctf에서 32비트도 힙도 잘 못 본 것 같은데 오랜만에 만난 힙이라 반가웠다. 위와 같이 메뉴 형식으로 돌아가는 전형적인 힙 문제의 구조였다. 취약점이 너무 분명하게 있고, 할당-해제를 꼬아 풀면 되는 문제라서 코드 하나하나를 자세히 읽지는 않았던 것 같다. 우선 취약점이다. 할당할때는 512로 할당하는데 수정할때는 528을 입력받는다. (심지어 할당 크기 max도 512인데, 528을 입력받는다.) comment(b"AAAA") comment(b"BBBB") comment(b"CCCC") comment(b"D" * 0x1ff + b"X") comment(b"EEEE") view() io.recvuntil(b"X") heap = u32(io.recvn(4)) print(h..
지난 주말에 했던 ctf인데, 물론 포너블만 풀었다. 동아리 팀에는 포너블 잘하시는 분들이 너무 많이 계셔서 앞으로는 솔플을 하면서 실력을 좀 다져야 겠다는 생각이 든다.. 총체적으로 문제 수준이 별로기는 했는데.. 그래도 더 삽질해보고 잡아보고 올솔브하고싶었는데 이래저래 할 일도 있고 해서 7/10 해버렸다. 쩝.. Inspector Gadget main함수 pwnme함수 mitigation 그냥 pwnme에서 오버플로우 넉넉히 주니 rop하라는 문제다. from pwn import * #p = process("./inspector-gadget") #e = ELF("./inspector-gadget") #libc = e.libc libc = ELF("./libc.so.6") p = remote("tam..