애드센스4



메일로 다른 시스템 컨트롤 하기 시스템TIP

Ruby 로 만든 간단한 예제 프로그램

#!/usr/bin/ruby

require 'net/pop'
require 'net/smtp'

pop = Net::POP3.new('pop3 메일 서버 주소')  # ex: pop.example.com
pop.start('아이디', '패스워드')             # (1)
if pop.mails.empty?
  puts 'No mail.'
else
  i = 0
  pop.each_mail do |m| 
    subject=m.header.split("\r\n").grep(/^Subject: /)[0].to_s
    cmd=subject.split(/: \[Greg\] /i)[1]
    result=IO.popen(cmd).read
       
    smtp=Net::SMTP.start('smtp 메일 서버 주소', 25, 'localhost',
                    '아이디', '패스워드', :login)  # (2)
      smtp.open_message_stream('발신자 메일주소', ['수신자 메일 주소']) do |f|
        f.puts 'From: 발신자 메일주소'
        f.puts 'To: 수신자 메일 주소'
        f.puts 'Subject: [Greg] Result ' + DateTime.now.to_s
        f.puts
        f.puts result
    end
    smtp.finish
    m.delete
    i += 1
    puts "#{i} mails sended."
  end
  puts "#{pop.mails.size} mails popped."
end
pop.finish


환경 설정 :
1. 원격으로 컨트롤할 시스템을 위해 무료 pop3, smtp 서비스 제공 업체(예: 야후 메일)에 가입한다.
2. 해당 업체의 pop3, smtp 서버 주소를 스크립트 내에 삽입한다.
3. 가입한 아이디, 패스워드를 스크립트 내에 삽입한다.
4. 수신자 메일 주소에는 자신이 사용하는 웹메일(예: G메일) 주소를 적는다.
5. 발신자 메일 주소에는 시스템의 메일(예: 야후 메일) 주소를 적는다.
6. 유닉스의 cron 혹은 윈도우의 예약작업 기능을 이용해 5~10분 단위로 위의 스크립트를 돌린다.

사용법 :
1. 자신이 사용하는 웹메일(예: G메일)에서 메일 제목에 '[Greg] ls -la' 혹은 '[Greg] dir c:\' 라고 적고 메일을 발송한다.
2. 잠시 후 웹 메일에서 확인해 보면 명령 실행 결과가 '[Greg] Result 날짜 및 시간' 이라는 제목으로 도착해 있다.
3. 해당 메일을 읽어보면 내용에 명령 실행 결과가 들어 있다.

이제 Greg 이라는 충실한 노비가 여러분의 메일함에 살게 됩니다.

# 주의 사항 : 위의 스크립트는 보안 상 매우 위험하므로, 시스템용 메일 주소를 절대 외부에 노출되지 않도록 주의할 것. 간혹 알파벳, 숫자를 조합하여 무작위로 메일 주소를 생성한 후 스팸을 보내는 시스템이 있으므로 주의하세요. [Greg] 이라는 노비 이름을 다른 랜덤한 값으로 바꾸는 것도 방법이겠지요. 예외 처리가 전혀 안되어 있으므로, 자체적으로 예외처리 기능을 추가할 필요가 있습니다.

우리처럼 외부에 출장 가서 장기 체류하면서, 가정에 외부에서 접근 불가능한 다수의 시스템을 갖고 있는 사람들 입장에서는 어느 정도 유용할 듯...

소스 파일 다운로드 : greg.rb

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://swbae.egloos.com/tb/1745197 [도움말]

