WriteUp/Webhacking.kr

webhacking.kr : challenge 22

vared 2020. 9. 11. 22:54

admin 으로로그인 해야되는게 목표다.

회원가입창이 있으니까 일단 간단하게 가입해서 로그인 해보자.

hi! starson1

 

your password hash : bf69a4c3b0da457bf159b60ca2ff230a

이렇게 로그인 해쉬를 준다. 실제로 비밀번호를 해쉬해서 보관하나 보다.

decode 해보자.

md5 해쉬되어있으면서 뒤에 apple이라는 값이 별도로 붙는다 (salt)인듯.

 

컬럼 이름은 id pw 주어진 상황이다.

이렇게 생겼겠지.

 

id

pw

guest

~~

admin

~~~

starson1

hash('2019330012+apple')

 

로그인 자차에서 인젝션을 시도하기는 힘들듯 하다.ㅠㅠ 해쉬되버려서,

 

join 에서 admin 값으로 아이디를 만들수 있다면 할수 있을 것이다.

 

id : admin' or 1=1%23

pw : 11111

으로 만들어보니 이전과는 다른 결과가 나왔다.

"no admin"

 

admin 이라는 단어에 필터링이 걸려있는거 같으니 우회해서 넣어보자

admin = 61646d696e

 

id : 'or admin=0x61646d696e

pw : 1

query admin 있어서인지 필터링 되는것 같다.

 

일단 아이디로 테스트를 해보자.

id : 'or 1=1#

pw : 2019330012

 

-> Wrong password!

 

id : 'or 1=2#

pw : 2019330012

 

-> login fail

일단 post 방식으로 갈때 uuid=starson1&pw=2019330012 이런 형식으로 주어진다는거 알아놓자

이렇게 거짓을 판단할 있도록 만들어놓은것을 봐서 blind sql injection 이다.

비밀번호를 단순하게 해야겠다.

id: test pw : a

 

 

id_query : 'or id='admin' and ascii(substr(pw,1,1))=__

근데 해쉬함수라 pw 길이가 32 정해져 있다. ascii substr 이용해서 값만 구해주면 된다.

 

코드를 짜서 보자

 

uuid=admin' and ascii(substr(pw,1,1))>0 #&pw=a

이면 참이 나온다.

연습용 아이디에서는

starson1' and ascii(substr(pw,1,1))= 98# 넣을때 참이 나왔다.

 

찾아보자
 

admin hash is : 6c9ca386a903921d7fa230ffa0ffc153

이거를 디코딩 해주고, salt apple 빼주면 답이되겠다.

 

답이 wow 겠다.(apple salt)

: salt 붙어있는 hash 인지 + blind sql injection 할수 있는 true false 찾기.