전체 글 81

Webhacking.kr 53번 문제 풀이

소스 코드를 보자! 코드를 보면, answer로 들어오는 값과 hidden_tabled의 값이 같으면 문제가 풀린다. 그럼 hidden_table의 값을 알아내야 한다. 보면 GET 방식으로 val 값을 받고, 이를 sql 문에 넣는다. select랑 by가 필터링 되니까, 테이블 명을 알아낼 수 있는 procedure analyse(); 를 이용하면 될 것 같다! ?val=1 procedure analyse();를 입력하였더니 위와 같은 화면이 나왔다. 나온 결과를 바탕으로, ?answer=chall53_755fdeb36d873dfdeb2b34487d50a805를 url에 입력해주었더니 문제가 풀렸다!

xcz.kr 36번 문제 풀이

문제 피시방에서 아동 청소년 보호법에 위배되는 파일을 소지한 기록을 발견했다. 아래의 형식에 맞춰 증거를 수집해라. 시간은 GMT+9 입니다. lowercase(md5(원본 경로_만들어진 시간_마지막 실행 된 시간_쓰인 시간_볼륨 시리얼)) ex)lowercase(md5(C:\XCZ\key.txt_20121021160000_20131022000000_20131022000000_AAAA-BBBB)) 파일을 다운받아서 보니까 윈도우 구조이길래, FTK Imager로 열어보았다. 우리가 찾아야 하는 건 청소년 보호법에 위배되는 파일을 소지한 기록인데, 실행한 흔적이 있으면 lnk 파일이 생성되니까 lnk 파일을 먼저 보았다. AppData - Roaming - Microsoft - Windows - Recen..

Wargame/xcz.kr 2021.07.01

Webhacking.kr old 4번 문제 풀이

view-source를 눌러서 소스 코드를 보자. 코드를 해석하면 다음과 같다. 1. 10000000부터 99999999 숫자 중 하나 + salt_for_you를 더한 문자열을 hash에 저장한다. (ex. 10001111salt_for_you) 2. 1에서 수행한 결과 값이 담긴 hash를 chall4 세션값에 넣는다. 3. hash 변수에 대해서 sha1을 500번 수행해준 후 hash 변수에 저장한다. 4. hash 변수에 있는 값을 화면에 출력한다. (sha1을 500번 수행한 결과) 5. 사용자가 password에 입력한 값과 chall4의 세션값이 같으면 문제가 풀린다! 우리가 알고 있는 값은 sha1을 500번 수행한 hash 값이다. 문제는 sha1이 해시함수여서 복호화를 할 수 없다는 ..

Webhacking.kr old 11번 문제 풀이

view-source를 눌러 보자~! 코드가 짧다! 코드를 보면 정규 표현식이 사용되었음을 알 수 있다. [1-3] : 1, 2, 3 중 하나 [a-f] : a, b, c, d, e, f 중 하나 {5} : 5번 반복 . : 임의의 한 문자 * : * 앞에 있는 문자가 없거나 하나 이상 사용된 정규 표현식을 풀어서 쓰면 위와 같다. _, p, a, s는 문자로 그대로 쓰면 되고 \t은 탭을 뜻하는 것이다. 그럼 우리는 정규 표현식에 맞추어 url에서 val로 값을 넘겨주자. 이때 탭은 url 인코딩 된 값인 %09으로 넣어주면 된다! 그랬더니 문제가 풀렸다! 참고로 나는 1aaaaa_IP주소%09p%09a%09s%09s를 입력하여 문제를 풀었지만, 1대신에 2, 3을 입력해도 되고 a대신에 b-f 중 다..

dreamhack rev-basic-6

