반응형

취약점 39

Dreamhack Black-Hacker-Company WriteUp

문제 풀이app.py/user-page에서 url 파라미터에 url을 입력하여 해당 url의 response를 확인할 수 있다.ALLOW_HOST 중 하나 포함되고, BLASK_LIST에서는 하나도 포함되면 안된다.TOKEN = "{**SWAPED**}"FLAG = "SWAP{sample_flag}"BLACK_LIST = ['file', 'dict', 'sftp', 'tftp', 'ldap', 'netdoc', 'localhost', 'gopher', '127.0.0.1']PASSWORD = f"{random.randint(0, 255):02X}"ALLOW_HOST = ['abcd.com', 'asdf.com', 'example.com']print("password is : " + PASSWORD)@ap..

Dreamhack Special Letter Translator WriteUp

문제 풀이app.pytranslator 페이지에서 dill.loads를 통해 base64로 인코딩 된 데이터를 역직렬화 한다.dill에서 역직렬화 취약점이 존재하기 때문에 RCE가 가능하다. 하지만 vip token이 존재해야지 해당 요청을 전송할 수 있다.@app.route('/translator', methods=['GET', 'POST'])def translator(): token = request.cookies.get('Authorization') decoded_token = verify_vip_token(token) if not decoded_token: return jsonify({"error": "VIP CAN USE!"}), 403 if request.me..

Dreamhack Are you admin? WriteUp

문제 풀이app.py메인 페이지 접근 시 intro 페이지로 리다이렉트 진행한다.intro 페이지에서는 name과 detail 파라미터가 존재하며, intro.html에 값을 전달한다.@app.route("/", methods=["GET"])def index(): return redirect("/intro")@app.route("/intro", methods=["GET"])def intro(): name = request.args.get("name") detail = request.args.get("detail") return render_template("intro.html", name=name, detail=detail)intro.html만약 name과 detail이 존재한다면 ..

Lab: Password reset broken logic 문제 풀이(WriteUp)

문제 설명패스워드 리셋 기능에서 취약점이 존재한다. 이를 이용하여 carlos의 계정에 로그인하면 문제가 해결된다.문제 풀이로그인 페이지에 접속하면 로그인 기능과 패스워드 찾기 기능이 존재한다. 먼저 로그인을 수행한다. 로그인에 성공하면 My Account 페이지에 접근된다. forgot-password 페이지에 접근하면 입력창에 username 또는 email을 입력 받는다. 이메일을 확인하면 비밀번호 재설정 링크가 존재한다. 해당 링크를 클릭한다. 비밀번호 재설정 링크 접속 시 비밀번호를 변경할 수 있다. 비밀번호를 1234로 재설한 한 후 패킷 확인 결과 username 파라미터에 사용자 계정인 wiener이 존재한다. username 파라미터를 carlos로 변경하여 전송한다. carlos:123..

Lab: 2FA simple bypass 문제 풀이(WriteUp)

문제 설명carlos 계정 페이지에 접근하면 문제가 해결된다.문제 풀이wiener 계정으로 로그인을 성공하면 2차 인증으로 4자리 코드를 입력해야한다. 이메일에서 4자리 코드를 확인한다. 4자리 코드를 입력할 경우 My Account 페이지에 접근된다. carlos 계정으로 로그인을 수행한다. carlos 계정으로 로그인할 때도 /login2 페이지로 이동하여 2차 인증을 요청한다. 하지만 응답에 세션이 존재하는것을 보고 2차 인증을 하지 않고 My Account 페이지에 접근을 시도해보았다. 2차 인증을 하지 않고도 My Account 페이지에 접근이 되었으며, 문제가 해결되었다.

Lab: Broken brute-force protection, multiple credentials per request 문제 풀이(WriteUp)

문제 설명Carlos의 계정으로 로그인에 성공하면 문제가 해결된다.문제 풀이로그인 실패 시 Invalid username or password 에러가 발생한다. password를 브루트 포스 공격한 결과 1분 동안 로그인 차단이 된다. 다음과 같이 비밀번호를 리스트 형식으로 여러 패스워드를 전송할 경우 로그인에 성공하였다.["123456", "password", "12345678", "qwerty", "123456789", "12345", "1234", "111111", "1234567", "dragon", "123123", "baseball", "abc123", "football", "monkey", "letmein", "shadow", "master", "666666", "qwertyuiop", "1..

Lab: Broken brute-force protection, IP block 문제 풀이(WriteUp)

문제 설명브루트 포스 공격을 통해 피해자의 계정에 로그인하면 문제가 해결된다.문제 풀이로그인 페이지에 접근한 후 로그인 요청을 수행한다. 로그인을 여러번 시도 후 로그인에 실패할 경우 1분동안 로그인을 할 수 없다. 하지만 로그인 실패와 성공을 번갈아서 하면 차단당하지 않는 다는것을 발견하였다. 이를 적용해 브루트 포스 공격 페이로드를 제작하였다.해당 코드를 통해 아이디와 패스워드 리스트를 생성하였다.def create_username_list(): for i in range(200): with open("username.txt", "a") as fa: fa.write("wiener\n") fa.write("carlos\n")def create_n..

Lab: Username enumeration via different responses 문제 풀이(WriteUp)

문제 설명주어진 사용자 이름, 비밀번호 리스트를 사용하여 로그인하면 문제가 해결된다.문제 풀이로그인 페이지에 접속하여 로그인 요청을 수행한다. 로그인 실패 시 Invalid username 에러가 발생한다. 버프스위트 Intruder 기능을 사용하여 주어진 사용자 이름으로 username을 브루트 포스 공격을 수행한다. 응답 값이 다른 요청을 확인한 결과 ai라는 username으로 로그인 요청을 시도하였을 때 Incorrect password 에러가 발생한다. 이를 통해 ai 라는 아이디가 존재한다는 것을 유추할 수 있다. username을 ai로 설정하고, 주어진 패스워드 리스트를 사용하여 password를 브루트 포스 공격한다. Status code가 302이고, length가 다른 요청을 확인할 ..

반응형