일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- bee-box
- 알고리즘
- 소프트웨어
- WarGame
- CodeEngn
- Webhaking
- 네트워크보안
- Web
- 워게임
- 드림핵
- 네트워크
- dreamhack
- System
- 웹해킹
- 소프트웨어보안
- network
- hacking
- 해킹
- ftz
- TCP
- reversing
- 시스템해킹
- XSS
- 모의해킹
- 웹
- 리버싱
- webhacking
- 시스템
- 순서도
- 비박스
- Today
- Total
목록hacking (8)
Without a Break

level6로 로그인하면 바로 hint가 뜨는데, 여기서 엔터를 누르면 텔넷 접속 서비스가 뜬다. 1, 2, 3 중 어느 bbs를 선택해도 trying ~ 이 뜨다가 level6의 로그인이 끊기고 putty가 종료된다. 그래서 level6로 다시 로그인 후, hint가 출력됐을 때 Ctrl+C로 다시 쉘로 돌아왔다. ls 명령으로 파일/디렉토리를 확인했더니 password라는 파일이 있는 것을 확인할 수 있었다. password의 내용을 확인하면 level7의 패스워드를 확인할 수 있다!

level2도 level1과 마찬가지로 로그인 후 ls 명령으로 파일/디렉토리 리스트를 출력해보니 hint 파일이 있는 것을 발견할 수 있었다. hint 파일의 내용을 확인해보니 level2에서는 텍스트 파일 편집을 이용하여 쉘 명령을 실행시키라고 한다. 우리는 level3의 패스워드를 찾아야하므로, 권한이 level3이고 SetUID가 걸린 파일을 찾아보자. find 명령을 사용해서 권한이 level3인 SetUID가 걸린 파일들을 출력한다. 출력된 파일들을 살펴보면 /usr/bin/editor를 찾을 수 있다. 힌트에서 텍스트 파일 편집을 통해 쉘을 실행시키라고 했으니, 이 파일이 수상하다. 파일이 있는 위치로 이동해주고, editor를 실행해준다. 실행하면 위와 같이 뜬다. 외부 쉘 실행시키는 !를..

putty 실행 후, level1로 로그인 해준다. 로그인하면 아무것도 뜨지 않는다. 일단 ls 명령으로 파일/디렉토리 리스트부터 확인해보자. hint라는 파일이 있는 것을 확인할 수 있다. 파일 내용을 확인해보니 level1에서 뭘 해야하는지를 알 수 있었다. SetUID가 걸린 파일을 찾는 법은 find 명령을 사용하는 것이다. user가 level2인 SetUID가 걸린 파일을 찾는 것이므로 -user 옵션과 -perm 옵션을 사용해주면 다음과 같다. find / -user level2 -perm -4000 /에서부터 user가 level2이고, SetUID가 걸린 모든 파일을 찾으라는 뜻이다. 명령어를 입력하면 권한이 level2이고 SetUID가 걸린 파일들이 출력된다. 출력된 파일 중에 /bi..

Training 6 패스워드 파일 분석 방법 패스워드 파일 : 한 서버를 사용하는 사용자들의 모든 정보를 기록해 놓은 파일 사용자들의 모든 정보를 저장해 놓은 매우 중요한 파일 root : x : 0 : 0 : Admin : /root : /bin/bash 각 필드별로 살펴보자. 1번째 필드 : 서버에 로그인할 때 사용되는 아이디(계정) ex. root 2번째 필드 : 패스워드가 적혀있는 부분 (크래커를 사용한 공격을 막기 위해 /etc/shadow/라는 파일을 만들어 관리자 권한을 가진 사람이 아니면 펼쳐 볼 수 조차 없도록 만듦. 그래서 x라는 문자만 보여줌) 3번째 필드 : 컴퓨터가 보는 로그인 계정. (컴퓨터는 영어가 아닌 숫자로 사용자를 판단하기 때문에) 4번째 필드 : 사용자가 속해있는 그룹 ..

strcmp 함수를 무시할 수 있으면 플래그를 얻을 수 있다고 한다. 문제 사이트로 들어가면 패스워드를 입력할 수 있다. 패스워드 입력란 밑의 view-source를 누르면 소스코드를 볼 수 있다. 소스코드를 살펴보면, 사용자가 입력한 password와 실제 password를 strcmp(비교)하여 둘이 같으면(0) 플래그를 출력하는 것을 알 수 있다. PHP strcmp의 취약점을 이용해서 플래그를 얻을 수 있다는 것을 알 수 있다. PHP strcmp의 취약점은, 문자열이 아닌 배열을 인자로 넣게 되면 반환 값이 0이 된다는 것이다. 개발자 도구 요소에서 password를 배열로 바꿔주면 플래그를 얻을 수 있다.

코드 분석 @APP.route('/ping', methods=['GET', 'POST']) def ping(): if request.method == 'POST': host = request.form.get('host') cmd = f'ping -c 3 {host}' try: output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5) return render_template('ping_result.html', data=output.decode('utf-8')) except subprocess.TimeoutExpired: return render_template('ping_result.html', data='Timeout !') except s..

코드 분석 @app.route("/", methods = ["GET", "POST"]) def index(): input_val = "" if request.method == "POST": input_val = request.form.get("input_val", "") m = re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val) if m: return render_template("index.html", pre_txt=input_val, flag=FLAG) return render_template("index.html", pre_txt=input_val, flag='?') input_val에 입력된 값을 input_val에 저장 정규표현식 : dr → 아무..

실행 파일을 디버거로 열어준다 correct를 출력하는 입력값을 찾아야하니 문자열로 가보자 이동해보니 correct를 발견할 수 있었다. 해당 위치로 이동해보자 이동해보니 test eax,eax로 input 값과 정답을 비교하고 correct를 출력한다. 비교 후 correct를 출력하기 전에 출력하는 7FF6D04B1000의 위치로 이동해보자 rcx(input값)와 7FF7D04B3000의 값을 한 글자씩 12번 비교한다. 7FF7D04B3000에 플래그가 있는 것 같으니 해당 위치로 이동해보자 HEX DUMP에 플래그가 있었다