Web V1
Published on May 11, 2025
Web V1
This is my first time making a website using Python!!!! 😀
Pada challenge ini, kita diberikan sebuah .zip file, langsung saja kita analisis file app/main.py. Terdapat potongan kode sebagai berikut:
@app.route('/')
def index():
if 'user_id' not in session:
return redirect('/login')
user = db.session.get(User, session['user_id'])
if user.is_admin == '1':
return render_template('index.html', admin=True,
username=user.username)
else:
return render_template('index.html', admin=False,
username=user.username)Melihat ada user.is_admin menandakan adanya atribut is_admin.
@app.route('/register', methods=['GET','POST'])
def register():
if request.method=='POST':
data = request.form.to_dict()
data['password'] = hash_password(data['password'])
user = User(**data)
db.session.add(user)
db.session.commit()
return redirect('/login')Hal pertama kali yang terlintas dipikiran adalah membuat akun dengan atribut is_admin=1 karena request.from.to_dict() bakal blindly masukin semua atribut termasuk is_admin = 1. Abis tu kita register.
Berhasil masuk dengan akun yang diregister tadi, terus dihadapkan dengan admin fetcher, mari kita kembali ke main.py:
@app.route('/internal')
def internal():
if request.remote_addr != '127.0.0.1':
abort(403)
return "Flag: IFEST13{fake_flag}"Dari gambar di atas, berarti kita harus akses 127.0.0.1/internal tapi tidak bisa, liat lagi ke atas:
if 'daffainfo.com' not in url:
result = "Error: Only URLs with hostname 'daffainfo.com' are allowed."Ternyata dalam url yang ingin di-fetch harus ada daffainfo.com, jadi kita bisa kasi payload http://daffainfo.com@127.0.0.1:1337/internal, di mana si dafa sebagai userinfo dan bakalan di-ignore buat DNS resolution.