분류 전체보기 50

[Whois] 시스템해킹 - 버퍼오버플로우3

3번째 문제는 함수나 변수에 들어가봐도 힌트가 너무 적었습니다. 마지막우로 command를 살펴보았습니다. command를 보면 60~90(16)까지 채워져있었고, 마지막 command 부분엔 ls -al이 있었습니다. *ls -al은 모든 디렉터리의 상세정보까지 볼 수 있는 명령어이다. ls -al대신 cat /flag 명령어를 실행시키고 싶었고, 지금껏 system(command) 에서 cat /flag를 실행시켰기 때문에 버퍼오버플로우를 발생시키고 명령어를 바꾸면 된다고 생각했습니다. 명령어 사용을 하기 전 오버플로우 리미트를 알기 위해 계산기를 통해 10진수 값을 알아왔습니다. 첫 번째 문제와 비슷한 형태로 해결할 수 있었습니다. cat;는 파이썬으로 인자전달을 할 때 블로그를 참고했었는데 정확한..

시스템 해킹 2021.11.23

[Whois] 시스템해킹 - 버퍼오버플로우2

main에는 spell1() 함수만 덩그러니 놓여있었습니다. spell1 함수 안으로 들어오자 위와 같은 코드가 나왔습니다. 1번 문제와 비슷한 유형으로 v1 값을 scanf로 받아주지만 정작 비교해주는 것은 v2이었습니다. 그렇기 때문에 v1을 오버플로우해서 v2에 접근하고 v2값을 수정해주어야 합니다. v2값이 77('M')이 된다면 spell2() 함수를 호출해줍니다. spell2()함수는 magic 과 pwnable! 지정된 길이 만큼 비교해 줍니다. (8uLL) spell1까지는 31칸 오버플로우 시켜주고 아스키코드 값인 (77=M) 을 Hex로 입력해주어 "\x4D"로 입력했습니다. 하지만 함수를 실행하고 다음 명령어를 어떻게 붙이는지가 난관이었습니다. spell2() 함수에 bof를 까 본 ..

시스템 해킹 2021.11.23

[Whois] 시스템해킹 - 버퍼오버플로우1

첫번째 student 파일을 IDA 프로그램을 사용해서 코드로 확인해 보니 v5가 1234567890을 만족할 때 flag를 알려주는 것을 확인했습니다. 그러나 scanf로 입력받는 것은 v4 뿐이며 if 문에서는 v5를 비교하기 때문에 v4의 값을 채워줘야 합니다. (버퍼오버플로우 발생시키기) 그렇기에 v4[28]은 총 28칸을 채워주어야 합니다. 이후, v5에는 1234567890값을 넣어주어야 하는데 어셈블러가 16진수(Hex)를 좋아하기에 계산기를 사용했습니다. IDA에서도 코드를 확인해보니 역시 16진수와 비교하고 있습니다. 위 사진을 보면 cmp(compare) 49960D2h 를 비교하여 flag를 출력해줍니다. *h는 16진수가 아님 가상머신을 이용해 칼리리눅스를 켜주었습니다. 쉘에서 py..

시스템 해킹 2021.11.22

[Whois] 정보보안교육 - 리버싱 EasyReverseMe 솔루션

이번에 사용한 툴은 ida이다. 한 눈에 보기 편하게 코드로 보았다. 어셈블러 코드가 뜨고 분석을 하였는데, v7에서 결과가 도출되고, v7 = 0; 에서 초기화 되는 것을 알게 되었다. (그 외의 코드를 해석한 것은 추후 추가할 예정입니다.) 핵심 부분만 c언어로 옮겨 주었다. 사실상 위에 코드가 어셈블러 20, c언어 80 수준이라고 생각했기에 바꿀 것도 없었다. flag 값은 위와 같이 나왔다.

포렌식 2021.11.08

[Whois] 정보보안교육 - 리버싱 Root-Me PE x86 - 0 protection

회원가입 후 메일을 받는다. 그 메일 속 링크를 타면 나오는 화면이다. (프랑스어로 바뀌며 로그인이 더이상 진행되지 않음) 어쩔 수 없이 친구에게 .exe 파일을 부탁하여 진행하였다. 사용한 툴은 x64 가 아니라 x32 이다. 일단 너무나 많은 ret / leave 이 보인다. 함수들로 이루어진 걸로 확인된다. *ret / leave == return 0; 문자열 검색을 시도해보았다. 이 이후는 여러가지 시도를 하였으나 많은 시도 끝에 도무지 알 수가 없었기에 구글링을 시작하였고, 파일이 손상됐음을 확인했다. 솔루션을 참조하며 검색한 결과 아무것도 나오지 않았다. (로그인 문제를 해결한 뒤 다시 시도하겠습니다.)

포렌식 2021.11.08

[Whois] 정보보안교육 - 리버싱 어셈블러 핸드레이(2)

