본문 바로가기

분류 전체보기211

[포너블] LOB 4 - goblin LOB 4 - goblin write up 이번에는 고블린 ! 이번에는 오크가 보인다. 코드를 살펴보면 이전 문제들과 다르게 추가된 부분이 있다. egghunter라는 주석이 있는 부분인데, 찾아보니 memset 함수를 통해 환경변수를 초기화하는 작업이다. 그니까 이 문제는 환경변수를 사용하지않고 풀어야한다. 그리고 입력인자에 조건을 걸어놨는데 argv[1][47] != \xbf 즉 첫번째 입력인자의 48번째문자가 \xbf로 시작해야한다는 뜻 여기까지 정보만을 보고 대충 어림짐작해보면 버퍼가 40이고 int i 가 4바이트 sfp가 4바이트니까 48바이트를 더미로 덮고 RET를 주어야하는데 이때 47번째까지는 아무 의미없는 더미로 덮으면 되지만 48번째 문자는 \bf로 시작해서 RET 주소를 주어야한다는.. 2021. 9. 30.
[강의노트] 합병정렬과 퀵정렬 - 1 합병정렬과 퀵정렬 합병정렬과 퀵정렬에 대한 강의 노트입니다. 분할통치법 합병정렬에 대해 알아보기전에 먼저 분할통치법의 개념에 대해 알아보자. 쉽게 말해서 큰 문제를 작은 문제로 나누어서 해결하고, 그것을 합쳐서 큰 문제를 해결하는 것이다. 1. 분할 : 입력 데이터 L을 둘 이상의 분리된 부분집합 L1,L2, . . .으로 나눈다. ( 큰 문제를 작은 문제로 분할) 2. 재귀 : L1,L2, ... 로 나눠진 작은 문제를 재귀적으로 해결한다. 3. 통치 : 해결을 합쳐서 전체 문제 L에 대한 해결법을 구한다. 위의 1,2,3번을 그대로 정렬에 사용한 알고리즘이 합병정렬이다. 합병정렬 위의 1,2,3번을 그대로 정렬에 사용한 알고리즘이 합병정렬이다. 분할통치법에 기초한 정렬 알고리즘. 힙정렬 vs 합병정렬.. 2021. 9. 29.
[포너블] LOB 3 - cobolt LOB 3 - cobolt write up 이번 문제는 cobolt이다. goblin 이 보인다 이번에는 small buffer에 stdin 즉 입력이 추가되었다. 음 그냥 gremlin에서 공격한 방식으로 만든 페이로드를 입력에 넣으면 해결되는거 아닌가? 이 생각이 1차원적으로 들었다. 이렇게 실행하면 입력을 하게되는데 여기 입력에 페이로드를 넣어보려고 한다. 마찬가지로 버퍼의 크기가 작으므로 환경변수를 이용하자. export shellcode=`python -c 'print "\x6a\x0b\x58\x99\x52\x66\x68\x2d\x70\x89\xe1\x52\x6a\x68\x68\x2f\x62\x61\x73\x68\x2f\x62\x69\x6e\x89\xe3\x52\x51\x53\x89\xe1\xc.. 2021. 9. 26.
[포너블] LOB 2 - gremlin LOB 2 - gremlin write up gate 문제를 해결하고 얻은 gremlin의 password로 로그인하면 다음 문제가 열린다. 이번에는 cobolt가 보인다. 한번 열어보자 gate 문제와 똑같은거 아닌가했지만 buffer 의 크기가 16으로 작아진 것을 확인할 수 있다. 처음에 buffer가 작아진게 무슨 의미일까? 오히려 bof 공격을 사용하기 더 수월해진것 아닌가 생각했다. 지난 문제와 같은 방법으로 공격을 시도한다고 시뮬레이션해보니, 쉘코드를 작성하는 부분에서 막혔다. 쉘코드가 24바이트인데 버퍼의 크기가 16바이트 밖에 안되기때문에 버퍼에 쉘코드를 작성할 수 가 없었다. 이전 문제를 풀때도 버퍼에 크기를 작성하는 것 외에 환경변수를 이용하는 방법이 있었는데, 아마 gremlin에서.. 2021. 9. 26.