TCP패킷은 HTTP 패킷과 다른 네트워크 계층에서 동작하기 때문에 스니핑의 범위가 다르다.
HTTP는 주로 웹 서버와 단말 사이에서 이뤄지는 패킷이고 TCP는 네트워크 트래픽의 전체 TCP 스택을 대상으로 한다.
이번 글에서는 실습으로 TCP 패킷을 스니핑 해볼 것이다.
실습
우선 TCP 서버부터 구현해야 한다.
서버는 Node.js로 구축할 것이다.
const net = require('net');
let clients = [];
let tServer = net.createServer(function (client) {
clients.push(
{
name: client.remotePort,
client: client
}
);
console.log("connection clients list : " + JSON.stringify(clients));
client.setEncoding('utf8');
client.on('data', function (data) {
console.log('클라이언트로부터 받은 remote port : ' + client.remotePort + '/데이터 : ' + data.toString());
client.write('Hello Client!');
});
client.on('end', function () {
console.log("end connection : " + client.remotePort);
console.log(client.remoteAddress + ' Client disconnected');
let idx = clients.indexOf(clients.name);
clients.splice(idx, 1);
console.log(clients);
});
client.on('error', function (err) {
console.log('Socket Error: ', JSON.stringify(err));
});
client.on('timeout', function () {
console.log('Socket Timed out');
});
});
tServer.listen(3912, function () {
console.log('TCP Server listening on : ' + JSON.stringify(tServer.address()));
tServer.on('close', function () {
console.log('Server Terminated');
});
tServer.on('error', function (err) {
console.log('Server Error : ', JSON.stringify(err));
});
});
이렇게 만들고 서버를 실행시켜보자
이러면 TCP 서버는 실행 중이고 이제 클라이언트가 접속만 하면 된다.
단말은 Nox에서 작동시켰고 Simple TCP Socket Tester 앱을 사용해서 실습했다.
앱을 실행해 보자.
위의 사진처럼 현재 PC의 IP주소를 입력하고 port번호는 TCP서버의 포트번호와 동일한 3912를 입력해 주면 된다.
이제 연결시켜 보자.
앱에서 CONNECT버튼을 눌러보자
그랬더니 이렇게 연결된 클라이언트가 출력된다. 이러면 성곡적으로 연결된 것이다.
이제 서버에게 메시지를 보내보자. 성공적으로 연결이 됐다면 서버 측에서도 메시지가 올 것이다.
메시지를 입력하고 send버튼을 눌렀더니 서버 측에서 Hello Client라는 메시지가 도착했다.
터미널에서도 다시 확인해 보자.
맨 마지막 줄에 클라이언트가 보낸 메시지를 서버에서도 이렇게 확인할 수 있다.
이제 TCP서버가 클라이언트와 성공적으로 통신한다는 것을 알았기 때문에 본격적으로 와이어샤크를 통해서 TCP 패킷을 분석해 볼 것이다.
와이어 샤크를 실행시키고 메시지를 여러 번 다시 보내보자
pc의 IP 주소로 필터링을 한 뒤에 확인을 해보니 55785 포트(클라이언트)가 3912 포트(서버)로 전송하는 것을 확인할 수 있다!
패킷 하나를 선택해서 어떤 내용이 전송되는지 확인해 보자
원래는 한글로 물어봤는데 한글을 인식하지 못하는 거 같아서 Hi SERVER로 바꿔서 다시 보냈더니 이렇게 평문으로 TCP서버에서 데이터가 전송 중인 것을 확인했다.
지금은 평문으로 간단한 인사말을 전송했지만 만약에 중요한 정보가 담긴 내용을 이렇게 전송한다면 공격자에게 유출될 수 있으므로 취약점이라고 판단한다.
'안드로이드 모의해킹 > 동적 분석' 카테고리의 다른 글
프리다를 이용한 후킹2 (1) | 2024.09.13 |
---|---|
프리다를 이용한 후킹 (2) | 2024.09.13 |
통신 취약점 진단 (3) | 2024.09.11 |
앱 코드 패치 (0) | 2024.09.10 |