그레이햇 C # | 에이콘 출판사 
 그레이햇 C # [ C # 을 활용 한 해커 의 보안 도구 제작 과 자동화 가이드 ] 
 원 서명 Gray Hat C #: A Hacker ' s Guide to Creating and Automating Security Tools ( ISBN 9781593277598 ) 
 지은 이 브랜든 페리 ( Brandon Perry ) 
 옮긴 이구형 준 
 2018 년 02 월 12 일 펴냄 
 ■ HTTP 와 XML 라이브러리 를 이용 해 SQL 과 XSS 인젝션 을 스캔 하 는 퓨저 작성 
 ■ 메타 스 플로 잇 에서 플랫 폼 과 아키텍처 에 독립 적 인 페이로드 를 생성 하 는 셸 코드 작성 
 ■ 네 서 스 , OpenVAS , sqlmap 을 자동 화 해 취약점 을 스캔 하고 SQL 인젝션 익스 플로 잇 수행 
 ■ OS X 와 리눅스 용 . NET 디 컴파일러 작성 
 ■ 시스템 정보 를 덤프 하 는 오프라인 레지스트리 하이브 파싱 도구 작성 
 ■ MSGPACK RPC 를 이용 해 아 라 크 니 와 메타 스 플로 잇 보안 도구 자동화 
 1 장 , ‘ C # 속성 과정 ’ 에서 는 간단 한 예제 를 사용 해 C # 객체 지향 프로그래밍 의 기초 와 다양 한 C # 기능 을 다룬다 . Hello World 프로그램 으로 시작 해 객체 지향 프로그래밍 의 이해 를 돕 기 위한 소규모 클래스 를 작성 한다 . 그 후 익명 함수 와 P / Invoke 같 은 고급 C # 기능 을 다룬다 . 
 2 장 , ‘ 퍼징 과 XSS 과 SQL 인젝션 공격 ’ 에서 는 HTTP 라이브러리 를 사용 해 웹 서버 와 통신 하 고 다양 한 데이터 유형 으로 XSS 과 SQL 인젝션 을 찾아내 는 작 은 HTTP 요청 퓨저 를 작성 한다 . 
 3 장 , ‘ SOAP 엔드 포인트 퍼징 ’ 에서 는 HTTP WSDL 을 자동 으로 생성 해 잠재 적 인 SQL 인젝션 공격 가능 성 을 찾 기 위해 SOAP WSDL 을 검색 하 고 파싱 하 는 또 하나 의 작 은 퓨저 를 작성 해본다 . 이 는 이전 장 의 퓨저 개념 을 이해 한 다음 단계 로 볼 수 있 다 . 표준 라이브러리 에서 제공 하 는 XML 라이브러리 도 살펴본다 . 
 4 장 , ‘ 재 접속 , 바인딩 과 메타 스 플로 잇 페이로드 ’ 에서 는 HTTP 에 중점 을 두 고 페이로드 작성 에 관해 설명 한다 . 먼저 간단 한 페이로드 2 개 를 제작 하 는데 , 하나 는 TCP , 다른 하나 는 UDP 를 통해 생성 한다 . 그런 다음 , 메타 스 플로 잇 에서 x 86 / x 86 _ 64 셸 코드 를 생성 하 고 여러 플랫 폼 과 아키텍처 에서 사용 할 수 있 는 페이로드 를 생성 하 는 방법 을 학습 한다 . 
 5 장 , ‘ 네 서 스 자동 화 ’ 에서 는 취약점 스캐너 중 가장 뛰어난 네 서 스 ( Nessus ) 를 자동 화 하 기 위해 HTTP 를 다시 다룬다 . CIDR 범위 를 프로그램 화 하 고 작성 해 스캔 하고 보고 하 는 방법 에 관해 설명 한다 . 
 6 장 , ‘ Nexpose 자동 화 ’ 에서 는 Nexpose 취약점 스캐너 를 이용 한 도구 자동 화 에 초점 을 맞춘다 . Nexpose 는 HTTP 를 기반 의 API 를 사용 해 취약점 검사 와 보고서 작성 을 자동 화 한다 . Nexpose 의 제작자 인 Rapid 7 은 커뮤니티 제품 에 대한 1 년 무료 라이선스 를 제공 하 며 개인 용 으로 매우 유용 하 다 . 7 장 , ‘ OpenVAS 자동 화 ’ 에서 는 오픈 소스 인 OpenVAS 를 사용 해 취약점 스캐너 자동 화 에 초점 을 맞춘다 . OpenVAS 는 네 서 스와 Nexpose 와 는 근본 적 으로 다른 종류 의 API 를 사용 하 며 , 통신 프로토콜 에 TCP 소켓 과 XML 만 사용 한다 . 또한 무료 이 기 때문 에 취약점 을 검색 할 때 더 많 은 경험 을 쌓 을 수 있 다 . 
 8 장 , ‘ Cuckoo 샌드박스 자동화 ’ 에서 는 Cuckoo 샌드박스 를 사용 한 디지털 포렌식 ( digital forensic ) 을 다룬다 . 사용 하 기 쉬운 REST JSON API 를 사용 해 잠재 적 인 악 성 코드 를 제출 하 고 결과 보고 를 자동 화 한다 . 
 9 장 , ‘ sqlmap 자동 화 ’ 에서 는 sqlmap 을 자동 화 해 SQL 인젝션 을 최대한 활용 해 공격 한다 . 먼저 sqlmap 과 함께 제공 하 는 사용 하 기 쉬운 JSON API 로 하나 의 URL 을 제출 하 는 간단 한 도구 를 제작 한다 . sqlmap 에 익숙 해 지 면 3 장 에서 다룬 SOAPWSDL 퓨저 로 스크립트 를 통합 해 잠재 적 인 SQL 인젝션 취약점 을 자동 으로 공격 하 고 입증 할 수 있 다 . 
 10 장 , ‘ ClamAV 자동 화 ’ 에서 는 기존 비 관리 라이브러리 와 의 상호 작용 에 중점 을 둔다 . 널리 사용 되 는 오픈 소스 안티 바이러스 프로젝트 인 ClamAV 는 . NET 언어 로 작성 돼 있 지 않 지만 , 원격 라이브러리 를 사용 할 수 있 는 TCP 데몬 및 핵심 라이브러리 와 여전히 인터페이스 할 수 있 다 . 이 두 가지 시나리오 에서 ClamAV 를 자동 화 하 는 방법 을 다룬다 . 
 11 장 , ‘ 메타 스 플로 잇 자동 화 ’ 에서 는 다시 메타 스 플로 잇 으로 돌아가 코어 프레임워크 와 함께 제공 되 는 MSGPACK RPC 를 통해 프로그램 화 하 고 공격 해 셸 을 얻 은 호스트 를 보 고 하 는 방법 에 관해 학습 한다 . 
 12 장 , ‘ 아라 크 니 자동 화 ’ 에서 는 이중 라이선스 이 긴 하 지만 무료 이 자 오픈 소스 프로젝트 인 아라 크 니 ( Arachni ) 라는 블랙박스 웹 애플리케이션 스캐너 자동 화 에 초점 을 맞춘다 . 간단 한 REST HTTP API 와 프로젝트 와 함께 제공 하 며 , 좀 더 강력 한 MSGPACK RPC 를 통해 URL 을 스캔 한 결과 를 자동 으로 보 고 하 는 간단 한 도구 를 생성 한다 . 
 13 장 , ‘ 관리 어셈블리 의 디 컴파일 과 리버 싱 ’ 에서 는 리버스 엔지니어링 에 관해 설명 한다 . 윈도 우용 . NET 디 컴파일러 는 사용 하 기 쉽 지만 , 맥 이나 리눅스 용 은 쉽 지 않 으므로 직접 간단 한 디 컴파일러 를 작성 한다 . 
 14 장 , ‘ 오프라인 에서 레지스트리 하이브 읽 기 ’ 에서 는 사고 대응 으로 넘어가 윈도우 레지스트리 의 바이너리 구조 체 를 알아보 고 레지스트리 하이브 에 초점 을 맞춘다 . 
 C # 은 항상 . NET 언어 의 공통어 로 자리매김 해 왔 다 . 이 책 에서 볼 수 있 듯이 C # 은 진입 장벽 이 낮 고 대 규모 개발자 커뮤니티 가 있 으므로 쉽 게 시작 할 수 있 다 . 또한 . NET 은 관리 코드 이 자 풍부 한 타입 을 지원 하 는 언어 며 , 컴파일 한 어셈블리 를 C # 으로 쉽 게 디 컴파일 할 수 있 다 . 따라서 공격자 의 입장 에서 C # 으로 프로그램 을 작성 한다면 기능 을 새로 개발 할 필요 가 없 다 . 오히려 다양 한 . NET 악 성 코드 샘플 을 가져와 디 컴파일 하 고 , 소스 에 해당 하 는 코드 를 읽 고 , 필요 한 기능 을 “ 빌려올 ” 수 도 있 다 . 더 나아가 충분 한 리버 싱 을 통해 악성 코드 의 파괴 적 인 행위 를 피할 수 있 다고 가정 하 면 , . NET 리플렉 션 API ( . NET reflection API ) 를 사용 해 기존 . NET 악 성 코드 샘플 을 동적 으로 로드 하 고 실행 할 수 있 다 . 
 브랜든 페리 ( Brandon Perry ) 
 오픈 소스 . NET 을 구현 한 모노 가 출시 된 이후 지속 적 으로 C # 으로 프로그래밍 하 고 있 다 . 여 가 시간 에 는 메타 스 플로 잇 프레임워크 모듈 작성 , 바이너리 파일 파싱 이나 퍼징 등 을 즐긴다 . 『 Wicked Cool Shell Scripts , 2 nd Edition 』( No Starch Pres , 2016 ) 의 공동 저자 다 . 그 의 웹 사이트 ( https : / / volatileminds . net ) 에서 다른 소프트웨어 와 프로젝트 도 운영 하 고 있 다 . 
 IDE 선택 하 기 
 클래스 와 인터페이스 소개 
 인터페이스 생성 하 기 
 추상 클래스 의 서브 클 래스 화 와 인터페이스 의 구현 
 Main ( ) 함수 로 모두 합치 기 
 Main ( ) 함수 실행 하 기 
 함수 에 위임자 할당 하 기 
 Firefighter 클래스 업데이트 하 기 
 선택 가능 한 인자 생성 하 기 
 Main ( ) 함수 업데이트 하 기 
 업데이트 된 Main ( ) 함수 실행 하 기 
 네이티브 라이브러리 와 통합 하 기 
 가상 환경 설정 하 기 
 호스트 전 용 가상 네트워크 추가 하 기 
 가상 환경 생성 하 기 
 BadStore ISO 에서 가상 환경 으로 부팅 하 기 
 변형 ( Mutational ) 퓨저 로 퍼징 GET 요청 하 기 
 파라미터 변조 와 취약점 테스트 
 HTTP 요청 생성 하 기 
 퍼징 코드 테스트 
 POST 요청 으로 퍼징 하 기 
 POST 요청 퓨저 작성 하 기 
 퍼징 시작 하 기 
 퍼징 파라미터 
 퍼징 JSON 
 취약 한 기기 설정 하 기 71 
 취약 한 JSON 요청 잡아내 기 
 JSON 퓨저 생성 하 기 
 JSON Fuzzer 테스트 하 기 
 수동 으로 UNION 기반 공격 수행 하 기 
 프로그래밍 을 통해 UNION 기반 공격 수행 하 기 
 부울 - 블라인드 기반 ( Boolean - Blind ) SQL 취약점 익스 플로 잇 
 취약 한 엔드 포인트 설정 하 기 
 WSDL 파싱 하 기 
 WSDL 문서 의 클래스 생성 하 기 
 최초 파싱 함수 작성 하 기 
 SOAP 유형 과 파라미터 관련 클래스 작성 하 기 
 송신 한 데이터 를 정의 하 는 SoapMessage 클래스 생성 하 기 
 메시지 부분 클래스 구현 하 기 
 SoapPortType 클래스 로 포트 작업 정의 하 기 
 포트 작업 을 위한 클래스 구현 하 기 
 SOAP 바인딩 에 사용 할 프로토콜 정의 하 기 
 작업 자식 노드 목록 컴파일 하 기 
 SOAP 서비스 포트 찾 기 
 SQL 인젝션 취약점 이 있 는 SOAP 엔드 포인트 퍼징 자동 화 하 기 
 개별 SOAP 서비스 퍼징 
 HTTP POST SOAP 포트 퍼징 하 기 
 SOAP XML 포트 퍼징 하기 
 퓨저 실행 하 기 
 역접 속 페이로드 생성 하 기 
 네트워크 스트림 
 페이로드 실행 하 기 
 페이로드 바인딩 하 기 
 데이터 수신 , 명령어 실행 과 결과 반환 하 기 
 스트림 에서 명령어 실행 하 기 
 UDP 를 사용 한 네트워크 공격 
 공격 대상 에서 실행 하 는 코드 
 공격자 코드 
 C # 에서 x 86 과 x 86 - 64 용 메타 스 플로 잇 페이로드 실행 하 기 
 메타 스 플로 잇 설정 하 기 
 페이로드 생성 하 기 
 어셈블리 코드 로 네이티브 윈도우 페이로드 실행 하 기 
 네이티브 리눅스 페이로드 실행 하 기 
 REST 와 네 서 스 API 
 NessusSession 클래스 
 로그아웃 과 삭제 하 기 
 NessusSession 클래스 테스트 하 기 
 NessusManager 클래스 
 네 서 스로 스캔 작업 하 기 
 활성 화 와 테스트 하 기 
 Nexpose 용어 살펴보 기 
 NexposeSession 클래스 
 ExecuteCommand ( ) 함수 
 로그아웃 과 현재 세션 삭제 하 기 
 API 버전 찾 기 
 Nexpose API 유도 하 기 
 NexposeManager 클래스 
 취약점 스캔 작업 자동 화 
 Asset 을 통해 사이트 생성 하 기 
 스캔 작업 시작 하 기 
 PDF 로 리포트 생성 후 사이트 삭제 하 기 
 통합 실행 하 기 
 리포트 생성 후 사이트 삭제 하 기 
 자동 화 실행 하 기 
 OpenVAS 설치 하 기 
 OpenVASSession 클래스 
 OpenVAS 서버 로 인증 하 기 
 OpenVAS 명령어 를 실행 하 는 함수 생성 하 기 
 서버 메시지 읽 기 
 명령어 를 송수신 하 기 위한 TCP 스트림 설정 하 기 
 인증서 확인 과 가비지 컬렉션 
 OpenVAS 버전 가져오 기 
 OpenVASManager 클래스 
 스캔 작업 설정 을 가져와서 대상 생성 하 기 
 자동 화 마무리 하 기 
 Cuckoo 샌드박스 설치 하 기 
 Cuckoo 샌드박스 API 수동 으로 실행 하 기 
 Cuckoo 상태 확인 
 CuckooSession 클래스 생성 
 HTTP 요청 을 처리 하 는 ExecuteCommand ( ) 함수 작성 하 기 
 GetMultipartFormData ( ) 함수 로 멀티 파트 HTTP 데이터 생성 하 기 
 클 래스 를 이용 한 파일 데이터 처리 하 기 
 CuckooSession 과 지원 클래스 테스트 하 기 
 CuckooManager 클래스 작성 하 기 
 CreateTask ( ) 함수 작성 
 작업 세부 사항 과 보고서 작성 함수 
 Task 추상화 클래스 생성 하 기 
 서로 다른 클래스 유형 처리 와 생성 
 애플리케이션 테스트 하 기 
 sqlmap 실행 
 sqlmap REST API 
 curl 을 이용 해 sqlmap API 테스트 하 기 
 sqlmap 의 세션 생성 하 기 
 GET 요청 을 실행 하 는 함수 생성 하 기 
 POST 요청 실행 하 기 
 세션 클래스 테스트 하 기 
 SqlmapManager 클래스 
 sqlmap 옵션 목록 화 
 스캔 작업 을 수행 하 는 함수 작성 하 기 
 새로운 Main ( ) 함수 
 스캔 작업 보고 하 기 
 전체 sqlmap 스캔 작업 자동 화 하 기 
 sqlmap 을 SOAP 퓨저 와 통합 하 기 
 sqlmap 에 SOAP 퓨저 를 지원 하 는 GET 요청 추가 하 기 
 sqlmap POST 요청 지원 추가 하 기 
 새로운 함수 호출 하 기 
 ClamAV 설치 하 기 
 ClamAV 네이티브 라이브러리 vs . clamd 네트워크 데몬 
 ClamAV 의 네이티브 라이브러리 자동 화 하 기 
 지원 하 는 옵션 과 클래스 설정 하 기 
 ClamAV ’ s 네이티브 라이브러리 함수 접근 하 기 
 ClamAV 엔진 컴파일 하 기 
 파일 스캔 
 EICAR 파일 을 스캔 해 프로그램 테스트 하 기 
 clamd 자동 화 하 기 
 clamd 데몬 설치 하 기 
 clamd 데몬 시작 하 기 
 clamd 에서 세션 클래스 생성 하 기 
 clamd 관리자 클래스 생성 하 기 
 clamd 테스트 
 RPC 서버 실행 하 기 
 Metasploitable 설치 
 MSGPACK 라이브러리 가져오 기 
 MonoDevelop 용 NuGet 패키지 관리자 설치 
 MSGPACK 라이브러리 설치 하 기 
 MSGPACK 라이브러리 참조 하 기 
 MetasploitSession 클래스 작성 하 기 
 HTTP 요청 을 위한 함수 생성 과 MSGPACK 으로 활용 하 기 
 MSGPACK 에서 반환 데이터 변형 하 기 
 세션 클래스 테스트 
 MetasploitManager 클래스 작성 하 기 
 익스 플로 잇 실행 
 셸 에서 활용 하 기 
 셸 획득 하 기 
 아 라 크 니 설치 
 아라 크 니 REST API 
 ArachniHTTPSession 클래스 생성 
 ArachniHTTPManager 클래스 생성 
 Session 과 Manager 클래스 통합 하 기 
 아 라 크 니 RPC 
 수동 으로 RPC 실행 
 ArachniRPCSession 클래스 
 ExecuteCommand ( ) 를 지원 하 는 함수 
 ArachniRPCManager 클래스 
 관리 어셈블리 디 컴파일 하 기 
 디 컴파일러 테스트 
 monodis 를 이용 한 어셈블리 분석 
 레지스트리 하이브 구조 
 레지스트리 하이브 가져오 기 
 레지스트리 하이브 읽 기 
 레지스트리 하이브 파일 을 파싱 하 는 클래스 생성 하 기 
 노드 키 클래스 생성 하 기 
 키 값 을 저장 하 는 클래스 만들 기 
 라이브러리 테스트 
 부트 키 덤프 하 기 
 GetBootKey ( ) 함수 
 GetValueKey ( ) 함수 
 GetNodeKey ( ) 함수 
 StringToByteArray ( ) 함수 
 부트 키 가져오 기 
 부트 키 검증 하 기