전체 글 191

해커스쿨 LOB level 2

id : gremlin pw : hello bof world 1. 파일 목록 확인, 소스코드 분석 파일 목록 확인(ls)을 했더니 cobolt라는 실행파일과 c소스파일이 나왔다. 우선 cobolt.c의 내용을 확인해봤다(cat). level1과 같은 형식의 문제인데 buffer의 크기가 16으로 매우 작다는 것이 포인트이다. cobolt 프로그램을 실행(./)하면 argv error라고 출력되고, 입력값의 크기를 너무 크게 넣으니 Segmentation fault가 나왔다. 2. tmp 디렉토리 생성, 환경변수 확인 환경변수 확인 등의 작업을 위해 tmp 디렉토리를 생성(mkdir) 후 tmp디렉토리로 이동(cd)했다. 25byte쉘코드로 시도해봤는데 계속 오류가 나길래 인터넷 검색 후 41byte 쉘코..

[백준_1152] 단어의 개수

https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net #include int main() { char S[1000000];//문자열 입력받는 배열 선언 gets(S);//입력 문자 한 줄 전체 입력 받음 int count = 0; int k = 0; if (S[0] != ' ') {//입력 문자 첫 글자가 빈칸이 아니면 count값 1 증가 count++; } while (S[k]) {//문자열이 끝날 때 까지 반복 if (S[k] == ' '..

프로그래밍/C 2022.03.01

[백준_10809] 알파벳 찾기

https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 내가 처음 제출한 코드 #include int main() { char S[100]; scanf("%s", &S); int num[26]; for (int k = 0; k < 26; k++) { num[k] = -1; } for (int i = 0; i < sizeof(S); i++) { if (num[S[i]-'a'] == -1) { num[S[i]-'a'] = i; } } for ..

프로그래밍/C 2022.02.26

[백준_11720] 숫자의 합

https://www.acmicpc.net/problem/11720 11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net 띄어쓰기나 구분 표시 없이 입력되는 숫자를 어떻게 하나씩 떼어 계산하지? ㄴ 정수로 받아서 10씩 나눠가며 한자리씩 값을 얻어야 하나? -> 근데 문자열 카테고리에 있는 문제니까 문자열을 이용해야겠지 정수를 문자열로 입력받으려면 어떻게? sprintf를 이용해야 하나? #include int main() { int n, sum = 0; scanf("%d", &n);//입력할 숫자 갯수(n) 정수형 입력 char input[100];//둘째줄에 입력할 숫자를 넣을 배열(n이 최대 ..

프로그래밍/C 2022.02.26

[백준_2577] 숫자의 개수(배열 0으로 초기화)

int num[10] = { 0, }; while (result > 0) { num[result % 10]++; result /= 10; } for (int i = 0; i < 10; i++) { printf("%d\n", num[i]); } 자릿수에 해당하는 num 인덱스 값을 증가시켜줌 예를 들어, 자릿수가 2면 num[2]의 값 1 증가, 자릿수가 8이면 num[8]의 값 1 증가하는 방식 이렇게 하면 내가 작성한 코드 10~28행을 아래와 같이 짧게 줄일 수 있다. #include int main() { int a, b, c; int result; scanf("%d %d %d", &a,&b,&c); result = a * b * c; int num[10] = { 0, }; while (result..

프로그래밍/C 2022.02.20

[백준_10951] A+B - 4 (EOF)

EOF(End Of File) : 파일 끝 조건을 위한 컴퓨터 용어, 보통 -1값을 가짐 https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC_%EB%81%9D 입력이 끝날 때까지 A+B를 출력하는 문제이다. '입력이 끝날 때'를 구현하기 위해 EOF를 이용하는 것이다. 두 정수의 입력(scanf)이 EOF가 아닌 동안 반복 #include int main() { int a; int b; int result; while (scanf("%d %d", &a, &b)!=EOF){ result = a + b; printf("%d\n", result); } return 0; } 두 정수의 입력(scanf)이 -1(EOF의 표현값)이 아닌 동안 반복 #include int main..

프로그래밍/C 2022.02.17

Dreamhack_image-storage(파일 업로드 공격)

https://dreamhack.io/wargame/challenges/38/ image-storage php로 작성된 파일 저장 서비스입니다. 파일 업로드 취약점을 이용해 플래그를 획득하세요. 플래그는 /flag.txt에 있습니다. Reference Server-side Basic dreamhack.io 1. 문제 링크 접속, 공격 코드 작성 문제 링크로 접속하면 파일을 업로드하는 페이지가 나온다. 페이지 이름은 Image Storage라고 되어 있지만 업로드 파일 확장자가 제한되어 있지 않기 때문에 어떤것이든 업로드할 수 있는 취약점이다. 드림핵에서 예시로 제공된 php코드이다. 자세히 뜯어보면 파일이 열리면 cmd창을 열게 한다는 내용으로 복잡하진 않지만 백지 상태에서 이 코드를 혼자 생각해내지는 ..

Dreamhack_command-injection-1

https://dreamhack.io/wargame/challenges/44/ command-injection-1 특정 Host에 ping 패킷을 보내는 서비스입니다. Command Injection을 통해 플래그를 획득하세요. 플래그는 flag.py에 있습니다. Reference Introduction of Webhacking dreamhack.io 1. 문제 링크 접속, 페이지 작동 확인 문제 링크 접속 첫 화면 상단 Ping탭 클릭 시 화면 여기에 8.8.8.8을 입력해 어떻게 작동하는지 보기로 했다. ping 전송 결과 내용이 확인된다. 2. 메타문자 입력 검사 우회 파일 목록을 확인해 보고자 리눅스 다중명령어(하나의 라인에서 여러 명령어를 실행할 수 있도록 하는 기호)인 세미콜론(;)을 넣어보려..

Dreamhack_csrf-1(CSRF 취약점)

https://dreamhack.io/wargame/challenges/26/ csrf-1 여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. Reference Client-side Basic dreamhack.io 이 문제는 강의의 해설을 따라가며 해결했다. 코드에 대한 자세한 해설은 웹해킹로드맵/stage5/[함께실습]CSRF/2.웹서비스 분석에 있으니 이번 writeup은 코드 분석 없이 문제 풀이만 작성했다. 코드 분석 결과 이 문제의 취약점은 XSS공격을 방지하는 장치를 했지만 CSRF공격은 방지하지 못했다는 점이다. 1. 문제 링크 접속, 취약점 발생 여부 확인 문제에서 주어진 링크에 접속하면 왼쪽과 같은 화면을 볼 수 있다. 문제 ..