2020. 10. 4. 17:21ㆍ분석/교육청 자가진단
9월 말 점검 이후 RSA key가 그대로길래 오류 수정한 줄 알았는데 API 관련하여 꽤 수정이 있었던 것 같습니다.
다시 분석하는겸 분석 과정도 적어보겠습니다.
학교 검색 API
기존에는 /school을 사용했는데 현재는 /v2/searchSchool로 변경된 것을 볼 수 있습니다.
파라미터 부분은 변한 것이 없는 것을 볼 수 있습니다.
eduro-hcs/PoC[school.js]: 기존 코드
로그인 API (학교, 이름, 생년월일)
기존 로그인 API는 loginwithschool 이였는데 /v2/findUser로 변경되었습니다.
여전히 Host는 {교육청}hcs.eduro.go.kr 입니다.
볼 수 있듯이 생년월일과 이름은 여전히 암호화되어있고, orgCode(학교 코드)는 평문 전송입니다.
점검 이후 API에는 loginType: school과 stdntPNo과 추가된 것도 알 수 있네요.
RSA 암호화는 제일 아래에서 다루겠습니다.
eduro-hcs/PoC[loginWithSchool.js]: 기존 코드
비밀번호 설정 여부 API
이 API는 업데이트 이전 checkpw와 상응합니다.
역시 /v2/hasPassword로 바뀐 것을 볼 수 있습니다.
여전히 Authorization 헤더를 사용해 사용자 확인을 하고 있습니다.
eduro-hcs/PoC[checkpw.js]: 기존 코드
비밀번호 검증 API
업데이트 이전 secondLogin과 상응합니다.
여전히 비어있는 deviceUuid와 암호화되어 전달되는 password 파라미터가 있습니다.
유저 확인도 Authorization 헤더를 사용해 하고 있습니다.
eduro-hcs/PoC[secondLogin.js]: 기존 코드
학생 선택 API
업데이트 이전 selectGroupList과 상응합니다.
파라미터는 두개 역시 비어있고, Authorization 헤더를 사용해 사용자 확인을 하고 있습니다.
eduro-hcs/PoC[selectGroupList.js]: 기존 코드
학생 정보 API
업데이트 전 userrefresh와 상응합니다.
역시 바뀐게 없습니다.
eduro-hcs/PoC[userrefresh.js]: 기존 코드
설문 제출 API
기존 API와 동일하지만, 파라미터가 몇개 추가되었습니다.
기존 설문 제출은 rspns[번호]로 된 응답과 deviceUuid만 있었는데 업데이트 이후 API에는 upperToken(JWT)과 upperUserNameEncpt(학생 이름, 평문 전송)이 추가되었습니다.
파라미터로 전달되는 JWT와 Authorization 헤더는 학생 정보 API에서 전달 받은 JWT를 넣어야 합니다.
eduro-hcs/PoC[registerSurvey.js]: 기존 코드
RSA Encryption
난독화된 javascript 코드를 살펴보겠습니다.
이전에 봤을 때 개발 스택이 Vue였습니다. app.js에 다 들어있을거 같으니 한번 살펴보겠습니다.
actions에 뭐가 들어있습니다.
loginWithSchool이 메서드 명인걸 보아 레거시 수정만 했나봅니다.
보면 R.encryption.encrypt하여 암호화하는 부분이 있는데 살펴봅시다.
어떤 Object의 encryption가 선언되는 부분입니다.
encryption 값이 S라고 하니 찾아봅시다.
S = w라고 위에 나와있으니 w를 보겠습니다.
w.encrypt가 메서드로써 JSEncrypt(변수 k)를 호출해 암호화를 담당하는 함수임을 알 수 있고, k.setPublicKey의 인자로 전달되는 w.privateKey가 RSA Public Key임을 알 수 있습니다.
저 키를 사용하여 암호화하면 됩니다.
RSA Public Key
30820122300d06092a864886f70d01010105000382010f003082010a0282010100f357429c22add0d547ee3e4e876f921a0114d1aaa2e6eeac6177a6a2e2565ce9593b78ea0ec1d8335a9f12356f08e99ea0c3455d849774d85f954ee68d63fc8d6526918210f28dc51aa333b0c4cdc6bf9b029d1c50b5aef5e626c9c8c9c16231c41eef530be91143627205bbbf99c2c261791d2df71e69fbc83cdc7e37c1b3df4ae71244a691c6d2a73eab7617c713e9c193484459f45adc6dd0cba1d54f1abef5b2c34dee43fc0c067ce1c140bc4f81b935c94b116cce404c5b438a0395906ff0133f5b1c6e3b2bb423c6c350376eb4939f44461164195acc51ef44a34d4100f6a837e3473e3ce2e16cedbe67ca48da301f64fc4240b878c9cc6b3d30c316b50203010001
기존의 Key와 동일합니다.
여담으로 위 키를 일반 인증서 형태로 뽑으려면 openssl을 사용해 hex 형태인 키를 der -> pem으로 변환시키면 됩니다.
아무튼 위 과정을 걸쳐서 아래 글에서는 매크로 스크립트 및 자동화 어플리케이션을 개발해보았습니다.
'분석 > 교육청 자가진단' 카테고리의 다른 글
자가진단 사이트 분석 [4] _ Dart로 PoC 코드 작성해보자. (0) | 2020.09.27 |
---|---|
자가진단 사이트 분석 [3] _ PoC 코드 작성 완료 (비밀번호 없이 설문 가능) (0) | 2020.09.27 |
자가진단 사이트 분석 [2] _ PoC 코드 작성 (0) | 2020.09.27 |