본문 바로가기
Hacking/DreamHack

[DreamHack] 드림핵 random-test

by st-og 2023. 11. 17.

 

해당 문제는 인증 코드의 취약점을 활용하여 브루트포스 공격을 시도하는 문제이다.

 

소스코드

 


풀이

locker_num에는 랜덤 한 소문자 알파벳+숫자, password에는 100~200의 랜덤 한 숫자가 저장되어 있다.

 

해당 문제에서 중요하게 봐야 할 코드는 아래의 코드이다.

if locker_num != "" and rand_str[0:len(locker_num)] == locker_num: 
	...
    return render_template("index.html", result = "Good")

 

해당 코드는 랜덤 한 문자열이 저장되어 있는 rand_str의 0번째부터 locker_num의 길이만큼만 비교를 하여 True일 경우 Good을 리턴한다. 

 

예를 들어 rand_str에 저장된 문자열이 test라 할 때 locker_num의 값으로 t만 넣더라도 해당 코드는 True로 인식하고 Good을 리턴할 것이다. Good 문자열을 보고 첫 번째 자리가 t임을 알고 다음 공격 때에는 t+[랜덤 문자열]로 공격을 진행하게 되면 기존보다 훨씬 빠른 속도로 공격을 할 수 있게 된다.

 

브루트포스 공격을 진행하기 위해 burp suite의 intruder기능을 사용하였다.

 

먼저 intruder를 사용하기 전 proxy를 사용하여 해당 웹사이트에 접속을 한다.

해당 input박스에 각각의 값들이 입력되어야 하기 때문에 intercept is on 버튼을 활성화 한 다음 값을 입력하면 된다.

가장 먼저 사물함 번호(소문자+숫자)의 값을

알아야 하기 때문에 사물함 번호 input의 값만 입력을 하여 전송한다.

 

입력한 값이 파라미터를 통해 전달되는 것을 확인할 수 있다.

해당 패킷을 intruder로 보내기 위해 Ctrl + i를 눌러준다.

 

 

intruder로 보내진 패킷의 공격 부분을 add를 사용해 지정해 준다.

 

그 후 payloads의 type을 brute forcer로 지정하고 원하는 길이로 설정한 후

 

값을 찾았을 떄 알아볼 수 있게 성공 시 출력되는 Good이라는 문자를 Match에 적용시킨 후 start attack을 하면 된다.

 

 

실행 시 Good이라는 문구에 1이 들어올 경우 해당 값이 True로 반환되었다는 뜻이 된다.

 

첫 번째 문자열 값은 3 임을 알 수 있다.

이제 positions에서 add값 앞에 3을 추가한 후 위의 작업을 반복하면 된다.

 

 

해당 공격을 반복하다 보면 3h65라는 값을 확인할 수 있다.

이제 positions에서 locker_num의 값은 3h65로 지정한 후 password에 add값을 지정하여 100부터 200의 값을 넣어보면 된다.

 

숫자를 대입하는 것이기 때문에 payload의 type을 numbers로 변경 후 from 100 to 200으로 지정 후

나올 값은 flag값이기 때문에 match는 DH로 지정하여 준다.

 

해당 설정을 마치고 start attck을 하게 되면

 

password는 136 임을 알 수 있다.

 

해당 패킷을 클릭하여 Response값을 확인하면

flag값을 확인할 수 있다.

'Hacking > DreamHack' 카테고리의 다른 글

[DreamHack] 드림핵 XSS Filtering Bypass  (2) 2023.11.19
[DreamHack] 드림핵 amocafe  (0) 2023.11.17
[DreamHack] 드림핵 Type c-j  (0) 2023.11.14
[DreamHack] 드림핵 baby-union  (1) 2023.11.14
[DreamHack] 드림핵 phpreg  (0) 2023.11.14