풀이
-
[TJCTF 2019] Slice of PIE write upCTF Write-Up 2019. 4. 18. 11:36
PIE에 관한 문제입니다. PIE란? Position Independent Executable의 줄임말로, 전체가 위치 독립 코드로 이뤄진 실행 가능한 바이너리입니다. PIE는 위치 독립 실행파일이고, 실행할 때마다 매핑되는 주소가 어디든지에 상관없이 시행되는 파일로, 바이너리의 주소를 랜덤화 하여 바이너리의 특정 주소의 값을 수정하는 것과 같은 공격을 방어합니다. Ref : https://bpsecblog.wordpress.com/2016/06/10/memory_protect_linux_4/ 풀이를 위해 어떤 파일인지 알아봅시다. 해당 바이너리는 NX, PIE, Full RELRO가 걸려있습니다. 또 stripped되어있어서 심볼이 삭제되어 있습니다. 다음으로 디컴파일을 해보겠습니다. main()에서 ..
-
Stack7 풀이System hacking training/Protostar 2019. 4. 11. 01:50
#include #include #include #include char *getpath() { char buffer[64]; unsigned int ret; printf("input path please: "); fflush(stdout); gets(buffer); ret = __builtin_return_address(0); if((ret & 0xb0000000) == 0xb0000000) { printf("bzzzt (%p) ", ret); _exit(1); } printf("got path %s ", buffer); return strdup(buffer); } int main(int argc, char **argv) { getpath(); } Stack의 마지막 문제 풀이를 해봤습니다. 이 문제의..
-
[Toddler's Bottle] leg write upSystem hacking training/pwnable.kr 2019. 1. 28. 17:22
arm에 관한 문제를 풀어봤습니다. Daddy told me I should study arm. But I prefer to study my leg! Download : http://pwnable.kr/bin/leg.c Download : http://pwnable.kr/bin/leg.asm ssh leg@pwnable.kr -p2222 (pw:guest) 이 문제는 arm 어셈블리언어를 알아야 풀 수 있습니다. 주어진 두 링크를 들어가보면 C코드와 어셈블리 코드가 주어집니다. 여기서 저는 어셈블리 코드로 분석을 진행했는데요. #include #include int key1(){ asm("mov r3, pc\n"); } int key2(){ asm( "push {r6}\n" "add r6, pc, $1\..
-
RITSEC CTF 2018 ezpwn write upCTF Write-Up 2018. 11. 19. 18:47
라즈베리파이 Mate ubuntu 가 apt upgrade를 하던 중 너무 오래걸려서 할게 없었는데 마침 CTF를 하고 있었네요..ㅎㅎ 쉬는 시간에 한 문제 풀었습니다! 210 Solves라 쉬운 문제였습니다. 문제는 바이너리 던져주고, remote exploit을 해야하는(?) 그런 문제 유형이였습니다. 먼저 정적분석을 위해 binary를 열어보니 다음과 같이 unsigned int v6의 값이 1이 된다면 if문의 조건을 충족하여 flag를 열어주는 것을 볼 수 있습니다. 취약점이 쉽게 눈에 들어오는데요. gets()의 사용으로 인해서 v4의 변수에 argv값을 NULL byte가 오기 전까지 모두 값복사를 하기 때문에 bof가 터집니다. 이제 이에 맞게 payload를 작성하면 됩니다. CTF에 나..
-
[Toddler's Bottle] lotto write upSystem hacking training/pwnable.kr 2018. 8. 2. 02:55
toddler lotto 문제를 풀었습니다. 조금 삽질을 했는데 허탈하네요....ㅋㅋㅋ 2pt 문제이고, 문제 보시죠. Mommy! I made a lotto program for my homework. do you want to play? ssh lotto@pwnable.kr -p2222 (pw:guest) 별로 내용이 없어서 ssh연결하여 바로 c코드를 확인해보면 아래와 같이 나옵니다. lotto@ubuntu:~$ cat lotto.c #include #include #include #include unsigned char submit[6]; void play(){ int i; printf("Submit your 6 lotto bytes : "); fflush(stdout); int r; r = re..
-
[Toddler's Bottle] blackjack write upSystem hacking training/pwnable.kr 2018. 7. 31. 21:52
오늘을 pwnable.kr 의 blackjack - 1pt 문제를 풀이하였습니다. 문제 pt는 1pt 인데 소스코드의 양을 보고 조금 놀랐습니다. Hey! check out this C implementation of blackjack game! I found it online * http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html I like to give my flags to millionares. how much money you got? Running at : nc pwnable.kr 9009 flag는 백만장자가 되면 준다고 하네요. 사실 이 부분을 보지 않고 취약한 부분을 찾기 위해서 무작정 소스코드..
-
[Toddler's Bottle] cmd1 write upSystem hacking training/pwnable.kr 2018. 7. 27. 20:09
cmd1을 풀이하였습니다. Mommy! what is PATH environment in Linux? ssh cmd1@pwnable.kr -p2222 (pw:guest) 리눅스에서 환경변수에 관한 문제인듯 합니다. ssh 접속후 ls 로 파일명을 보면 cmd.c 파일이 있는데 아래와 같습니다. cmd1@ubuntu:~$ cat cmd1.c #include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r; } int main(int argc, char* argv[], char** envp){ putenv("PATH=/..
-
[Toddler's Bottle] random write-upSystem hacking training/pwnable.kr 2018. 7. 21. 20:50
pwnable.kr Toddler's Bottle 6번째 문제 random 을 풀이하였습니다. 아버님이 프로그래밍을 할때 random 값을 어떻게 사용하는지 가르쳐줬다고 하는것으로 보아 난수에 대한 문제로 추정을 했습니다. 그리고 ssh로 바로 접속을 하였고 바이너리의 소스 코드를 확인해보면 다음과 같습니다. rand()를 사용하여 난수를 생성하고 key값을 사용자로 부터 입력받아 xor 연산 후 0xdeadbeef와 같다면 쉘을 띄워줍니다. 만약 다르다면 2의 32제곱의 경우의 수를 생각해야될것이라고 언지를 해주면서 프로그램이 종료됩니다. rand()로 난수를 생성하는 것은 어쩌면 상관없을 것 같지만 이와 같이 key값을 인증하는곳에 쓰인다면 문제가 될 수 있습니다. 왜냐..! 저도 처음 알게된 사실이..