전체 글 (90) 썸네일형 리스트형 [백준/c++] BOJ 1946 - 신입사원 https://www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 문제 설명 주식회사의 지원자는 서류 심사와 면접 시험을 본다. 서류 심사의 순위와 면접 시험의 순위가 주어질 때, 어떤 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다. 즉, 두 심사의 순위가 지원자보다 더 높은 사람이 있을 경우, 해당 지원자는 탈락한다. 각 테스트 케이스에 대해서 주식회사가 선발할 수 있는 신입사원의 최대 인원수를 한 줄에 하나씩 출력한다. 첫째 줄에 .. [드림핵/워게임] rev-basic-4 https://dreamhack.io/wargame/challenges/18/ 앞선 문제들과 동일한 부분에 대한 설명은 생략하겠다. 빠르게 sub_140001000 함수를 살펴 보겠다. (16 * str[i]) || (str[i] >> 4) 의 결과가 byte_140003000[i]의 값과 대응되어야 한다. 16진수에 16을 곱하는 것은 4) == byte_140003000[i]와 같다. 입력이 0xA로 들어왔다고 가정해 보자. 0xA를 2진수로 표현하면 0000 1010이다. 0xA > 4 = 0000 0000 1010 0000 || 0000 0000 = 1010 0000 즉, 이 식은 처음 입력했던 문자열에 2진수에서 4비트끼리 앞뒤로 뒤집은 것이다! 따라서 이를 반대로 적용해서 풀어 주면 된다. b.. [드림핵/워게임] rev-basic-3 https://dreamhack.io/wargame/challenges/17/ 이전 문제들과 동일하게 문자열을 입력하고 조건에 맞으면 Correct, 틀리면 Wrong을 출력하는 프로그램이다. 전체적인 코드는 이전의 문제들과 같다. sub_140001000 함수에 들어가 보자 0x18번 반복문을 돌며 byte_140003000[i]에 저장되어 있는 값과 (i xor (입력값+i) + 2 * i) 를 비교하는 프로그램이다. byte_140003000에 저장된 값은 다음과 같다. byte_140003000에 저장되어 있는 값과 주어진 수식을 통해 입력값을 구할 수 있을 것 같다. 주어진 수식을 역으로 계산해 보면 I_am_X0_xo_Xor_eXcit1ng이 나오고 이것을 입력으로 넣어 주면 Correct 가.. [드림핵/워게임] rev-basic-2 https://dreamhack.io/wargame/challenges/16/ 문제는 앞선 문제들과 똑같으니 IDA 코드를 살펴 보자 다른 코드들은 모두 똑같으니 빠르게 sub_140001000 함수부터 보겠다. 0x12번 반복하므로 입력 문자열의 길이는 18이라는 것을 추측할 수 있다. aC에서 4바이트씩 증가하며 입력 문자열과 비교한다. → aC에 무엇이 저장되어 있는지 살펴 보면 된다. 배열의 형태로 문자들이 저장되어 있는 것을 볼 수 있다. 이를 다 이어 붙이면 Comp4re_the_arr4y가 나온다. 입력으로 넣어 주니 Correct가 잘 뜨는 모습이다. [드림핵/워게임] rev-basic-1 https://dreamhack.io/wargame/challenges/15/ 문제 파일을 받으면 이렇게 실행 파일이 존재한다. 터미널에서 실행해 보면 rev-basic-0과 똑같이 입력, 출력이 이루어진다. IDA로 열어 보자!! 전체적인 코드는 똑같으므로 설명을 생략하겠다 sub_140001000 를 보면 1바이트 단위로 값을 비교하는 것을 볼 수 있다. 각 인덱스 값이 모두 같으면 Correct를 출력한다. 숫자를 문자로 변환하는 단축키 R을 이용해 모두 변환해 보겠다. 결론적으로 입력되어야 하는 문자열은 Compar3_the_ch4ract3r이다 성공적으로 Correct가 뜬 걸 볼 수 있다. [드림핵/워게임] rev-basic-0 https://dreamhack.io/wargame/challenges/14/ 문제 파일을 받으면 이렇게 실행 파일이 존재한다. 터미널에서 실행해 보면 사용자의 입력을 받고 Wrong을 출력하는 걸 볼 수 있다. IDA로 열어 보자!! 강의를 보긴 했지만 처음 해 보는 거라 막막하기만 하다… 우선 사용자의 입력으로 인해 correct, wrong 이 결정되고 출력되므로 단축키 Shift + F12를 사용해 correct 문자열을 찾아 보자!! Ctrl+F를 통해 correct를 찾아 주고 더블 클릭해 주면 아래와 같은 화면이 뜬다. View → Open Subviews → Cross References 를 누르면 이 문자열이 참조되는 함수를 볼 수 있다. 사실상 위의 사진에서도 correct는 main+.. [포너블/pwnable.kr] input input2@pwnable:~$ ls flag input input.c ls로 파일을 열어 보면 3개의 파일이 보인다. cat으로 열어 본 input.c는 다음과 같다. #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(str.. [포너블/pwnable.kr] shellshock #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } setresuid, setresgid를 shellshock_pwn의 권한으로 부여 /home/shellshock/bash를 실행하고 echo shock_me 이 문제는 참… 처음 딱 보면 뭐 어쩌라는 건지 shellshock은 또 뭐고 뭐 진짜 어쩌라는 거임 이런 생각이 딱 들고 아예 아무 생각도 못하게 된다. 그래서 다른 라업들을 참고한 결과 shellshock, 환경변수, bash에 대해 좀 더 .. 이전 1 ··· 4 5 6 7 8 9 10 ··· 12 다음