덧글

  • xeraph 2008/04/23 00:25 # 답글

    ㅋㅋㅋ 봇넷에서 IRC 대용으로 쓸 수도 있겠군요 (...먼 산)
  • ZIZI 2008/04/23 10:04 # 답글

    오호...다양한 뭔가를...@@
  • 윤뚜둥 2008/04/23 12:17 # 삭제 답글

    보통 메일서버를 구축하면 커맨드가 입력되지 않도록 하는데, 그런 최소한의 조치를 하지 않은 곳이겠네요
  • 헐랭이 2008/04/23 12:18 # 답글

    윤뚜둥 // 흠... Use the Source, Luke~
  • 김진 2008/04/28 05:10 # 삭제 답글

    메일의수신시간을 과거로 돌려서 메일을 발송 되는경우도 잇던데 ..텔렛으로 메일서버의 25번 포트로 접속하여

    원본파일을 . eml 파일로 받은후 아래와같이 하면 메일해더 살수신측서버의 시간도 변조가 가능하다고하던데

    기술적로 가능한가요.







    1. 일단은 보낼 메일을 작성합니다.

    가능하면 Outlook 에서 작성해서 '다른 이름으로 저장하기' 해서 .eml 파일로 만들어줍니다.

    다른 웹 메일을 사용하신다면, 원문 저장 기능 (있는 경우가 많습니다) 을 이용해서

    eml 파일 형식으로 만들어 저장해야 합니다.



    2. eml 파일을 메모장 등으로 열어서, Date: 헤더를 고쳐줍니다.

    시간 표시 형식은 반드시 RFC 규격에 맞아야 하므로 요일 명이 틀리지 않게 조심하세요.

    고친 후에 파일을 저장합니다. 직접 열어보시기 전에는 설명만 보고 쫓아오기 어렵습니다.



    3. 이렇게 만든 파일을 Outlook 으로 직접 보낼 수 있다면 보내세요. 그걸로 끝입니다. 만약

    형편이 안된다면...



    4. 이제부터 삽질을 시작합니다. 받는 사람의 주소를 보고 메일 서버를 알아냅니다.

    cmd.exe 실행해서, nslookup -type=mx 도메인명 (받는 사람 주소의 @ 뒷 부분)

    하면 어떤 서버가 해당 도메인의 메일 서버인지 알 수 있습니다.

    메일 서버를 알아낸 후, 다시 nslookup 서버주소

    하면 정확한 서버의 IP 를 알아낼 수 있습니다.



    5. 서버에 telnet 을 사용하여 접속합니다. telnet 명령어 보다는 zterm 등

    좀더 잘 돌아가는 터미널 에뮬레이터를 써주면 더 좋습니다.

    보통 telnet 접속의 경우 23번 포트이지만

    메일 서비스와 직접 대화하기 위해 25번 포트로 접속합니다.

    220 어쩌구 저쩌구... 하고 나오면 성공.

    telnet 을 쓸 경우 telnet 서버IP 25 하고

    명령어 인자를 주는 걸 잊지 마세요



    6. 서버에 SMTP 명령어를 내려줍니다.



    HELO 보낼사람도메인

    ------------------------------(서버가 뭐라고 함)

    MAIL FROM: <보내는분의메일주소>

    ------------------------------(또 서버가 뭐라고 함)

    RCPT TO: <받는 분의 메일 주소>

    ------------------------------(계속 서버가 뭐라고 함)

    DATA

    아까 저장한 eml 파일을 copy & paste 합니다.

    .

    ------------------------------(계속 서버가 뭐라고 함)

    QUIT

    ------------------------------(계속 서버가 뭐라고 함)



    6. 뭐 이걸로 삽질은 끝났습니다. 이제 변조된 메일 헤더 때문에 서버가 메일을 거부하든가

    그냥 배달 시켜주든가 둘 중 하나입니다. 보통 Date 헤더는 서버 입장에서 문법이 틀리지

    않는다면 수정해버리지는 않는 필드입니다만
  • 헐랭이 2008/04/28 19:49 # 답글

    메일 서버따라 조금씩 다르니까 실험을 해봐야 정확하겠지만, 일부 제품에선 가능할 듯 합니다. 김진님께서 실험해보신 다음 결과를 알려주시면 더욱 좋겠지요. 기둘리고 있겠습니다.
  • 김진 2008/04/30 06:46 # 삭제 답글

    쓰크립터를 돌리는 프로그램만 조작하면 자기 메일계정 메일박스에 프로그램을 상주시켜서 메일해더의 날짜나 내용을 조작이가능하지않나요 / 어차피 메일은 텍스트이니까 해더 조작도가능하넋 같은데
  • 헐랭이 2008/04/30 07:47 # 답글

    저는 기본적으로 실험으로 검증되지 않은 정보를 믿지 않습니다. 이론적으로 메일 헤더는 다 조작이 가능한 것 입니다. 다만 메일 발송은 발신자쪽 MUA -> 발신자 서버 MTA -> 수신자 서버 MTA -> 수신자쪽 MUA 의 복잡한 단계를 거칩니다. 이 과정에서 MUA나 MTA 의 설정, MUA나 MTA 의 구현 방식, MUA 에서 사용자 화면에 뿌려주는 방식에 따라 조작된 정보가 어떻게 처리되느냐, 혹은 어떻게 보이느냐가 달라집니다. 때문에 실험을 해보시라고 권해드린 것입니다.

    다만 MTA 입장에선 클라이언트의 발송 날짜가 과거(미래일 경우는 또 조금 다른 문제입니다)인 경우, 대체로 받아들일 수 밖에 없습니다. 서버/네트워크 관리자 입장을 고려해보면 프로그래머 입장에선 그렇게 구현하는게 합리적입니다. 그러나 현실이 어떤지는 실험해봐야 알 수 있는 문제입니다.

    실험해보시고 실험데이터를 정리해서 올려주세요.
  • 헐랭이 2008/04/30 08:00 # 답글

    참고로, 이 내용은 사실로 밝혀진다 하더라도, 취약점은 아닙니다. 사양일 가능성이 높습니다. 따라서 그다지 연구할만한 가치는 없겠지요.

    현실에선 실용적일 수 있겠지만...
  • 김진 2008/05/15 10:16 # 삭제 답글

    웹 사이트 내용처럼 웹에서 수신된 메일 내용을 스크립트 방식이나 다른 해킹방식으로
    바로 수정 변조할수 있는 방법이 있지않나요
댓글 입력 영역


애드센스7