목록분류 전체보기 (289)
촉촉한초코칩
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/HExWo/btrMC8R5pmH/XHSMs8XvMNY44xYBhTJa60/img.png)
.text는 프로세스 메모리 영역 중 하나로 프로그램 명령 코드 자체를 저장한다. OllyDBG로 파일을 연다. 우클릭 > Search for > All Intermodular calls에 들어가면 해당 프로그램에서 사용한 API 함수들을 볼 수 있다. 여기서 스트링 비교함수로 보이는 vbaStrCmp를 답으로 제출했다. 그리고 함수를 더블클릭하면 해당 함수로 들어갈 수 있다. F8을 눌러서 실행시킨다. 그러면 경고창 messagebox를 볼 수 있다. 확인을 누르고 다시 F8을 눌러서 실행시킨다. 아무거나 입력한다음 Registrieren을 누르면 Stack에서 내가 입력한 문자열을 볼 수 있다. vbaStrCmp에서 비밀번호와 내가 입력한 문자열을 비교하는 것을 확인할 수 있다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/DBOgh/btrMkHgLZg5/lus2XLdEcR3fwAlH2mCu00/img.png)
파일을 다운받고 PEiD에 넣어봤는데 아무것도 나오지 않았다. 그래서 upx를 이용해서 언패킹해보았고 packed로 나온게 없어서 패킹이 된 파일이라고 생각했다. OllyDbg에서도 열리지 않아서 HxD로 파일을 열어보았다. MZ로 되어 있는 것을 보아 PE구조로 된 파일임을 알 수 있었다. 첫번째 문제의 디버거에서 보던 MessageBoxA, SendMessageA 등 프로그램에서 쓰이는 DLL부분과 API 함수가 선언된 것을 볼 수 있다. 그리고 내려가다 보면 이 문구를 볼 수 있는데, 만약 비밀번호가 틀리면 try again, 맞다면 비밀번호를 출력하는 부분인 것 같았다. 그래서 이 부분을 복사해서 답으로 제출했다.
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/qsKkU/btrMcSJbkel/y9Qowx0F5BqrUyR0gZ79g0/img.png)
먼저 PEiD를 사용해서 해당 파일의 패킹 여부를 확인한다. (EP Section) 그리고 Ollydbg를 사용해서 코드를 분석한다. HD를 CD-Rom로 인식시키도록 해야 한다. 해당 코드에서는 EAX와 ESI를 비교해서 만약 값이 같다면 그대로 진행하고 같지 않다면 JE의 주소로 점프시킨다. 1) EAX와 ESI의 값이 같아야 하므로 ESI를 EAX로 수정해준다. 2) JE가 아닌 JNE 레지스터를 사용해서 두개의 값이 같지 않더라도 0040103D 주소로 점프할 수 있도록 한다. 그리고 문제에서 GetDriveTypeA의 리턴값에 대해 물었다. CD-Rom으로 인식시키도록 했고 아래 링크에서 찾아보면 DRIVE_CDROM의 리턴값은 5라는 것을 알 수 있다. https://learn.microsof..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/GFfju/btrLNqlCmEQ/BKDdKHlcKNvfsWBylerSaK/img.png)
Command Injection시스템 해킹 관점의 명령 주입 취약점;, &&, ||, 여러 명령어를 실행할 수 있다. 사용자의 입력을 필터링하지 않을 때, 사용자가 의도하는 명령을 추가적으로 삽입하여 호스트 운영 체제(OS)에서 임의의 명령을 실행할 수 있다. 시스템에서 사용자의 입력이 system() 함수의 인자로 사용되거나 웹에서는 사용자 제공 데이터(서버에 전달하는 양식, 쿠키, HTTP 헤더 등)가 시스템 쉘에 전달될 때 입력을 검사하지 않으면 문제가 된다. system() 함수 원형 : int system(const char* command) → 인자인 command를 시스템에 명령어로 바로 전달한다. command_injection.c 파일을 실행하면 첫 번째 인자값에 해당하는 cat 명령어로..
문제 준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다. 영수증에 적힌, 구매한 각 물건의 가격과 개수 구매한 물건들의 총 금액 을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자. 입력 첫째 줄에는 영수증에 적힌 총 금액 X$X$가 주어진다. 둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N$N$이 주어진다. 이후 N$N$개의 줄에는 각 물건의 가격 a$a$와 개수 b$b$가 공백을 사이에 두고 주어진다. 출력 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하..