壓倒
Ye0L
壓倒
Total
Home
Today
  • ByO (59)
    • 악성코드분석🍳 (10)
      • Android (2)
      • Windows (8)
    • 백준⌨ (1)
    • 개발💻 (14)
      • Python (14)
      • C (0)
    • AI (2)
      • ML (2)
      • DL (0)
    • Dreamhack (23)
      • Web hacking (20)
      • Reversing (3)
    • CTF (5)
      • Forensic (5)
    • Study (4)
      • Linux (2)
      • Web (2)

블로그 메뉴

  • 홈
  • 방명록
  • 깃허브😀
  • 티스토리 홈

공지사항

인기 글

태그

  • Raccoon Stealer v2
  • CSRF
  • APK 구조
  • selenium
  • web hacking
  • 악성코드분석
  • reversing
  • forensic
  • File Download Vulnerability
  • 리버싱
  • 드림핵
  • 크롤링
  • Background:Web Browser
  • ClientSide: XSS
  • Raccoon Stealer
  • PYTHON
  • Background: Cookie & Session
  • Crawling
  • [DigitalForensic]with CTF
  • dreamhack

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
壓倒

Ye0L

[Web hacking] funjs Write-Up
Dreamhack/Web hacking

[Web hacking] funjs Write-Up

2023. 1. 17. 17:36

문제


funjs(출처 : dreamhack)

Write-Up


해당 문제에서는 index.html 파일이 주어지는 문제이다. index.html을 보고 분석한 후 문제에서 의도한 입력값을 입력하면 해결되는 문제이다.

index.html 을 열게 되면 Flag를 입력하는 창이 계속해서 움직이는 것을 확인할 수 있으며, 코드 상에서 움직이는 부분을 제거하였다.

움직이는 입력 창
움직이는 부분과 관련된 코드

다음으로 main() 함수를 살펴보자. main() 함수 내부에 다음과 같이 _0x4949, _0x42931 배열 2개가 선언되어 있고 operator에 총 4개의 연산이 존재한다.

var flag = document[_0x374fd6(0x183)](_0x374fd6(0x182))['value'],
            _0x4949 = [0x20, 0x5e, 0x7b, 0xd2, 0x59, 0xb1, 0x34, 0x72, 0x1b, 0x69, 0x61, 0x3c, 0x11, 0x35, 0x65, 0x80, 0x9, 0x9d, 0x9, 0x3d, 0x22, 0x7b, 0x1, 0x9d, 0x59, 0xaa, 0x2, 0x6a, 0x53, 0xa7, 0xb, 0xcd, 0x25, 0xdf, 0x1, 0x9c],
            _0x42931 = [0x24, 0x16, 0x1, 0xb1, 0xd, 0x4d, 0x1, 0x13, 0x1c, 0x32, 0x1, 0xc, 0x20, 0x2, 0x1, 0xe1, 0x2d, 0x6c, 0x6, 0x59, 0x11, 0x17, 0x35, 0xfe, 0xa, 0x7a, 0x32, 0xe, 0x13, 0x6f, 0x5, 0xae, 0xc, 0x7a, 0x61, 0xe1],
            operator = [(_0x3a6862, _0x4b2b8f) => {
                return _0x3a6862 + _0x4b2b8f;
            }, (_0xa50264, _0x1fa25c) => {
                return _0xa50264 - _0x1fa25c;
            }, (_0x3d7732, _0x48e1e0) => {
                return _0x3d7732 * _0x48e1e0;
            }, (_0x32aa3b, _0x53e3ec) => {
                return _0x32aa3b ^ _0x53e3ec;
            }],
            getchar = String[_0x374fd6(0x178)];

배열 및 연산자를 선언하고 flag 배열(입력 값)과 특정 연산을 거친 배열 2개( _0x4949, _0x42931)를 비교하는 것을 알 수 있다.