* 핸드레이(1)에 기초적인 설명이 다 있으므로 새로운 내용 위주로 설명할 예정입니다. * 잘 모르는 부분이 많았어서 설명이 부실할 수 있습니다. 엄청 큰 공간을 필요로하는 것을 보고 배열이 떠올랐다. 제일 마지막 칸이 변수의 위치이다 그러므로 총 공간은 1020/4 인 255칸이 준비되어 있다는 의미이다. lea와 mov의 차이는 lea는 주소값을, mov는 값을 넣어주는 것이다. 어셈블러에서 주소값을 기호로 [] 나타낸다. 이중 대괄호는 당황스러웠다. 이중 포인터인가? 0xf9(16) == 249(10) 반복문처럼 생긴 이것은 반복문이다. c언어의 for와 같다. 설명은 위와 같다. 배열에 저장을 하는 핵심 과정이다. 0번째부터 7번째까지 저장해주었다. 7번째는 0이었다. 써놓고 보니 c언어 내용이었..

포렌식 2021.10.13

[Whois] 정보보안교육 - 리버싱 어셈블러 핸드레이(1)

코드 분석을 쉽게하기 위해 2-3줄 단위로 끊어주었다. 스택은 LIFO 구조이다. 메모리를 적재할 때 주로 사용되는 방법이다. 어셈블러는 16진수만 좋아한다 16진수로 입력을 받기 때문에 10진수로 변환하면 위와 같다. 또한 하드웨어에 변수라는 공간을 만들기 위해 원하는 변수 개수 x 변수 크기 만큼을 만들어 준다.(ex. int(4byte) 4개 == 4x4) 사용한 공간을 ebp에서 빼주었다. 하드웨어는 계산을 못하는 멍청이들 모임이다 못하기 떄문에 cpu에서 계산을 할 것이다. cpu의 구조는 제 블로그에서 확인하실 수 있습니다. *^^* 간략하게 설명하면 cpu에는 연산장치가 있기 때문에 이동해 준다. (기계어 -> 어셈블러 (

포렌식 2021.10.13

[암후] <암호학과 네트워크 보안> 책정리 2, 3주차

2.2 모듈로 연산 - 나눗셈 관계식 a = q x n + r => a를 n으로 나눌 때 r값이 무엇인지 - 모듈로 연산자 => n은 모듈로 r은 나머지 ex) a mod n = r, -18 mod 14 = (-4 + 14)10(양수만 가능) - 잉여류 Zn : 모듈로 n의 최소 잉여 집합: 모듈로 연산 결과는 항상 0 ~ n-1 정수 - 합동 : 연산자 ≡ ex. 13 ≡ 23(mod 10), -8 ≡ 2(mod 5) ① 합동 연산자: 다-대-일 / 등식 연산자: 일-대-일(one to one) ② 합동 연산자 우변의 mod는 공역을 의미 ⑴ 잉여류 : [a], [a]n은 모듈로 n으로 합동인 정소의 집합 ex. n=5일 경우 5개의 집합 존재 [0] = {..-10, -5, 0, 5, 10..} [1..

기타 이론 2021.09.28

[Whois] 정보보안교육 - 웹해킹 2주차(2) & Webhacking.kr level21

처음 guest 로그인은 로그인 성공으로 뜬다. admin은 login fail(거짓)로 뜬다. 세 번째로 sql 공격을 해보니 wrong password라고 떴다. 즉, 쿼리문이 성립된다는 것인데(참) id는 amdin으로 하고 pw를 알아내야 한다. f12(개발자 도구)에서 해당 페이지의 세션을 가져왔다. 참과 거짓일 경우의 반환값이 다르므로 Blind SQL Injection이다. 파이썬으로 코드를 짜주어야 한다. import requests stop=0 pw_len=0 pwd='' url = "https://webhacking.kr/challenge/bonus-1/index.php?" c = {"cookie":"'PHPSESSID'='qmq2gk5jk67e1luq2g43cflf57'"} # 비밀번..

[Whois] 정보보안교육 - 웹해킹 2주차(1)

1. cors 교차 출처 리소스 공유(Cross-Origin Resource Sharing), 브라우저에서 다른 출처의 리소스를 공유하는 방법이다. 구체적으로 적으면, 추가 HTTP 헤더를 사용해서 한 출처에서 실행 중 웹이 다른 출처의 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다. CORS는 단순 요청 방법과 예비 요청을 먼저 보내는 방법 두 가지가 있다. 기본적으로 웹은 다른 출처의 리소스를 요청할 때 HTTP 프로토콜을 사용하는데 이 때 브라우저는 요청 헤더에 Origin 필드에 요청을 보내는 출처를 담아 전송한다. - Simple Request 서버가 요청에 대한 응답을 해주고, Oring에 접근을 허용하여 내려준다. 이후 브라우저는 자신이 보냈던 요청의 Origin과 서..

웹해킹/이론 2021.09.20