[HackCTF] :pwn: g++pwn 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :pwn: g++pwn

보면 바로 알수있다시피 c++인걸 대충 어림짐작할 수 있습니다. vuln안을 봅시다 c++을 아이다로 처음 봤으면 조금 당황스러워할 수도 있는데, 놀라진 마시고 그냥 큰 줄기만 보시면 됩니다. 1. fgets로 s에 입력받음 2. replace(사용자지정)함수로 선서대로 v4, input, v7을 넣음 2.1. input은 1번에서 입력한 s의 값이 들어가있고, v7은 "I"라는 값이 들어가있음 3. v1의 값이 s로 복사됨 3.1. v1의 값은 input의 값임 결국 뭔가 replace함수로 입력값을 바꾼 뒤 s를 출력시키는 걸 확인할 수 있습니다. replace함수를 봅시다. std::string *__stdcall replace(std::string *a1, std::string *a2, std::..

2021.03.17 게시됨

[HackCTF] :web: 보물 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :web: 보물

고고 저런 페이지가 나오고, 각 버튼을 누르면 해시값으로 추정되는 값들이 나옵니다. 근데 돌려도 어떤 값인지는 안알려주네용.. 그래서 뭔가 싶어서 page파라미터 가지고 장난치다가 이렇게 값이 엄청나게 많은걸 찾았네요 그래서 쓰레기값이 많이 들어있고, 저기 어딘가에 플래그 값이 숨겨져 있지 않을까? 라고 생각했고 그래서 그냥 bruteforcing으로 돌렸습니다 우왕 굳굳

2021.03.14 게시됨

[HackCTF] :web: /, Hidden, Button (All 50 pts) 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :web: /, Hidden, Button (All 50 pts)

50포인트짜리 한번에 다 씁니당 1. / 첫 문제입니다. 들어가보면 로봇 사진이 떠있고, Hidden Flag라고 되어있는데 이건 너무 클리셰적인 문제죠? robots.txt에 로봇에게 문서 접근을 할 수 있는 권한을 주는 문서가 있습니다. 일단 확인해봅시다. 참고 : ko.wikipedia.org/wiki/%EB%A1%9C%EB%B4%87_%EB%B0%B0%EC%A0%9C_%ED%91%9C%EC%A4%80 로봇 배제 표준 위키백과, 우리 모두의 백과사전. 로봇 배제 표준(robots exclusion standard), 로봇 배제 프로토콜(robots exclusion protocol)은 웹 사이트에 로봇이 접근하는 것을 방지하기 위한 규약으로, 일반적으로 접근 ko.wikipedia.org 보면 /r..

2021.03.13 게시됨

[HackCTF] :rev: Handray 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :rev: Handray

ㄲ 엥 바로 aFlag를 출력해주네? 하고 보니깐 이렇게 뜨고, 파일도 실행해보면 이렇게 뜨는걸로 봐서 밑에 있는 바이트들은 한글인거 같네요 근데 변수 영역을 보면 위에 format하고 the flag is %s라고 되어있는 부분을 볼 수 있습니다. 따라서 뭔가 뛰어넘은것으로 판단하였고, 어셈블리어 코드를 봤습니다. 빨간색 cmp 부분에서 rbp-0x4가 0이면 파란색 main+96부분의 printf가 수행되고, 만약 두 값이 다르면 main+113의 printf가 수행됩니다. 저희가 실행시킬때는 두번째 printf가 실행되니깐 첫 번째 printf를 봅시다. 각 인자인 0x6010e0과 0x400638을 확인해봤습니다. 네, 저희가 예상한대로 되는 것 같네요! 여기서는 두가지 방법으로 할 수 있을 것 ..

2021.03.12 게시됨

[HackCTF] :rev: Reversing Me 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :rev: Reversing Me

착하게도 코드를 다 줬네요 #include #include int main() { int i; char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"; char enter[54]; printf("키를 입력하시게 : "); scanf("%s", enter); if (strlen(enter) == strlen(serial)) { for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[i]; i++); if (i - 1 == strlen(enter)) printf("정답일세!\n"); } else printf("그건 아닐세...\n"); exit(0); } for문안에 있는 일련..

2021.03.11 게시됨

[HackCTF] :pwn: 내 버퍼가 흘러넘친다!!! 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :pwn: 내 버퍼가 흘러넘친다!!!

코드 봅시다 우선 s는 0x14밖에 안되는데 무제한으로 받아서 BOF가 발생하네요. 쓸만한 함수를 줬는지 볼까요? 저런... 가젯을 줄만큼 친절하진 않은 문제네요. 쉘코드를 사용할 수 있는지 확인해봅시다 NX가 꺼져있는걸로 봐서 그냥 name에 넣어도 될 것 같습니다. 그럼 name의 주소 또한 알고있어야겠죠? name의 주소는 전역변수이기 때문에 다음과 같이 ida에서도 확인할 수 있고, disas main해서 어셈코드에서도 충분히 확인할 수 있습니다. 굳굳

2021.03.06 게시됨

[HackCTF] :pwn: Basic_FSB 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :pwn: Basic_FSB

문제 봅시다 vuln함수를 보면 되겠네요 snprintf로 입력받아서 전형적인 fsb가 발생하네요. flag함수도 주어져 있으니 이 함수를 통해서 함수의 got를 overwrite하면 될 것 같다. 직접 값을 넣어봤을 때, 더미의 값부터 2번째 포맷스트링부터 값이 읽어지는 것을 확인했다. 따라서, dummy대신에 printf의 got를 삽입하고, flag의 함수를 넣으면 될 것 같습니다. flag주소 : 0x080485b4, 10진수 134514100 그럼 익스 고고 134514100이 아닌 134514096인 이유는 printf의 got가 4바이트이기 때문입니다. 굳굳

2021.03.05 게시됨

[HackCTF] :pwn: Basic_BOF #1, #2 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :pwn: Basic_BOF #1, #2

Basic_BOF #1 s에 입력을 받는데 값은 v5를 확인하고 있네요. s는 위치가 ebp-0x34인 반면, v5는 ebp-0xC에 위치하고 있기 때문에 dummy를 0x28, 즉 10진수 40만큼 집어넣어주면 될 것 같습니다. 그리고 v5의 확인값이 이상해서 hex로 바꾸어봤더니 0xDEADBEEF네요. 잘 넣어주도록 하겠습니다. 간단하네요 Basic_BOF #2 아이다 코드를 보면 특유의 굉장히 복잡한 코드를 보여주고 있는데 보면 그냥 sup함수를 실행시키는거죠? sup함수는 확인해봤는데 그냥 s를 출력시키는 역할을 하고 있습니다. s는 미루어짐작하기에 저거구요. 그럼 취약점은 뻔하게도 bof입니다. s는 크기가 0x80인데 fgets를 통해서 0x85이나 입력을 받고 있으니까요. 원래같으면 ret..

2021.03.05 게시됨