War Games/HackCTF
[HackCTF] :pwn: Random Key
랜덤값이 있고, 그 값을 예측하면 됩니다. 맨 처음에는 scanf이길래 bof시켜서 값을 같게 하려고 했는데, %d여서 안되죠? 그래서 그냥 직접 스크립트를 짜서 보내기로 했읍니다..ㅎㅎ ctypes써서 보내도 되긴하는데 귀찮읍니다 굳굳
War Games/HackCTF
[HackCTF] :pwn: Random Key
랜덤값이 있고, 그 값을 예측하면 됩니다. 맨 처음에는 scanf이길래 bof시켜서 값을 같게 하려고 했는데, %d여서 안되죠? 그래서 그냥 직접 스크립트를 짜서 보내기로 했읍니다..ㅎㅎ ctypes써서 보내도 되긴하는데 귀찮읍니다 굳굳
War Games/HackCTF
[HackCTF] :pwn: 1996
ㄱㄱ c++ 프로그램이네요. getenv한 값을 보여주기 때문에 실제 존재하는 환경변수를 넣으면 다음과 같이 값이 리턴됩니다 처음에는 환경변수가지고 장난치는건가?했는데 그냥 bof더라구요..? 그래서 뭐.. 따로 방법이 생각안나서 bof했습니다. 따로 system함수를 구할 필요 없이 spawn_shell함수를 이용하면 되네요. good
War Games/HackCTF
[HackCTF] :pwn: poet
봅시다 차례대로 get_poem, get_author, rate_poem을 지나서 0x6024E0의 값이 1000000이면 while문을 벗어나고, reward함수가 실행됩니다. reward함수는 바로 플래그를 읽어주네요. while문에서 나오는것만 집중하면 될 것 같습니다. 다음은 get_author부분인데, gets로 받아서 입력에 제한이 없네요. 보면 0x6024A0에 입력을 받는데, 값을 확인하는 부분이 0x6024E0이므로 그냥 overwrite해주면 될 것 같습니다. 굳굳
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::..
War Games/HackCTF
[HackCTF] :pwn: RTL_World
int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax int v4; // [esp+10h] [ebp-90h] char buf; // [esp+14h] [ebp-8Ch] void *v6; // [esp+94h] [ebp-Ch] void *handle; // [esp+98h] [ebp-8h] void *s1; // [esp+9Ch] [ebp-4h] setvbuf(stdout, 0, 2, 0); handle = dlopen("/lib/i386-linux-gnu/libc.so.6", 1); v6 = dlsym(handle, "system"); dlclose(handle); for ( s1 = v6; memcmp(..
War Games/HackCTF
[HackCTF] :web: 보물
고고 저런 페이지가 나오고, 각 버튼을 누르면 해시값으로 추정되는 값들이 나옵니다. 근데 돌려도 어떤 값인지는 안알려주네용.. 그래서 뭔가 싶어서 page파라미터 가지고 장난치다가 이렇게 값이 엄청나게 많은걸 찾았네요 그래서 쓰레기값이 많이 들어있고, 저기 어딘가에 플래그 값이 숨겨져 있지 않을까? 라고 생각했고 그래서 그냥 bruteforcing으로 돌렸습니다 우왕 굳굳
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..
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을 확인해봤습니다. 네, 저희가 예상한대로 되는 것 같네요! 여기서는 두가지 방법으로 할 수 있을 것 ..
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문안에 있는 일련..
War Games/HackCTF
[HackCTF] :rev: Welcome_REV
50점짜리 문제네요 미안 귀찮아서 아이다 열었다^^7 check_password에 들어가봅시다 엄청난 일련의 계산과정이 있고, 그리고 맨 마지막에 strncmp를 진행하는데, 그 대상의 끝이 =로 끝나네요. 뭔가 수상해서 base64 디코더로 돌려봤더니 답이였습니다. 그 긴 계산과정은 base64 인코딩 과정을 써놓은 것 같네요. 굳굳!
War Games/HackCTF
[HackCTF] :pwn: Yes or no
ㄱㄱ int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // eax int v4; // eax int v5; // ecx int v6; // eax int v7; // eax char s; // [rsp+Eh] [rbp-12h] int v10; // [rsp+18h] [rbp-8h] int v11; // [rsp+1Ch] [rbp-4h] setvbuf(stdout, 0LL, 2, 0LL); v11 = 5; puts("Show me your number~!"); fgets(&s, 10, stdin); v10 = atoi(&s); if ( (v11 - 10) >> 3 < 0 ) { v4 = 0; } else { v3 = v1..
War Games/HackCTF
[HackCTF] :pwn: x64 Buffer Overflow
문제 봅시다 scanf로 입력을 받고있기때문에 입력제한이 없죠? 따라서 bof를 일으키면 될 것 같습니다. 마침 쓰라고 이런것도 줬네요. callMeMaybe: 0x00400606 이걸로 ret를 bof시켜봅시다 64bit여서 sfp가 8비트인점 까먹지 마시구요. 나머지 bof는 풀이 올리지 않겠습니다 다 똑같은 패턴이기 때문!