목록wargame (207)
임의의 비번을 입력했다. 해당 문자열을 찾아주었다. 분기문에서 성공루틴으로 갈린다. strcmp로 문자를 비교한다. 06162370056B6AC0을 비교해준다. 이대로 비번을 입력하면 키젠을 풀수있다.
Name이 한자리라 했는데 프로그램에 입력하면 문자열 길이가 모자르다고 나온다. 해당 문자열의 위치를 찾았다. 문자열의 길이를 체크하는 조건문을 패치해주기로 한다. 길이를 1로 만들었다. 그 후 성공루틴으로 가는 분기문을 찾았다. 해당 함수에서 Name에 따른 key값이 생성되는것을 알수있었다. 암호 생성 루틴인데 Name 한자리이기 때문에 해당 부분만 분석을 진행하면된다. Name을 A로 입력할시 생성되는 키값은 0x0051bffe374f0이다. 여기서 ffe3값을 문자열로 변환해 키값의 앞자리가 되는 방식이다. 파이썬으로 코드를 짜서 Name값을 찾기로 했다. beda가 속한 키값이 존재한다. Name은 0x46으로 F이다.
c++로 작성된 프로그램이다. 콘솔형 프로그램이다. 정답 루틴으로 갈리는 분기문을 찾았다. [EBP-3C]에는 0xE4C60D97 이라는 값이 있다. 이를 EAX와 같게 만들어주어야 한다. EAX에는 무슨 값이 들어가나 확인을 했다. 4321을 입력했을 때 0x10E1이 들어있었다. 0x10E1을 십진수로 바꾸면 4321이 그대로 나온다. 즉 0xE4C60D97을 십진수로 바꾸어 입력하면 정답이다.
L14번과 비슷한 문제이다. 아이디 패스워드를 맞추는 프로그램이다. 델파이로 작성된 프로그램이다. 먼저 분기문을 찾아주었다. EAX와 0x45B844의 데이터를 비교한다. 0x45B844에는 0x6160의 데이터가 들어가있다. 0x407774에 비밀번호를 설정하는 루틴이 존재하는것을 알 수 있다. ret값을 0x6160으로 만들어주면 된다. 비밀번호를 설정하는 핵심 코드이다. 해당 부분을 파이썬 코드로 만들어 브루트포싱으로 비밀번호를 찾아준다. for b in range(0,10): for i in range(0,10): for j in range(0,10): for k in range(0,10): for m in range(0,10): temp = b temp = temp + temp * 4 temp ..
아이디를 준지 모르고 풀었다. 아이디와 비번을 입력하는 간단한 프로그램이다. UPX를 수통 언패킹 해주었다. PUSHAD를 찾고 ESP 트릭을 해준다. 하드웨어 BP를 걸어준다. OEP 진입 후 DUMP뜨고 IAT설정을 해준다. 이후 DUMP파일을 다시 올려준다. Run to user code로 문자열을 찾아주었다. 비번은 해당 함수의 리턴값과 esi값을 비교한다. esi는 CodeEngn입력시 0x129a1 고정이다. 그런 비번을 작업하는 함수가 어떤 루틴이 있는지 보았다. 12345입력시 1 * 0xA^4 + 2 * 0xA^3 + 3 * 0xA^2 + 4 * 0XA + 5 의 연산작업을 걸친다. 이값이 0x129a1과 같아야 한다. 브루트 포싱으로 답을 찾기로 했다. 비번이 76193이 나왔다.
보호되어 있는 글입니다.
웹 해킹 로드맵 1page의 마지막 문제이다 웹 해킹의 경험이 없어 이번 문제는 굉장히 어려웠다. #!/usr/bin/env python3 from flask import Flask, request import os app = Flask(__name__) @app.route('/' , methods=['GET']) def index(): cmd = request.args.get('cmd', '') if not cmd: return "?cmd=[cmd]" if request.method == 'GET': '' else: os.system(cmd) return cmd app.run(host='0.0.0.0', port=8000) 코드는 굉장히 짧다. GET메소드가 아닐경우 system함수가 먹힌다. 그렇다면..