기본 환경 : Windows 10가상 환경 : VMware Workstation Pro / Windows 7 VM에서 Windows7 환경을 사용하려고 설치 및 실행해보았는데, 인터넷 연결이 되어있지 않은 상태였다.그래서 검색검색 1. 제어판 > 네트워크 공유 센터 2. 네트워크 및 공유 센터 좌측 어댑터 설정 변경3. VMware Network Adapter VMnet 1 & 8 을 우클릭 > 네트워킹 탭의 인터넷 프로토콜 버전 4(TCP/IPv4) 속성 1) VMware Network Adapter VMnet 1IP주소 : 192.168.137.1서브넷 마스크 : 255.255.255.0 1) VMware Network Adapter VMnet 8IP주소 : 192.168.161(아무값).1서브넷 마..
passcode 문제를 풀다가 잘 안돼서 다른 문제로 넘어왔다ㅎㅎ알고보니 passcode 문제는 무려 10point 짜리 문제였다! 힝입니다ㅠㅠ 순서대로 푸는 건줄 알았는데,아직 시스템 초보이므로 point가 낮은 것부터 차근차근 풀기로 했다. random.c 의 코드는 다음과 같다.#include int main(){unsigned int random;random = rand();// random value! unsigned int key=0;scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){printf("Good!\n");system("/bin/cat flag");return 0;} printf("Wrong, maybe you should try 2^32..
Level19 Password is swimming in pink. 힌트는 다음과 같다. main(){ char buf[20]; gets(buf); printf("%s\n",buf);} 매우 간단해 보이는 코드인데 gets 함수를 쓴다. gets를 사용하면 위와 같이 buf는 20이지만 20이 넘어도 값을 받을 수 있고, 그대로 출력해준다.gets 함수는 bof에 매우 취약한 함수이며, scanf와 같이 입력받는 문자열의 크기와 주어진 변수의 크기를 고려하지 않는다.그렇다면, buf에 쭉 입력을 해줘서 ret을 건드리거나 하면 되지 않을까 라는 생각이 들었다. gdb로 본 어셈 코드도 엄청 짧다!! Dump of assembler code for function main:0x08048440 :push e..
level18 password is why did you do it 힌트는 다음과 같다. #include #include #include #include void shellout(void);int main(){ char string[100]; int check; int x = 0; int count = 0; fd_set fds; printf("Enter your command: "); fflush(stdout); while(1) { if(count >= 100) printf("what are you trying to do?\n"); if(check == 0xdeadbeef) shellout(); else { FD_ZERO(&fds); FD_SET(STDIN_FILENO,&fds); if(select(FD..
pw is king poetic 이번엔 .c 파일은 없고 다른 문제들과 동일하게 attackme 파일만 있다. 힌트는 다음과 같다. #include void printit() { printf("Hello there!\n");} main(){ int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); setreuid(3098,3098); call();} main 안에 setreuid가 있는걸 보니 왠지 환경변수를 사용해야할 것 같다.일단export SHELLCODE=$(python -c 'print "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68..
16번은 attackme.c 파일도 존재한다. 힌트는 다음과 같다. #include void shell() { setreuid(3097,3097); system("/bin/sh");} void printit() { printf("Hello there!\n");} main(){ int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); call();} 코드만 볼땐 shell() 함수가 실행돼야 하는데, shell() 함수가 사용된 곳은 없고왠지 *call 부분을 수정해 shell 함수의 주소를 실행하도록 하면 될 것 같다. gdb로도 보자.Dump of assembler code for function main:0x08048518 :push ..
힌트는 다음과 같다 #include main(){ int crap; int *check; char buf[20]; fgets(buf,45,stdin); if (*check==0xdeadbeef) { setreuid(3096,3096); system("/bin/sh"); }} level15는 level14와 전체적인 코드는 비슷하지만포인터 변수 check와 0xdeadbeef 를 비교하는게 다르다.이번 문제는 포인터에 대한 이해가 요구되는 것 같다. A가 39개까진 들어가고 40개부터는 Segmentation fault가 뜬다. (gdb) disas mainDump of assembler code for function main:0x08048490 :push ebp0x08048491 :mov ebp,esp..
level14도 bof 문제이다.힌트는 다음과 같다. 레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다.버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이최고의 효과를 가져다줍니다. #include #include main(){ int crap; int check; char buf[20]; fgets(buf,45,stdin); if (check==0xdeadbeef) { setreuid(3095,3095); system("/bin/sh"); }} 대충 코드를 보면 buf의 공간은 20이지만 fgets로 45만큼 받아서 buf에 저장한다.그리고 check가 0xdeadbeef 와 일치하면 level15의 쉘을 따낼 수 있다.crap은 어디서 쓰이는 걸까 궁그미 (gdb) disas ma..
flag.txt 파일을 찾아야 하는데알려준 것은 NodeJS , poems folder, path를 이용한다는 것. ?path 로 들어가면 poems 디렉토리에 여러 txt 파일들이 있지만 flag.txt는 없다?path=(파일명) 으로 들어가면 그 파일의 내용이 보인다. ?path=.. 으로 상위 디렉토리에 접근하려고 했으나 WHOA THATS BANNED!!!! 가 뜨면서 접근이 안된다.그래서 . 을 아스키 코드로 변환(%2e)하여 입력했는데 그래도 접근이 안된다. %2e 를 한번 더 아스키 코드로 변환하면 % 가 %25로 바뀌기 때문에%252e가 되는데 이걸 이용해 flag.txt 파일에 접근할 수 있었다.
- Total
- Today
- Yesterday
- wargame
- Los
- lob
- 웹해킹
- Lord of SQL Injection
- wargame.kr
- cobolt
- 워게임
- c언어
- C
- pwnable.kr
- ubuntu
- BOF
- MySQL
- ftz
- webhacking.kr
- WebHacking
- 1번
- my-pass
- 자바
- 파이썬
- java
- Python
- 설치
- attackme
- pwnable
- 우분투
- 명령어
- lord of sqlinjection
- 0xdeadbeef
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |