본문 바로가기

wargame/pwnable.kr11

[포너블] pwnable.kr - coin1 pwnable.kr - coin1 문제 nc pwnable.kr 9007 로 접속해서 문제를 확인해보자. 문제를 읽어보면 위조코인을 찾는 문제이다. 진짜 코인은 무게가 10이 나가고 위조코인의 무게는 9이다. 이것을 활용해서 위조코인의 인덱스를 찾아야한다. 예시를 살펴보자 4개의 코인 0,1,2,3 번 코인이 존재하고 이 중 하나는 위조코인이다. 이때 원하는 만큼 코인을 집어 무게를 측정할 수 있는 기회가 2번 주어진다면 위조코인을 찾을 수 있을까? 첫번째 시도에서는 0,1번 코인의 무게를 측정한다. 무게가 20이므로 둘다 진짜코인이다 두번째 시도에서는 3번 코인의 무게를 측정한다. 무게가 10이므로 진짜 코인이다. 따라서 2번코인이 위조코인으로 밝혀졌다. 여기까지만 읽어봐도 이진탐색 알고리즘을 활용하는.. 2022. 2. 24.
[포너블] pwnable.kr - shellshock pwnable.kr - shellshock 문제의 이름인 shellshock는 오래전 등록된 취약점의 이름이다.( 약 40년전부터 존재해온 취약점이라고 함) #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } bash 셀을 켜서 shock_me를 출력하는 코드이다 결론을 먼저 말하면 shellshock 취약점은 bash 가 실행될때 환경변수가 초기화되는 부분의 취약점을 노린 것이다 shellshock@pwnable:~$ export my='() { e.. 2022. 2. 18.
[포너블] pwnable.kr 9 - mistake 보호되어 있는 글 입니다. 2022. 2. 18.
[포너블] pwnable.kr 8 - leg 적용 완료 텍스트 오늘은 8번째 문제인 leg를 풀어보자. 일단 leg c파일의 코드는 다음과 같다. #include #include int key1(){ asm("mov r3, pc\n"); } int key2(){ asm( "push{r6}\n" "addr6, pc, $1\n" "bxr6\n" ".code 16\n" "movr3, pc\n" "addr3, $0x4\n" "push{r3}\n" "pop{pc}\n" ".code32\n" "pop{r6}\n" ); } int key3(){ asm("mov r3, lr\n"); } int main(){ int key=0; printf("Daddy has very strong arm! : "); scanf("%d", &key); if( (key1()+key2.. 2022. 2. 8.