Web

 

Flag Shop 

 

회원가입 - 로그인 후 접속하면 money 1000원이 되어있다. 플래그는 99999원이상 있어야 살 수 있다.

 

힌트 2번째 까지 던져 줬을 때 플래그 가격을 낮출 수도 없고 회원가입 할 때 "초기자금"이 만들어 진다고 했는데 회원가입 창에서 뭔짓 해야된다고 추측만 하고 있다가 마지막 힌트 보자마자 1분내로 풀렸다.

 

회원가입시 전송되는 파라미터의 값을 추가해준다

기존 : username=qwe&password=qwe&nickname=qwe

파라미터 조작 : username=qwe&password=qwe&nickname=qwe&point=100000

그럼 회원가입시 10만원이 생겨서 플래그를 살 수 있다.

HCAMP{h2ckingc4mp_0pen_beta_market!}

 

 

hahahash

1번

MD5 레인보우 테이블에 돌린다 camp

 

2번

==이므로 매직해시를 사용한다 240610708

 

3번

md5 충돌하는 해시값을 찾는다. (당시에 풀지 못하고 충돌 값을 나중에 듣게되었습니다.)

hash1 =
%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
hash2 =
 %4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

 

4번

매직해시를 사용한다.

md5 = 240610708

sha1 = 10932435112

HCAMP{bc56f25ac552e60ed73d75d4e9557b91}

 

Rev 

 

Demon Notepad

 

파일 실행시

무한루프로 계속 돈다. 문제 풀 때 브금 좋아서 조금 들으면서 했다.

 

우선 UPX 패킹이 걸려있어서 언패킹 시켜준다.

문제의 그 루트인데 볼 것도 없었다.dword_4058B0 변수가 True여야만 조건문으로 들어가는데 4058B0 변수가 아예 0으로 선언되어 있었다. x32dbg 켜고 IDA랑 비교하며 해당 분기문으로 간 뒤 값을 1로 패치해주고 돌렸다.

 

안티디버깅 걸려있어서 xdbg 안티디버그 플러그인을 사용했다.

 

값좀 돌아가더니 플래그 나오는 부분에 BP걸고 나온 값 받으면 된다.

 

HCAMP{D3m0n_N0t3p4d}

 

MISC

1만개의 txt파일이 있는 압축파일을 준다.

압축 풀고 파이썬 코드 짜서 확인한다.

for i in range(0, 10000):
    f= open("C:/Users/user/Desktop/misc_0/"+str(i)+".txt",'r')
    line = f.readline()
    if line != "HCAMP{THIS_IS_NOT_REAL_FLAG}":
        print(i)
        break;
    f.close()

6487번째가 나온다.

 

HCAMP{OH..YOU_FOUND_MEE!!}

 

flag.png

png이미지를 깨트려서 숨긴줄 알았으나

HxD로 열어보니 PNG시그니처인 IHDR 헤더가 3개있는것을 발견하고 스테가노그래피로 풀게되었다. 가장 위에 있는 2개의 PNG 시그니처 헤더와 푸터를 지워주면 마지막 PNG만 남게되는데 이게 플래그다.

 

HCAMP{FL4G_IS_HERE}

 

Treasure hunt

해당 페이지에 숨겨진 소스를 들어가보면 분석하기 싫게 생겨서 하다가 때려치고 나왔는데 중간에 파격적인 힌트로 난독화를 다 풀어주셨다.

 

 

flag가 들어가면 밑에 문자열들을 다 합친 key와 비교한다 이 때 flag는 plaintext에서 문자열 하나당 아스키코드로 변환 후 base64함수를 통해 인코딩한 뒤 @ 과 함께 ciphertext에 추가된다. 그리고 모든 문자열에 이 과정이 끝나면 다시한번 base64인코딩 한다.

 

key 값을 먼저 base64 디코딩 한뒤 나온 값들중 @를 빼고 하나씩 base64 디코딩 더 해주면 플래그가 나온다.

 

a=[87,48,119,95,85,95,82,95,84,82,51,65,83,85,82,69,95,72,85,78,84,51,82,33]
for i in range(0,len(a)):
print(chr(a[i]))

 

W0w_U_R_TR3ASURE_HUNT3R!

 

 

 

 

 

 

 

 

 

 

 

대회 끝나고 추가 풀이 (플래그 인증해서 점수가 떨어졌다.)

텔레그램 봇과 대화한다.

flag명령어를 쓰면 주는 그림은 훼이크고

/date시 시스템 명령어를 사용하여 Command Injection이 가능하다고 한다..

이걸 씨텦 시작 후 10분도 안되서 푼 사람이 있다니...

 

 

 

 

그 외 삽질했던 기억문제

goods shop

관리자 쿠키 탈취후 upload부분에서 취약점 터트리는 부분인데 패킷 잡아서 확인해보니 accept xml 전송과 xml 파일 같이 보내는거 보고 XXE 시도했는데 잘 안되서 XXE OOB도 시도했는데 안되길래 이게 맞을텐데 왜 안될까.. 하고 좌절, 결국 제가 문제였습니다. 

 