if (flag[_0x374fd6(0x17c)] != 0x24) {
    text2img(_0x374fd6(0x185));
    return;
}
for (var i = 0x0; i < flag[_0x374fd6(0x17c)]; i++) {
    if (flag[_0x374fd6(0x176)](i) == operator[i % operator[_0x374fd6(0x17c)]](_0x4949[i], _0x42931[i])) {} else {
        text2img(_0x374fd6(0x185));
        return;
    }
}
text2img(flag);
특정 연산하는 것을 어떻게 알 수 있을까? 배열 및 연산자를 선언하는 코드에서 +, -, *, ^ 연산을 선언한 것을 알 수 있고 operator[i % operator[_0x374fd6(0x17c)]] 코드에서 % 연산을 하는 것으로 보아 인덱스에 따라 다르게 연산을 할 것이라고 추측하였다.(예시 - 0번째 인덱스는 +, 1번째 인덱스는 -)

추측한 것이 맞는지 확인하기 위해 크롬 개발자 도구를 활용하여 디버깅을 진행하였다.

디버깅을 진행하게 되면 입력된 값 의 길이가 0x24(36)인지 확인한다.(디버깅으로 length 함수 확인)

if (flag[_0x374fd6(0x17c)] != 0x24) {
    text2img(_0x374fd6(0x185));
    return;
}
입력된 값의 길이 검사

입력된 값을 0x24(36)으로 맞춘 후 디버깅을 다시 진행하였다. 이후 연산자가 어떻게 동작하는지 알기 위해서 operator 부분에 BP를 걸고 확인하면 인덱스 값에 따라 +, -, *, ^ 순서대로 연산하는 것을 알 수 있다.

i%4 == 0 일 경우 +연산
i%4 == 1 일 경우 -연산

즉, _0x4949, _0x42931 2개의 배열을 인덱스에 따라 +,-,*,^ 연산을 한 값이 Flag이다.

위의 내용을 바탕으로 작성한 코드는 다음과 같다.

var1 = [0x20, 0x5e, 0x7b, 0xd2, 0x59, 0xb1, 0x34, 0x72, 0x1b, 0x69, 0x61, 0x3c, 0x11, 0x35, 0x65, 0x80,
        0x9, 0x9d, 0x9, 0x3d, 0x22, 0x7b, 0x1, 0x9d, 0x59, 0xaa, 0x2, 0x6a, 0x53, 0xa7, 0xb, 0xcd, 0x25, 0xdf, 0x1, 0x9c]
var2 = [0x24, 0x16, 0x1, 0xb1, 0xd, 0x4d, 0x1, 0x13, 0x1c, 0x32, 0x1, 0xc, 0x20, 0x2, 0x1, 0xe1, 0x2d, 0x6c, 0x6, 0x59,
        0x11, 0x17, 0x35, 0xfe, 0xa, 0x7a, 0x32, 0xe, 0x13, 0x6f, 0x5, 0xae, 0xc, 0x7a, 0x61, 0xe1]

var3 = []


for i in range(len(var1)):
    if(i % 4 == 0):
        var3.append(var1[i] + var2[i])
    elif(i % 4 == 1):
        var3.append(var1[i] - var2[i])
    elif(i % 4 == 2):
        var3.append(var1[i] * var2[i])
    else:
        var3.append(var1[i] ^ var2[i])
    print(chr(var3[i]), end = '')

Flag


DH{cfd4a77a013ea616d3d5cc0ddf87c1ea}

오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗


Uploaded by N2T

'Dreamhack > Web hacking' 카테고리의 다른 글

session-basic Write-Up  (0) 2023.01.17
Background: Cookie & Session  (0) 2023.01.17
[Web hacking] Carve Party Write-up  (0) 2023.01.14
Tools:Browser DevTools  (0) 2023.01.13
Background:Web Browser🌐  (0) 2023.01.12
    'Dreamhack/Web hacking' 카테고리의 다른 글
    • session-basic Write-Up
    • Background: Cookie & Session
    • [Web hacking] Carve Party Write-up
    • Tools:Browser DevTools
    壓倒
    壓倒
    악성코드 분석, 개발, 백준 등 나의 일지

    티스토리툴바