일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- rev-basic-4
- sint
- L18
- pwnable.kr
- basic_exploitation_000
- 포너블
- 드림핵
- out_of_bound
- coin1
- rev-basic-0
- off_by_one_000
- basic_exploitation_001
- L16
- Dreamhack
- CodeEngn
- 코드엔진 베이직
- off_by_one_001
- Basic
- rev-basic-7
- rev-basic-2
- Pwnable
- rev-basic-5
- RCE
- sd카드 리더기
- rev-basic-6
- rev-basic-3
- rev-basic-1
- L17
- L15
- 코드엔진 베이직 13
- Today
- Total
목록Pwnable/dreamhack (9)
서브웨이

참고를 보니 정수의 표현범위에 대한 문제로 예상됩니다. 쉘코드와 got 조작은 안됩니다. 소스코드를 봅시다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main() { char buf[256]; int size; initialize(); signal(SIGSEGV, get_shel..

이번엔 RELRO, NX bit에 더해서 canary 까지 있는 예제입니다. 쪼끔 귀찮을것 같네요. 소스코드를 봅시다. #include #include #include #include #include char name[16]; char *command[10] = { "cat", "ls", "id", "ps", "file ./oob" }; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main() { int idx; i..

이전 문제와 비슷한 유형일 것 같습니다. 일단 소스코드를 봅시다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void read_str(char *ptr, int size) { int len; len = read(0, ptr, size); printf("%d", len); ptr[len] = '\0'; } void get_shell() { system("/bi..

자 일단 RELRO랑 NX bit이 적용되어있으니 쉘코드, got 조작은 불가능 합니다. 소스코드를 봅시다. #include #include #include #include #include char cp_name[256]; void get_shell() { system("/bin/sh"); } void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int cpy() { char real_name[256]; strcpy(real_nam..

예... 뭐... 이걸 풀어야하나 싶지만 그래도 있는 문제니까 풀어봅시다... 그냥 nc 명령어로 접속을 해봅시다. 예... 바로 나옵니다. 그냥 어떻게 진행이 될거다 정도를 알려주는 문제 같습니다.

일단 RELRO가 적용되어있고 NX bit이 사용된것으로 보아 got를 임의의 주소로 덮어쓴다거나 쉘코드를 사용하는것은 어려워보입니다. 참고를 보면 결국엔 리턴 주소를 덮어쓰는 방향으로 풀어야할 것 같네요. 소스코드를 봅시다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main(i..