학습
워게임
CTF
커뮤니티
랭킹
스토어
커리어
Beta
로그인
|
기업 서비스
Home
학습
워게임
CTF
커뮤니티
랭킹
커리어
Beta
기업 서비스로 이동하기 >
LEVEL 2
Return to Library
pwnable
3385
1913
로그인 하고 문제 풀기
문제 정보
풀이
75
난이도 투표
74
질문
25
최근 풀이자
1913
댓글
40
문제 설명
Description
Exploit Tech: Return to Library에서 실습하는 문제입니다.
Translate
출제자 정보
Dreamhack
대표 업적 없음
2021.12.08. 16:20:39
First Blood!
Sechack
2024 Invitational Contenders
출제된 지
4시간
만에 풀이 완료!
난이도 투표
74
문제 풀이를 완료한 후에 피드백을 제출할 수 있습니다.
투표 결과
전체 투표 로그
1 / 15
hs_K
대표 업적 없음
LEVEL 3에 투표했습니다.
11일 전
n0rang2
암호학 입문
LEVEL 2에 투표했습니다.
24일 전
연한바다
대표 업적 없음
LEVEL 2에 투표했습니다.
1개월 전
Ma_Mu0228
대표 업적 없음
LEVEL 2에 투표했습니다.
1개월 전
OUYA77
대표 업적 없음
LEVEL 2에 투표했습니다.
2개월 전
질문
22
문제 풀이에 어려움이 있으신가요?
커뮤니티에서 문제에 대한 질문하고 답변 얻기
ret 값으로 들어가는 주소가 의미하는 것이 뭔가요?
ret에 0x400825 주소가 들어가는데 ret주소에 pop rdi를 바로 쓰지 않는 이유는 알겠는데, 저 값이 왜 들어가야 하는건가요? 메모리 덤프찍어보니 __libc_csu_init 관련 주소인것 같은데요
이무쿤
답변
1
추천
4
3년 전
gdb에서 프로그램이 실행되지 않습니다.
캡처 위 사진처럼 처음 카나리 릭을 위해서 buf를 입력받는 시점에 프로그램이 멈춥니다. 그리고 다시 r로 실행하니 셸만 뜨고 아무 명령을 입력하면 gdb까지 종료됩니다. 아무리 검색해봐도 관련된 내용으로 쓰인 글이 보이지가 않습니다 ㅠㅠ
SuperVingo
답변
1
추천
3
2년 전
recv 관련해서 궁금한것이 있습니다.
해당 문제의 소스코드입니다 setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); system("echo 'system@plt"); // Leak canary printf("[1] Leak Canary\n"); printf("Buf: "); read(0, buf, 0x100); printf("Buf: %s\n", buf); 이 소스코드를 보면 read하기전에 system함수로 echo로 출력 한번 print로 출력 두번이 있는데 로컬에서 실행할때는 익스플로잇 코드에 print(p.recvline()) print(p.recvline()) print(p.recv(10)) 을 처음에 해주니 b'system@plt\n' b'[1] Leak Canary\n' b'Buf: ' 이렇게 출력이 되는데 서버로 공격을 수행하니 b'[1] Leak Canary' 이것만 출력되고 멈추길래 p.recv(1024)하나만 출력시켜보니 b'[1] Leak Canary\nBuf: ' 이렇게 출력되더라고요 분명 로컬로 실행시킬땐 b'system@plt\n' 이게 출력됐었는데 서버로 수행할때는 왜 b'system@plt\n' 가 출력이 안되는건지 궁금합니다
Dendrog
답변
1
추천
2
2년 전
ret의 주소와 gadget의 개념에 관해 질문 있습니다.
ret 주소와 gadget의 개념에 대해 질문이 있습니다. 리턴 가젯은 ret 명령어로 끝나는 어셈블리 코드 조각을 의미한다고 하였는데, pop rdi; ret의 경우 pop rdi가 실행된 후, ret 가 실행된다는 뜻의 2단계 코드 조각을 말하는 것인가요?? 아니라면 무슨 의미인가요? ROPgadget --binary rtl 명령어의 결과가 아래의 사진과 같은데, 여기서 어떤 가젯을 사용 하는 지는 어떻게 정하나요?? 그냥 아무 가젯이나 사용해도 되나요? 풀이에서 왜 ret를 사용했는지 궁금합니다. image.png 세 번째로는 이 문제에서 의미없는 문자열로 57byte만큼 채운 후, canary를 leak하고, 다시 의미 없는 문자열로 8byte를 덮은 다음, 원래는 main 함수의 ret 하는 코드가 있지만, ROPgadget --binary rtl에서 찾은 코드로 덮어버렸고 그 후 pop rdi로 /bin/sh의 주소를 rdi에 넣고 system 함수를 실행시켜서 shell을 획득하는 것으로 이해를 했는데 image.png 여기서 pop rdi; ret가 아니라 pop rdi, /bin/sh의 주소, system 함수 호출 이렇게 3단계로 진행되어야 하는 거 아닌가요?? 왜 pop rdi가 아니라 pop rdi; ret인지 궁금합니다. pop rdi를 한 후, ret를 해버리면 system 함수를 호출할 수 없는 것 아닌가요??
mia7a
답변
2
추천
2
1년 전
질문 세 개
buf와 canary 사이에 있으면서 길이가 0x8인 값의 정체는 무엇인가요? pop rdi; ret 직후에 /bin/sh의 주소를 넣는 게 어떻게 rdi가 그 주소를 가리키도록 하는 결과를 낳나요? 저는 이 문제를 무차별 대입법으로 풀었습니다. 실제로 써야 하는 no-op gadget 값은 무엇이며, 왜 그 값을 써야 하나요?
모레
답변
1
추천
1
2년 전
pwndbg 사용중 system() 함수 호출시 오류가 있는데 해결방법을 모르겠습니다ㅠㅠ
system("echo system@plt") 함수 호출 을 끝내고 다음 main 명령어로 실행 하기 위해 ni 를 입력했더니 이러한 문구가 뜨고 프로그램이 종료 되는데 무슨 문제때문에 이런 오류가 잘 모르겠습니다ㅠㅠ (현재 칼리 리눅스를 사용하고 있습니다)
Soon
답변
2
추천
1
2년 전
RTL
image.png image.png payload 짜고 실행하면 위 사진처럼 오류가 뜨는데 python 버전 때문인가요..? 왜 그러는지 모르겠습니다..
oog
답변
2
추천
0
2년 전
잘 모르겠습니다
강의 내용을 보면 이런 부분이 있습니다. addr of ("pop rdi; ret") << return address addr of string "/bin/sh" << ret + 0x8 addr of "system" plt << ret + 0x10 **리턴 가젯을 사용하여 반환 주소와 이후의 버퍼를 다음과 같이 덮으면, pop rdi로 rdi를 "/bin/sh"의 주소로 설정하고, 이어지는 ret로 system 함수를 호출할 수 있습니다.** pop rdi를 사용해서 rdi에 "/bin/sh"의 주소가 어떻게 들어가는지 모르겠습니다. 그리고, ret 후 system() 함수가 어떻게 호출 가능한지...
EnUm
답변
1
추천
0
9개월 전
왜 프로세스가 죽는지 모르겠습니다..
죽은 부분.. 진짜 뭐가 문제일까요.... stack alignment 깨지는거 같아서 맞춰주려고 ret 가젯 중간에 한번 넣어줬구요. binsh 포인터 변수가 문제인가 싶어서 포인터변수가 가르키는 주소로 해봤구요. 진짜 뭐가 문제인지 모르겠습니다.. 도와주세요.. from pwn import * #p = remote('host1.dreamhack.games', 10731) p = process('./rtl') binsh = 0x402004 sys = 0x4010b0 ret = 0x000000000040101a leak_canary = b'A'* (56+1) # null byte pause() p.send(leak_canary) p.recvuntil(leak_canary) canary = u64(b'\x00'+p.recv(7)) print('canary: '+hex(canary)) print('sys: '+hex(sys)) print('binsh: '+hex(binsh)) payload = b'B' * 56 payload += p64(canary) payload += b'C' * 8 payload += p64(ret) payload += p64(sys) payload += p64(binsh) p.sendlineafter(b"Buf: ", payload) p.interactive()`
Z3R0C0K3
답변
1
추천
0
1개월 전
system함수의 plt문제
ret영역에서 main함수의 주소를 넣어서 Return to library자체는 되는것을 확인했습니다. 예제파일내에서 system("echo 'system@plt")가 system함수의 plt를 설정해준다는 것도 이해했는데 payload를 작성하여 system@plt주소를 이용할려는데 다음과 같은 에러로 plt안에 아무것도 없다는 에러가 발생하는데 이유를 아시는 분들은 답변해주시면 감사드리겠습니다. 스크린샷 2022-10-03 오후 6.16.33.png
Greedun
답변
2
추천
0
2년 전
«
‹
1
2
3
›
»
최근 풀이자
1913
eheka78
대표 업적 없음
3시간 전
rnehgud_
강의 수강: 1
6시간 전
푸사
대표 업적 없음
15시간 전
Ebo
대표 업적 없음
1일 전
나이테
대표 업적 없음
2일 전
bintable
워게임 고인물
3일 전
를르르를
암호학 입문
4일 전
d0r6y
강의 수강: 10
6일 전
s1iver
대표 업적 없음
6일 전
do1e
강의 수강: 1
6일 전
«
‹
1
2
3
4
5
›
»
댓글
40
Raffin
대표 업적 없음
1개월 전
search 사용시 에러 발생하시는 분 search -t string "/bin/sh" 타입 지정해서 사용해보시기 바랍니다. 그리고 system@plt 호출되고 넘기면 /usr/bin/dash 열리고 read 함수로 넘어가 버리는데 원인을 모르겠네요
Translate
머더뻐킨 릴 투더 빅 뽀이 예아 그ㄹㄹㄹㄹ라
대표 업적 없음
7개월 전
어렵지만 꽤 많이 배운듯
Translate
스카이넷
워게임 고인물
10개월 전
ez
Translate
O_F
대표 업적 없음
1년 전
좋습니다.
Translate
buaii
워게임 고인물
1년 전
GOT...
Translate
Nein
대표 업적 없음
1년 전
good...
Translate
HYN
Perfect 10
1년 전
good
Translate
sinse100
대표 업적 없음
2년 전
remind the alignment
Translate
l000wk3y
공부벌레
2년 전
gg
Translate
bshyuunn
강의 수강: 10
2년 전
홀리 풀었다
Translate
«
‹
1
2
3
4
›
»
댓글 40