목록분류 전체보기 (33)
Un_Woo
bof bof 문제의 코드다. key라는 변수에 0xdeadbeef가 저장되어 있는데 그 값을 0xcafebabe로 바꾸면 쉘이 따지는 코드다. 이것은 func함수의 어셈블리어다. 이것을 보면 ebp-0x2c에 입력을 한다. 그리고 key 변수는 ebp+0x8에 있다. 0x2c=44 이고 0x8=8 이므로 버퍼 주소와 key 변수가 있는 주소는 44+8=52 만큼의 차이가 있다. 그러므로 52만큼의 쓰레기값을 주고 0xcafebabe를 줘서 key 변수를 바꿨다. id 명령어를 사용하면 쉘을 딴 것을 확인할 수 있다.
collision argc는 인자의 개수, argv는 인자의 주소를 저장한다. 그러므로 첫 번째 if문을 탈출하기 위해서는 인자가 2개 이상이어야 한다. ./col ??? 이런 식으로 실행시키면 된다. 인자를 넣어주면 사진과 같이 passcode가 20바이트가 되어야만 한다고 출력된다. 그렇다면 20바이트로 넣어줘보자. 그러면 사진과 같이 passcode가 잘못됐다고 출력된다. flag를 보기 위해서는 사진에 있는 if문을 만족시켜야 한다. 그러면 check_password함수에서 hashcode와 같은 값이 리턴되어야 한다. 여기서 hashcode의 값은 0x21dd09ec=568134124이다. check_password함수를 보면 첫 번째 인자에 있는 값 5개를 더한 값을 리턴한다. 그러면 인자로 ..
fd argc는 인자의 개수, argv는 인자의 주소를 저장한다. 그러므로 첫 번째 if문을 탈출하기 위해서는 인자가 2개 이상이어야 한다. ./fd ??? 이런 식으로 실행시키면 된다. 그리고 argv는 인자를 문자열로 저장한다. 이 함수에선 argv를 정수로 사용하기 때문에 atoi 함수를 사용했다. read 함수에서 첫 번째 인자로 fd를 넣어주었는데 read 함수의 첫 번째 인자는 파일 디스크립터를 의미한다. 파일 디스크립터는 0은 표준입력, 1은 표준출력, 2는 표준에러를 의미한다. read 함수에 값을 입력하기 위해서는 표준입력이 되어야 하므로 fd가 0이어야 한다. 0x1234=4660 4660을 두 번째 인자로 주자 read 함수가 실행되서 입력할 수 있게 되었다. strcmp 함수는 인자..