/change에 보면 주석으로 github 주소가 있다.
auditing gogo
register 함수
userinput인 username을 strlower()로 던져 그 결과를 가지고 if User.query.filter_by(username=name).first() 구문으로 중복 회원 검사를 한다.
비밀번호를 바꿀 수 있는 change() 함수.
여기도 마찬가지로 strlower로 name을 소문자로 만드는데, session에 박힌 name을 이용한다.
login() 함수
마찬가지로 strlower로 소문자화 후 이를 name에 저장한다.
정리하자면
register -> strlower(input_name) -> db_name
login -> strlower(input_name) -> session_name
change -> strlower(session_name) -> db_name(update)
오잉 change에서 이미 strlower가 된 user input name을 한번 더 strlower한다
그리고 python에선 아시는분들은 아시겠지만 string을 소문자화 하는 메서드는 string.lower()이다.
해당 소스코드에서 strlower가 커스텀으로 구현되어있는데 뭐 이상한 nodeprep.prepare를 사용한다고 한다.
찾아보면 뭐 유니코드 이슈가 있다고하는데 자세한건 첨부하기 귀찮고,
대충 파이썬으로 슥슥 코드짜서 nodeprep.prepare 함수에 대한 unicode fault를 전수조사 해보면 0xe1b4ac~0xe1b582가량까지 유니코드를 넣으면 영대문자가 나오는 것을 확인할 수 있다.
그럼 저 문자를 사용하여 가입을 하면
[register]
(user input) adᴹin -> adMin (db)
[login]
(user input) adᴹin -> adMin (session)
[change]
(session) adMin -> admin (db)
kia~~ 우리는 이제 admin의 비번을 바꿀 수 있다.
'Web > BUUCTF' 카테고리의 다른 글
[BUUCTF] - [RoarCTF 2019]Easy Calc1 (0) | 2020.02.14 |
---|---|
[BUUCTF] - [强网杯 2019]高明的黑客1 (0) | 2020.02.14 |
[BUUCTF] - [SUCTF 2019]EasySQL1 (0) | 2020.02.13 |
[BUUCTF] - [护网杯 2018]easy_tornado1 (0) | 2020.02.13 |
[BUUCTF] - [强网杯 2019]随便注1 (0) | 2020.02.12 |