문제 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요! 언제나 그랬듯 [오른쪽 마우스 - 다음을 찾기 - 모든 모듈 - 문자열 참조]를 눌러서 문자열을 검색해준다! Correct가 보이니 해당 위치로 이동한 후, 분기점을 찾아보자. 분기점은 00007FF711251175이고, 00007FF71125116E에서 호출되는 함수의 결과에 따라 Correct와 Wrong이 나누어진다. 00007FF71125116E에 BP를 걸어둔 다음 살펴보자. 함수를 살펴보면 다음과 같다. (abcd를 입력한 후, 첫 번째 도는 경우) 1. rax에 0 넣기(반복문이 ..

Wargame/dreamhack 2021.06.29

Webhacking.kr old 37번 문제 풀이

문제를 클릭했더니 위와 같은 화면이 떴다. view-source를 눌러보자. 코드를 정리하면 다음과 같다. 1. 'tmp-현재 시간'으로 파일이 만들어진다. 2. 만들어진 파일에 127.0.0.1이 쓰인다. 3. 만들어진 파일 이름에서 , ., /, 공백을 없앤다. 4. 파일을 연 후, 파일을 업로드한 IP 주소를 쓴다. 5. 파일을 업로드한 IP 주소와 7777 포트로 소켓 통신을 맺는다. 6. 소켓 통신이 맺어지면 flag 값을 보낸다. 그럼 우리는 뭘 하면 될까? 1. 포트포워딩을 해주어야 한다. (이걸 안 해서 문제 푸는데 오래 걸렸다 . . ^^) KT 공유기의 경우에는 172.30.1.254로 접속하면 포트포워딩을 할 수 있다. (초기 아이디 : ktuser, 비밀번호 : homehub) 위와..

[Chap8] 버스와 입출력

01 CPU 칩과 시스템 버스 시스템 버스 ; CPU와 메모리, 입출력 장치 간 정보를 교환하는 통로 시스템 버스는 CPU 칩에 있는 다양한 핀과 연결함 [1] CPU 칩 CPU 칩에는 통신에 필요한 핀들이 있는데 입력이나 출력 중 하나만 가능한 핀도 있고, 입출력이 모두 가능한 핀도 있음 CPU 핀 ; 주소, 데이터, 제어 세 가지 유형으로 나뉘며 유형 별로 묶어 버스라고 한다. 주소 버스(핀) : 명령을 인출 할 때 해당 명령의 메모리 주소를 출력하는 것 CPU 성능을 결정하는 변수 (1) 주소핀의 수(주소 버스 크기) → 주소핀의 수가 m개이면 메모리 주소를 최대 2^m개 지정 가능 (2) 데이터 핀의 수(데이터 버스 크기) → 데이터 핀의 수가 n개이면 명령 한 번으로 n비트 워드를 읽거나 쓰기 ..

Webhacking.kr 60번 문제 풀이

view-source를 누르자. PHPSESSID 쿠키 값이 정수가 아니면 Access Denied가 뜬다. get으로 mode=auth를 입력하면 세션 idx 값에 해당되는 txt 값이 result에 저장된다. 이때 이 result값과 idx 값이 일치하면 문제가 풀리게 된다. 아래를 보면 if문이 하나 더 있는데 IP 주소가 127.0.0.1이 아닐 경우, 생성한 txt 파일을 1초 후 삭제하는 것을 볼 수 있다. 일단 PHPSESSID 값을 정수형으로 바꿔주자. PHPSESSID 값을 1234577로 변경한 후, 새로 고침을 하니 로그인을 하라는 메시지가 뜬다. 다시 로그인을 하니, Access Denied라는 문자열이 없어졌다. ?mode=auth를 입력하자. 역시 풀리지 않았다. idx가 세션에..

CodeEngn Basic RCE L19

문제 이 프로그램은 몇 밀리세컨드 후에 종료 되는가 우선 문제를 열어보면 패킹 되어 있다. PEiD로 보자. UPX로 패킹 되어 있다. 언패킹 해주자. 정상적으로 뜬다! 프로그램을 실행시키다 보면 위와 같은 에러 창이 뜬다. 에러 창이 뜨는 곳에 BP를 걸고 다시 실행해보았다. 0040EA50 함수에 들어가서 에러 메시지가 뜨는 곳을 보니 주소 0040EAF9였다. 해당 주소로 가서 보자. 들어가보았더니 위와 같이 IsDebuggerPresent 함수로 안티 디버깅을 수행하고 있었다. 디버깅이 탐지되면 에러 메시지를 출력하는 주소 004338DE로 이동한다. 그럼 004338DE로 이동하는 명령어 부분을 고쳐보자. JNZ를 JZ로 변경해주었다. 다시 실행해보자. 0040EA13에서 메시지 박스가 뜨는 것..

Wargame/CodeEngn 2021.05.31

[Chap7] 보조 기억 장치(2)

04 RAID(Redundant Array of Independent Disks) ; 디스크를 배열 구조로 연결하여 용량을 늘리고 액세스 속도를 크게 향상시킬 목적으로 만들어진 기억장치 등장 배경 : 디스크 액세스 시간의 대부분이 기계 장치들이 동작하는 시간이라 속도를 높이는데 한계가 있어서 처음에는 명칭이 Redundant Array of Inexpensive Disks였다. 그러나 저장 기술의 발전으로 용량 대비 가격이 하락되어 비용보다 데이터의 안정성, 오류 정정, 디스크 장애에 의한 데이터의 손실 방지 측면이 강조되어 Independent로 바뀌게 됨 RAID에 사용되는 기술 스트라이핑 : 데이터를 여러 조각으로 분할하여 여러 개의 디스크에 분산해서 저장하는 기술 미러링 : 하나의 데이터를 디스크..