일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코드엔진 베이직 13
- L15
- rev-basic-3
- rev-basic-6
- sint
- rev-basic-0
- basic_exploitation_001
- 포너블
- basic_exploitation_000
- out_of_bound
- off_by_one_001
- Dreamhack
- sd카드 리더기
- rev-basic-2
- rev-basic-1
- 드림핵
- rev-basic-7
- CodeEngn
- L16
- rev-basic-4
- off_by_one_000
- 코드엔진 베이직
- coin1
- Basic
- rev-basic-5
- Pwnable
- pwnable.kr
- L18
- RCE
- L17
- Today
- Total
목록Pwnable (26)
서브웨이
자 일단 뭘 다운받으랍니다. 일단 다운받아봅시다. #include #include int key1(){ asm("mov r3, pc\n"); } int key2(){ asm( "push{r6}\n" "addr6, pc, $1\n" "bxr6\n" ".code 16\n" "movr3, pc\n" "addr3, $0x4\n" "push{r3}\n" "pop{pc}\n" ".code32\n" "pop{r6}\n" ); } int key3(){ asm("mov r3, lr\n"); } int main(){ int key=0; printf("Daddy has very strong arm! : "); scanf("%d", &key); if( (key1()+key2()+key3()) == key ){ printf("..
자 일단 설명이 간단합니다. 일단 세개의 파일이 있습니다. 먼저 소스코드를 봅시다. #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"); printf("Just give me correct inputs then you will get the flag :)\n"); // argv if(argc != 100) return 0; if(strcmp(argv['A'],"\x00")) return 0; if(strcmp(argv[..
오랜만입니다. 오늘 풀어볼 문제는 random입니다. 이름을 보아하니 뭔가 어려워보입니다. 일단 접속해봅시다. 일단 소스코드를 봅시다. 랜덤한 값을 지정해줄때 그냥 rand를 썼네요. 저렇게 되면 매번 같은 값이 나오게 됩니다. 이러한 경우를 방지하려면 srand 함수로 시드값을 달리한 뒤 rand를 사용해야합니다. 그럼 일단 디버깅을 해봅시다. 13번째 줄에 중단점을 걸어서 반환값을 확인해봅시다. 간단하게 0x6b8b4567이라는 값이 반환되었음을 알 수 있습니다. XOR의 성질을 이용하여 간단하게 값을 구해봅니다. 10진수 값을 입력하면 되겠죠? 어렵지 않았네요.
너무 오랜만이네요. 이번 학기는 코로나라는 재앙때문에 아주아주 힘든 바쁜 학기였습니다. 오래간만에 문제를 풀어봅시다. 자 오랜만이라 새롭네요. 대충 읽어보자면 어머님꼐서 패스워드를 사용하는 로그인 시스템을 만들라고해서 C로 만들었는데 에러는 없지만 컴파일 할 때 경고가 뜬다. 뭐 이런 내용이네요. 이런 파일들이 있네요. 일단 코드를 봅시다. 자 그럼 컴파일 경고가 뜬 부분을 찾아봅시다. login 함수에서 scanf를 쓸 때 인자에 &를 안써줬네요(welcome에선 어차피 배열이니 안써도 된다는건 다 아실거라 믿습니다). 저렇게 되면 passcode1, passcode2에 있는 쓰레기 값이 가리키는 주소에 입력한 값을 넣게 됩니다. 이상한 주소에 접근하려하니 당연히 segmentation fault가 뜨..
일단 다운받아 봅시다. 실행을 해보니 동적할당을 해서 거기에 flag를 넣어놨다는 것 같습니다. 그럼 디버거로 디버깅을 해보면서 알아봐야할 것 같습니다. 디버깅을 하려고 시도를 해보니 잘안돼서 한번 툴을 돌려봅니다. UPX로 패킹이 되어있네요. 풀어줍시다. 자 이제 다시 분석을 해봅시다. 딱봐도 +32 부분이 수상해보입니다. 그러니 +39 부분에 중단점을 걸어봅시다. 그리고 실행. rdx에 flag값이 올라갔습니다.
언젠가 한번쯤은 들어본 BOF를 풀어봅시다. 일단 BOF(Buffer OverFlow)에 관한 설명은 아래에서 확인하시면 될 것 같습니다. https://namu.wiki/w/%EB%B2%84%ED%8D%BC%20%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C 버퍼 오버플로 - 나무위키 이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권을 갖습니다. 나무위키는 백과사전이 아니며 검증되지 않았거나, 편향적이거나, 잘못된 서술이 있을 수 있습니다. 나무위키는 위키위키입니다. 여러분이 직접 문서를 고칠 수 있으며, 다른 사람의 의견을 ..