씨텦도 발표도 재밌었습니다!! 

http://13.125.168.158:11020/

실행하면 폼창 하나 있고, 아무것도 없다.

PEID는 뭘로 만들어졌는지 모른다고 한다 EP Section이 text가 아닌 다른 코드 섹션이 들어있다.

이 프로그램은 패킹 되어 있다.

들어가면 Kernel32.dll을 GetModuleHandleA를 통해 불러오고 FreeLibrary로 다시 사용을 끝내는 부분이 보인다.

kernel32.dll은 메모리 관리, 입출력 명령, 프로세스와 스레드 생성, 그리고 동기화 함수들 같은 대부분의 Win32 베이스(base) API들을 응용 프로그램에 내보낸다. (한마디로 윈도우 커널에서 사용하는 운영체제 동작에 사용하는 명령 집합들)

 

내리다 보면 10 20 30 40 50 을 xor 연산하는 부분이 있는데 패킹된 파일을 복호화 하는 과정인거 같다.

 

 

계속 F8로 실행시키다 보면 메모리 VirtualProtect 함수를 콜하고 xor 연산하는 부분들이 보인다. 이부분들도

아마 패킹된 PE구조를 복호화 하는 과정이다.

 

패킹은 실행압축을 만드는데 원래 코드를 숨기고 패킹된 코드를 보여주어 디컴파일 하기 어렵게한다. 그러나, 패킹된 파일도 결국 원본코드를 실행시켜 프로그램을 동작시켜야 하기 때문에. 언패킹 과정이 끝나면 원래 코드 돌아가야 한다. 그 부분의 경계선을 찾아야 하고 원래 코드로 돌아가면 거기가 OEP(Original Entry Point)이다.

 

결국 이부분들은 패킹된 부분을 복호화 하는 과정들이다. 무엇을 복호화 하는지는 PE구조를 더 까봐야 알.. IAT 등을 복호화 하는 거 같다.. 정확하게는 모르겠다..

이 401150으로 jmp문을 가면 원래 언패킹된 코드가 나온다. 그 후 분석해야 한다면 덤프를 떠줘도 되지만

이 문제는 OEP를 찾는 문제기 때문에 상관없다.

 

OEP = 401150

 

 

'Wargame > Reversing.kr' 카테고리의 다른 글

Easy Keygen [100]  (0) 2020.07.25
Easy Crack [100]  (0) 2020.07.24

ReversingKr KeygenMe


Find the Name when the Serial is 5B134977135E7D13

 

해당 값의 시리얼이 되는 이름을 찾는 문제.

시리얼까지 입력하고 나면 창이 꺼진다.

해당 문자열이 있는 곳으로 이동

input name 문자열 입력받고 내려오면

cmp esi, 3 은 esi가 3인지 비교한다. 3이되면 xor esi, esi로 초기화함.

 

esp+esi+C 주소에 0x10, 0x20, 0x30이 들어있고

esp+ebp+10 주소에는 내가 입력한 이름이 들어있다.

내 이름이 전부 키젠값이 생성될 때 까지 10,20,30을 for문 마냥 끝날 때 까지 계속 돈다 

 

밑으로 가면 키젠값이 맞는지 byte 단위로 확인하는 루틴이 있다. 맞으면 Correct! 틀리면 wrong!을 출력한다.

다른 키젠과 이름이 맞는지는 상관 없고 5B134977135E7D13의 시리얼에 맞는 이름을 찾는 간단한 파이썬 코드를 짜준다.

 

'Wargame > Reversing.kr' 카테고리의 다른 글

Easy Unpack[100]  (0) 2020.07.25
Easy Crack [100]  (0) 2020.07.24

실행하면 작은 입력창이 나타나고 값을 입력하면 틀렸다고 한다.

 

무슨 문자열이 있는지 확인해보니 Congratulation의 문자열이 보여 해당 주소로 이동한다.

문자열이 있는 곳 위의 주소 4010AA에 BP를 걸고 값을 입력하면 BP가 걸린다. 비교구문을 확인한다.

 

cmp byte ptr ss:[esp+5],61  -> esp+5의 주소에는 내가 2번째로 입력한 값이 들어있다 a와 비교한다.

 

Call easy_crackme.401150 함수주소의 내부중 일부이다. esi-1에 5y가 들어가고 내가 입력한 값이 edi-1에서 값을 비교한다.

 

aa5y를 치면 2번째 구간 까지 통과가된다.

3번째 구간에선 R3versing을 비교하는데 eax+1과 esi+1 각각 비교값, 내가 입력한 값을 byte 단위로 하나씩 루프를 돌며 비교한다 비교가 끝나면 다음 분기로 들어간다.

마지막 부분 esp+5에 2번째 글자가 들어있었고 esp+4에 첫번째 글자이다. E와 비교한다

모두 맞으면 Congratulation !!의 메시지가 들어간 MessageBoxA를 띄운다.

 

'Wargame > Reversing.kr' 카테고리의 다른 글

Easy Unpack[100]  (0) 2020.07.25
Easy Keygen [100]  (0) 2020.07.25

+ Recent posts