본문 바로가기
드림핵

[드림핵] out of money 풀이

by jwcs 2024. 1. 10.
728x90

https://dreamhack.io/wargame/challenges/732

 

out of money

드림이가 선물을 준비하려하는데 돈이 없네요... 그럼 무에서 유를 창조해볼까요? Note : 음수의 값이 허용된다면 그 행동의 반대를 하게 됩니다.

dreamhack.io

 

/

첫 페이지다. 이름만 입력하면 간단하게 로그인되는 페이지다.

 

로그인 후 /

1로 로그인해보았다. `산타 사설 거래소` 버튼과 `드림 유동성 풀` 버튼이 있는데 산타부터 가보겠다.

 

/santa

DHH, DHC, DHD가 화폐의 일종인 것 같다. DHH를 빌릴 수 있고 빌린 화폐를 다른 화폐로 교환이 가능하다.

 

/dream

DHC를 담보로 내서 DHD를 빌릴 수 있다. 예금 기능도 있는 것으로 보인다.

 

@app.route("/dream/lend", methods=['POST'])
def dream_loan():
    value = float(request.form['value'])

    dhc_price = get_price('DHC')
    dhd_price = get_price('DHD')

    max_lend = session['col_DHC'] * dhc_price / dhd_price * 0.8

    print(max_lend)

    if session['DHD'] + value < 0.0:
        return render_template("dream.html", session=session, message="더 갚으시게요...?")
    if max_lend < value:
        return render_template("dream.html", session=session, message="그만큼 빌리기에는 담보가 부족합니다!")

    session['DHD'] += value
    session['debt_DHD'] += value

    return render_template("dream.html", session=session, message="대출 완료!")

 

코드를 잘 확인해보면 빌릴 수 있는 값의 한도가 있다. max_lend라는 값인데, 이는 한 번 빌리는 데에 대한 한도이다. 작은 값으로 여러번 빌리면 큰 돈을 가져올 수 있을 것이다.

DHH 대출 후 DHD 빌림

DHH를 9000 빌렸다.

DHH 9000을 모두 DHC로 바꿨다.

DHC 9000을 모두 담보로 제출했다.

DHD를 5000씩 2번 빌렸다.

DHD 10000을 모두 DHH로 바꿨다.

대출한 DHH를 갚고 flag를 구매할 만큼의 DHH를 소유하고 있다.

 

짜잔

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

flag로 제공된 url을 들어가보면서 flash loan이라는 것에 대해 알게 됐다. 문제는 business logic error로 풀긴 했으나 제작자가 의도한 문제 풀이 방법은 이것이 아닌 것 같다. flash loan으로 풀어보려고 했으나 어려우니 다음에 시간 널널할 때 시도해보겠다.

728x90
반응형

'드림핵' 카테고리의 다른 글

[드림핵] login-1 풀이  (1) 2024.01.13
[드림핵] baby-sqlite 풀이  (2) 2024.01.10
[드림핵][wargame.kr] type confusion 풀이  (2) 2024.01.10
[드림핵] web-misconf-1 풀이  (0) 2024.01.08
[드림핵] proxy-1 풀이  (0) 2024.01.08