일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- Protostar
- 해킹 공부
- grep
- general skills
- 해설
- 리눅스
- Aleph One
- 시스템해킹
- Smashing The Stack For Fun And Profit
- dreamhack
- picoCTF
- 스택
- write up
- cryptography
- 정답
- 시스템
- #hacking
- KOISTUDY
- Hxd
- forensics
- 버퍼오버플로우
- #picoCTF2018
- CTF
- 카이사르
- WEB
- reversing
- picoCTF2018
- 번역
- 리버싱
- writeup
- Today
- Total
목록워게임(wargame) (29)
Security || AI

gdb를 사용하여 디스어셈블리를 진행한 결과 위와 같이 나온다. 해당 문제는 argument를 사용하여 값을 입력 받는다. ex) ./stack1 AAAA 그러므로 argument의 주소를 확인해보면 main+71에서 eax와 ABCD를 검증하는 것을 확인할 수 있는데, 이때, eax는 esp+0x5c이 되므로 esp+0x5c의 값을 abcd로 바꾸어야 한다. 참고로 현재 esp+0x5c에는 를 통해 0이 들어있는 것을 확인할 수 있다. 해당 함수를 보면 argv[1]의 주소인 esp+0xc를 strcpy에 저장될 변수인 0x1c에 주소를 저장하게 된다. 그러므로, 0x5c-0x1c = 0x40이 되며, 64byte만큼 버퍼를 채운 후, 뒤를 abcd로 채우면 된다. buffer (64byte) 0x61..

buffer의 크기를 구하기위해 modified != 0 에 해당하는 test eax, eax라는 명령어의 브레이크 포인트를 걸어 메모리의 거리를 구한다. 사진을 보면 EAX에 AAdA가 들어간 것이 보인다. 이것이 브레이크 포인트가 걸리기 전까지의 레지스터 상황이므로 문자열에서 AAdA의 위치를 확인하면 64번째로 나온다. 그러므로 buffer의 크기인 64만큼 채워주고 modified도 채우기 위해 64에 int형이므로 4바이트를 차지하므로 4개더 추가한 68개를 추가한다.
level1에 접속하여 hint를 아래의 명령어를 사용하여 확인해 봅니다. [level1@ftz level1]$ cat hint 힌트: level2 권한에 setuid가 걸린 파일을 찾는다. 여기서 setuid는 사용자가 파일을 열 때 파일 소유자의 권한 즉 level2가 소유하고 있는 파일의 권한을 파일을 실행할 때만 주는 것이다. [level1@ftz level1]$ find / -perm +4000 -user level2 2> /dev/null 위 명령어를 통해 찾으면 되는 문제이다. 위 명령어에 대해 설명하자면 level2권한에 최소한 4000의 퍼미션을 가진 파일을 찾는 것이다. 여기서 4는 setuid이고 000은 0-유저 0-그룹 0-나머지를 의미하는 것이므로 setuid가 걸린 모든 파일을..
버튼이 마우스와 일정간격을 두고 움직이기 때문에 그냥 클릭하는 것은 불가능 하므로 이를 클릭할 수 있게하거나 버튼이 눌린 후의 동작을 알아내면 풀 수 있다. 아래의 스크립트를 보면 버튼을 눌렀을 때 ?key=001e라는 웹페이지로 들어가게 된다. 그러므로 주소창 뒤에?key=001e를 추가하여 들어가면 FLAG를 얻을 수 있다.