전체 글 64

[PWNABLE] 시스템 해킹_연습문제5

해당 문제는 pwnable.kr에서 제공하는 passcode문제입니다. passcode라는 문제로 밑의 코드를 보면 scanf함수를 사용할 때 주소 연산자를 사용하지 않아 주소 값을 입력받는 듯한 형식으로 되어 있습니다. 이것을 이용하여 문제를 풀어야합니다. gdb를 이용하여 밑의 welcome함수와 login함수를 확인하면 welcome의 name함수와 login의 passcode1의 변수의 위치 차이를 확인할 수 있는데 위치는 96만큼 떨어진 것을 볼 수 있습니다. 그렇기에 name변수의 97바이트부터 100바이트까지에 주소 값을 입력하면 passcode1 변수의 값을 수정할 수 있게 됩니다. 이때부터는 GOT를 이용하여 문제를 풀어야 하는데 지금 상황으로 GOT를 실제주소로 이해하고 있습니다. 하지..

[TeamH4C_CTF] UMDCTF2021 write-up

UMDCTF에 많은 시간을 할당하지 못하여 문제를 풀지 못하였는데 참여 경험으로도 많은 도움이 되었습니다. 기본적인 문제였던 것 같았지만 본격적인 pwnable문제를 접하면서 더욱 공부가 필요하다는 것을 느꼈습니다. 이번 연도에는 확실하게 더욱 알기 위해 많은 시간을 투자해야겠다고 생각을 하게 만든 대회였습니다. 이제 writeup을 작성해보겠습니다. reverse engineering, misc, pwnables, crypto, forensics, advantageous adventures, web, steganography, osint, programming 문제 중 pwnables와 forensics문제를 정리해보겠습니다. pwnables 첫 번째 pwnable문제로 메모리 보호 기법을 확인하면 N..

[TeamH4C_CTF] 2021 HackPack write-up

부족하지만 HackPack에서 진행한 CTF를 참여한 후, 문제를 정리해보았습니다. ctf2021.hackpack.club/ HackPack CTF An educational CTF that aims to complement security courses at North Carolina State University ctf2021.hackpack.club pwn, reverse, web, misc의 문제 구성으로 짜여있었으며 저는 web과 reverse문제를 풀었으며, pwn은 대회가 끝난 후 팀원이 먼저 풀었던 문제를 재구성하여 풀어보았습니다. pwnable 기초 pwn문제로 system함수를 이용하여 권한을 획득하는 형식입니다. hint를 보게 되면 디버깅을 하라고 되어있기에 chal파일을 디버깅해보..

[TeamH4C_pwn] 포너블 문제 연습

안녕하세요! 이번에는 pwnable에 대한 기초적인 문제를 만들어 보았습니다. pwnable 1 #define _CRT_SECURE_NO_WARNINGS #include #include int main() { int key; char buf[50]; printf("buf: 0x%p key: 0x%p\n", &buf, &key); fflush(stdout); gets(buf); fflush(stdout); if (key == 0x44454144) system("/bin/bash"); } 아래와 같이 ASLR기법을 해제하고 컴파일을 하여 32비트로 컴파일하면서 NX가 적용되지 않도록 해줍니다. NX비트의 적용방법으로는 아래의 주석과 같습니다. sysctl -w kernel.randomize_va_space=..

[TeamH4C_PWNABLE] 시스템 해킹_연습문제9

이번 문제는 Toddler's Bottle에 9번째 문제인 mistake를 풀어보겠습니다. 접속 정보는 아래의 그림과 같이 mistake user에 pwnable.kr host서버이며, port는 2222번이고, guest password를 가졌습니다. 접속하여 사용자 디렉터리의 파일들을 확인하고 소스파일을 살펴본 후, 해당 실행파일을 실행하였습니다. 먼저 실행하여 아무 숫자나 적었을 때 종료되지 않아 코드를 다시 살펴보았는데 길이를 10만큼 받아 함수에 넣는 것을 볼 수 있어 10자리가 되어야 한다는 것을 알 수 있었고 fd의 값이 연산 순위가 잘못되어 있어 0이 되는 것을 알 수 있었습니다. 여기서 사용자로부터 fd를 10바이트 읽어 들여 pw_buf에 저장시킨 후 scanf함수로 pw_buf2를 입..