python에서 .pyc는 컴파일된 파일입니다.

문제 자체가 decomplie하라는 문제이기 때문에 해당 파일을 디컴파일 먼저 수행해야 합니다.



"Easy Python Decompiler" 프로그램을 통해 간단하게 수행할 수 있습니다.

해당 프로그램을 사용하면 .pyc_dis 파일이 생성되고 확장자를 py로 바꾸고 열어보면 코드를 확인 할 수 있습니다.



아래 코드의 flag가 답을 얻기 위해 찾아야 되는 값입니다.

그리고 현재 시간을 통해서 ok변수 값의 flag값이 만들어지고 입력한 flag값과 비교를 합니다.


그렇다면 모르는 flag값을 제외한 코드를 사용해서 flag값을 만들 수 있습니다.

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
29
30
# Embedded file name: bughela.py
import time
from sys import exit
from hashlib import sha512
 
def main():
    print 'import me :D'
 
def GIVE_ME_FLAG(flag):
    if flag[:43!= 'http://wargame.kr:8080/pyc_decompile/?flag=':
        die()
    flag = flag[43:]
    now = time.localtime(time.time())
    seed = time.strftime('%m/%d/HJEJSH', time.localtime())
    hs = sha512(seed).hexdigest()
    start = now.tm_hour % 3 + 1
    end = start * (now.tm_min % 30 + 10)
    ok = hs[start:end]
    if ok != flag:
        die()
    print 'GOOD!!!'
 
def die():
    print 'NOPE...'
    exit()
 
 
if __name__ == '__main__':
    main()
cs



최종적으로 아래 코드를 이용해서 flag값을 획득 할 수 있습니다.

하지만 서버 시간과 사용자pc의 시간이 달라 flag값이 제대로 되지 않을 수 있습니다.


서버 시간에 맞춰 pc시간을 조정해서 python코드를 실행하면 올바른 값을 얻을 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Embedded file name: bughela.py
import time
from sys import exit
from hashlib import sha512
 
def main():
    print 'import me :D'
    now = time.localtime(time.time())
    seed = time.strftime('%m/%d/HJEJSH', time.localtime())
    hs = sha512(seed).hexdigest()
    start = now.tm_hour % 3 + 1
    end = start * (now.tm_min % 30 + 10)
    ok = hs[start:end]
    print(ok)
 
if __name__ == '__main__':
    main()
cs




'WarGame > wargame.kr' 카테고리의 다른 글

[WarGame] tmitter  (0) 2018.11.01
[WarGame] img recovery  (0) 2018.10.31
[WarGame] md5_compare  (0) 2018.10.30
[WarGame] strcmp  (0) 2018.10.30
[WarGame] md5 password  (1) 2018.10.29




단순히 값을 비교하라는 문제입니다.

value1에는 알파벳 만을 사용해야 하고,

value2에는 숫자 만을 사용해서 md5값이 동일해야 합니다.



php md5 crash라고 검색을 해보면 아래 참고 사이트가 나오게 됩니다.

해당 사이트에서 md5의 숫자와 문자열의 값이 동일한 것에 대한 이야기가 나오니 확인해 보시면 됩니다.



[참고]

알파벳/숫자 md5 값 동일: https://news.ycombinator.com/item?id=9484757


'WarGame > wargame.kr' 카테고리의 다른 글

[WarGame] img recovery  (0) 2018.10.31
[WarGame] pyc decomplie  (0) 2018.10.30
[WarGame] strcmp  (0) 2018.10.30
[WarGame] md5 password  (1) 2018.10.29
[WarGame] login filtering  (0) 2018.10.29






strcmp에 관한 문제입니다.

strcmp에 취약점이 있는 문제로 해당 취약점을 알아야 풀 수 있습니다.


지금 $password는 rand()함수로 인해 값이 계속 변해서 정확한 password는 알 수 없습니다.


strcmp(a,b) 함수의 역할은 a가 작으면 음수, b가 작으면 양수, 같으면 0을 반환해주는 함수입니다.

0을 반환해야 문제가 풀리기 때문에 배열과 비교를 하면 0의 값을 띄워주는 취약점을 이용하면 됩니다.



 POST 방식으로 값이 날라가기 때문에 burp suite를 사용해 중간에 값을 바꿔줍니다.

password=1로 보내는 게 아니라 password[]=1로 보내서 배열 형식으로 보내주면 배열과 문자열을 비교하여 0의 값을 반환합니다.



[참고]

[PHP] strcmp 취약점을 이용한 인증 우회: http://hackability.kr/entry/PHP-strcmp-%EC%B7%A8%EC%95%BD%EC%A0%90%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B8%EC%A6%9D-%EC%9A%B0%ED%9A%8C


'WarGame > wargame.kr' 카테고리의 다른 글

[WarGame] pyc decomplie  (0) 2018.10.30
[WarGame] md5_compare  (0) 2018.10.30
[WarGame] md5 password  (1) 2018.10.29
[WarGame] login filtering  (0) 2018.10.29
[WarGame] fly me to the moon  (0) 2018.10.28

+ Recent posts