본문 바로가기

분류 전체보기

(156)
[Code Up] - Python 기초 100제, 6081번 풀이 - 티스토리 더보기 문제설명 16진수 A ~ F까지 하나의 수 가 입력되고 그 수의 구구단을 출력하는 프로그램을 만들어라 풀이 num = int(input(), 16) for i in range(1, 0x10): result = i * num print('%X'%num, '*%X'%i, '=%X'%result, sep='') 해설 16진수를 입력 받는다 1부터 입력 받은 16진수까지 반복하며 result에 각각 저장한 후 출력한다 다른 분 풀이 num = int(input(), 16) for i in range(1, 0x10): result = i * num print("%X*%X=%X" %(num, i, result)) 간단하네
[Code Up] - Python 기초 100제, 6080번 풀이 - 티스토리 더보기 문제 설명 각각 1 ~ n, 1 ~ m까지의 수를 가진 서로 다른 2개의 주사위가 있을 때 나올 수 있는 모든 경우의 수를 구하자 n, m은 각각 공백을 두고 입력을 받는다 풀이 n1, n2 = input().split() n1 = int(n1) n2 = int(n2) for n1 in range(1, n1+1): for n2 in range(1, n2+1): print(n1, n2) 해설 n1, n2를 공백을 두고 입력을 받는다 둘다 정수형으로 변환 후 이중 반복문을 통해 경우의 수를 출력한다 ** n1, n2 = map(input().split()) for n1 in range(1, n1+1): for n2 in range(1, n2+1): print(n1, n2) map함수를 이용하면 각 요..
[Code Up] - Python 기초 100제, 6079번 풀이 - 티스토리 더보기 문제 해석 : 정수를 한 개 입력 받은 후, 특정 값과 비교를 한다 그 값은 1부터 2, 3, 4 순서대로 더해지는 값이다 풀이 num = int(input()) i = 0 sum = 0 if (num >= 0 and num = num): print(i) break 해설 num변수에 입력된 값을 저장해준다. if문으로 1차적으로 0 ~ 1000인 수만 비교를 진행한다 i 변수를 0부터 1씩 증가시키며 더한 값을 sum에 저장한다 sum이 num 값 이상일 때 출력 후 무한루프를 탈출 시킨다
[Dreamhack] basic_exploitation_003 풀이 - 티스토리 이전 문제와 비슷하다 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main(int argc, char *argv[]) { char *heap_buf = (char *)malloc(0x80); char stack_buf[0x90] = {}; initialize(); read(0, he..
[Dreamhack] basic_exploitation_002 풀이 - 티스토리 32비트 환경에 NX만 걸려있는 상황이다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); read(0, buf, 0x80); printf(buf); exit(0); } 개인적으..
[Dreamhack] out_of_bound 풀이 - 티스토리 코드를 보면 idx로 command 배열의 인덱스에 접근하는데 인덱스 범위를 검사하는 코드가 없기 때문에 Out Of Bound가 발생한다 따라서 name에 적절한 문자열을 삽입하고 oob를 이용해서 읽어 flag를 따면 된다 두 변수의 위치 차이는 76바이트 이다 따라서 인덱스로 접근하면 command[19]을 읽을 시 name을 읽을 수 있다 처음에 접근은 name에 /bin/sh 문자열을 입력한 뒤 idx에 19를 입력해 command[19] 접근해서 /bin/sh을 읽으려 했다 그러나 쉘이 안 따여서 삽질 끝에 질문 창 찾아봤는데 system함수는 인자로 const char* 을 받는 함수이기 때문에 문자열의 주소 값이 위치해야 된다 근데 /bin/sh을 입력할 경우 메모리에 저장되는 /bin/s..
[드림핵] hook (hook overwrite) 풀이 - 티스토리 코드를 처음 보고 당황했는데 역시 계속 보니까 이해가 된다 이해하고 보니까 그다지 어려운 문제는 아니고 그냥 hook overwrite하는 문제같다 코드 분석 먼저 gdb 스택 내부를 본다 main stack frame 사실 이번 문제는 ret를 덮는게 목적이 아니므로 stack 내부는 딱히 중요하지는 않아 보인다 코드 내에서 system("/bin/sh")이 주어져 있으므로 이걸 활용하는 쪽으로 생각했다 .1. __free_hook 주소 릭 2. __free_hook주소가 가리키는 값을 코드 내 system("/bin/sh")로 덮으면 free함수 실행시 쉘이 따인다 __free_hook주소는 코드 내 stdout 주소를 출력하고 있는 부분을 통해 릭 가능하다 다음은 이 부분을 해석하는게 관건이다 내 ..
[드림핵] oneshot (원가젯) 풀이 - 티스토리 원샷~ 딱 봐도 원 가젯 이용해서 푸는 문제 같다 소스코드를 보면 stdout 주소를 출력하고 있으므로 이를 읽어서 libc주소 구한 후 원가젯 주소까지 릭 가능할 것 같다 원 가젯 찾기 0x45226부터 넣어 볼 예정 중간에 더미 발견 중간에 0을 넣어주는 이유는 check값이 덮여서 강제종료 되는 것을 막기 위함 이거 두개때메 둘중 뭐 써야되는지 몰라서 삽질좀 함.. 근데 결론은 아직 모름 ** %p로 출력되는 주소랑 메모리 내에서 바로 출력되는 주소랑 구분해서 잘 받기