티스토리 뷰
3번째 글.
6번 문제와 마찬가지로 잠겨져있는 글을 선택해보았다.
암호를 입력하라고 나온다.
바로 소스코드를 확인해 보았다.
이처럼 상단에 trans()라는 함수가 있었다. 특별히 볼 곳은
EncryptReadKey, UserPasswordEncryptFunc() 인 것 같다.
아마 UserPasswordEncryptFunc()에 인자값으로 사용자가 입력한 암호가 들어가면 그것이 인코딩되어
EncryptReadKey와 같으면 문제가 게시글에 접속할 수 있는 것 같다.
이전 문제와 마찬가지로 Utill.js를 확인해보았는데 input값을 encode해주는 것 같다.
나는 처음에 접근을 할 때 내가 지정한 input값으로 설정하고 EncryptReadKey 값을 그것에 맞게
바꿔주는 식으로 했는데 잘되지 않았다. 결국 위의 encode 함수를 분석하는 방식으로 변경하였다.
encode에서 알 수 있는 부분을 말해보겠다.
먼저 입력값의 첫글자, 두번째 글자, 세번째 글자를 각각 chr1, chr2, chr3에 담는다.
여기서 의문이 들 수 있다.
만약에 입력값이 그냥 a라면?
chr1에는 a의 아스키코드 값인 97이 담기겠지만
chr2과 chr3에는 NaN이 담기게 된다. 그렇기 떄문에 입력값이 한글자라도 위의 코드에 의해서
encode된 값은 4글자가 될 것이다. 3글자씩 끊어서 읽기 때문에
3글자를 입력하면 4글자가 output으로 나오고 4글자를 입력하면 8글자가 나올 것이다.
그 다음은 7글자를 입력하면 12글자가 나올 것이다.
따라서 EncryptReadKey를 4글자씩 띄어서 보는 것이 편할 것이다.
iRAJ HaTR iRAJ HaLL FBOw rXoL F6j2 rSXC
이런식으로 말이다.
여기서 또 한가지를 유추 할 수 있다.
chr에는 숫자이든 다른 문자이든 상관없이 charCodeAt()에 의해서 아스키코드 숫자 값이 담기게 된다.
하지만 위에서 언급한 것처럼 입력된 문자를 3글자씩 나누었을 때
문자가 3글자 이상이 아니면 NaN이 값이 담기게 된다.
위의 코드를 보면 chr2가 NaN면 enc3과 enc4에 64를 담아주는데
여기서 볼 수 있듯이 enc의 값은 _keyStr에 담겨있는 문자열의 인덱스번호 이다.
즉 64는 _keyStr의 65번째 문자인 "C"를 의미한다.
EncryptReadKey를 다시보면 맨 마지막에만 C가 1개 들어가있다.
그 뜻은 rSXC에 해당하는 글자가 2글자란 소리이다.
만약 한글자였으면 enc3과 enc4에 둘다 64가 담겨서 C가 2번 출력됐을 것이다.
이해를 쉽게하는 것을 돕기위해 EncryptReadKey의 맨 앞 4글자인 iRAJ를 가지고 설명하겠다.
enc4부터 거꾸로 유추하는 것이 편할 것이다. J는 _keyStr 52번째 값이다.
따라서 chr3 & 63의 값이 51이 나오면 된다. 이에 대응하는 chr3의 값은 's' 이다.
enc3에서 'chr3 >> 6' 이부분은 무조건 0 or 1이 나오게 되어있다.
아스키코드 숫자값의 마지막은 127인데 이는 1111111이기 떄문에 왼쪽으로 6만큼 비트 쉬프트를 하면
1이 나오게 된다. 64보다 작은 값들은 6자리이기때문에 0이 나온다.
따라서 enc3에서 (chr3 >> 6)을 OR해주면 무조건 자기자신 or 자기자신 +1 의 값이 나온다.
사실상 enc3은 chr2의 값에 따라 영향을 받는다고 볼 수 있다.
(추가로 chr2 & 15를 하게 되면 0~15사이의 값을 가지게 되고 <<2를 하게되면 0~60까지 4의 배수 값을 가지게 된다.)
그다음 enc1에서는 실수를 하면 안된다. 'i' 는 _keyStr 에서 17번째 값인데
왼쪽으로 2만큼 비트시프트를 해서 16이 될 수 있는 값은 65, 66, 67이 3가지이다...
따라서 enc2와 적절하게 비교를 잘해가면서 'iR' 이 나올 수 있도록 해야한다.
이렇게하다보면 iRAJ의 값은 'Bes' 라는 것을 알 수 있다.
나같은 경우에는 iRAJ가 뒤에 한번 더 나오고 'Bes' 문자열 뒤에 올 수 있는 단어를 추측해서 풀 수 있었다.
(좀 노가다지만 이방법이 알고리즘을 만드는 것보다 빠르게 풀 수 있다고 판단하였다.)
알고리즘을 작성하고 싶지만 귀찮니즘으로인해 패스하겠다.
'writeup > hackerfactory' 카테고리의 다른 글
[Hacker Factory Elementary Level] 5번 문제 (0) | 2020.07.11 |
---|---|
[Hacker Factory Elementary Level] 4번문제 (0) | 2020.07.09 |
- Total
- Today
- Yesterday
- CSS Injection
- WebHacking
- 해커팩토리
- Lord of SQL injection
- htb
- dreamhack DOM XSS
- SQL Injection
- LFI vulnerability
- hackerfactory
- 드림핵
- 드림핵 padding oracle
- dreamhack Relative Path Overwrite
- xxe injection
- alasql
- csp bypass
- Windows Fundamentals
- hack the box
- dreamhack web-alasql
- webhacking.kr
- csp
- 드림핵 DOM XSS
- dreamhack padding oracle
- php LFI
- blind injection
- DreamHack
- 웹해킹
- wargame
- htb Windows Fundametals
- 드림핵 Relative Path Overwrite
- dreamhack CSS Injection
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |