제목 : C/S 아키텍처의 침투 테스트 기록 - 암호화, 암호 해독 및 테스트 요청

0x00 概述​

대상 사이트는 http://www.example.com입니다. 공식 웹 사이트는 API 사용 문서를 제공하지만 테스트 후 취약점은 발견되지 않았으며 디렉토리, 포트 스캔 등에 사용 가능한 포인트가 없습니다. 나중에 공식 웹 사이트가 클라이언트 다운로드를 제공 한 것으로 나타 났으므로 테스트를 수행했습니다.

0x01 信息收集​

먼저 고객의 패키지를 잡았습니다. 나는 피들러와 Burpsuite를 사용하여 잡을 수 없었습니다. 나는 그것이 HTTP 프로토콜이 아니라고 의심했다. Wireshark를 사용하여 실제로 HTTP 프로토콜을 사용하고 있는지 확인했지만 데이터 패킷은 재생하기가 쉽지 않았습니다. 마지막으로 WSEXPLORER를 사용하여 지정된 프로세스의 패킷을 캡처하고 통신 데이터를 성공적으로 캡처했습니다. 캡처 된 데이터는 다음과 같습니다. 녹색은 요청 패킷이고 빨간색은 응답 패킷이었습니다.
在这里插入图片描述

데이터 패킷은 두 부분으로 나뉩니다. 하나는 요청 줄과 요청 헤더입니다.
在这里插入图片描述

하나는 요청 본문입니다.
在这里插入图片描述

데이터 패킷을 재생하기 위해 함께 Burpsuite에 넣을 수 있습니다
在这里插入图片描述

0x03 测试过程​

요청 패킷이 암호화 된 다음 전송되었으며 반환 된 응답 패킷도 암호화되었음을 알 수 있습니다. 그러나 암호화 및 암호 해독은 항상 클라이언트에서 수행되므로 클라이언트를 분석하여 시작할 수 있습니다.
exeinfo pe를 사용하여 쉘을 확인하면 .NET 프레임 워크 C#이 개발 한 프로그램이 사용된다는 것을 알 수 있습니다.
在这里插入图片描述

.NET 프로그램에 리버스 엔지니어링 도구를 사용하여 DNSPY를 사용하여 클라이언트의 암호화 및 암호 해독을 분석 할 수 있습니다. 그것을 개방 한 후, 나는 클래스와 방법의 이름 지정이 모두 불규칙한 숫자 문자이며 코드가 난독 화 된 것을 발견했습니다.
在这里插入图片描述

난독 화 된 코드는 읽기 분석을 사용하지 않으며 DE4DOT를 사용하여 방지 방지를 시도하여 소스 코드를 난독 화하는 많은 난독 화 암호화 도구를 지원합니다.
de4dot-x64.exe origin.exe
방지 방지 프로그램 Origin-Cleaned.exe
在这里插入图片描述
을 얻을 수 있습니다
방지 방지 프로그램을 DNSPY로 드래그하여이를 볼 수있게되면 복원되었음을 알 수있어 가독성이 향상됩니다.
在这里插入图片描述

커뮤니케이션은 HTTP 프로토콜을 사용하기 때문에 httphelper라는 클래스가 있음이 밝혀졌습니다. 분석에 대한 후속 조치. 코드에는 게시물 기능이 표시되지 않으며, 이는 그림과 같이 데이터를 암호화하고 게시물 요청을 시작하는 방법으로 의심됩니다.
在这里插入图片描述

mm.Encrypt ()는 요청 된 매개 변수를 암호화하도록 호출되어 메소드와 함께 진행되며 주요 암호화 함수는 MM 클래스에서 Test05 기능이어야 함을 발견했습니다.
在这里插入图片描述

프로그램이 암호화 및 전송을 위해이 기능을 호출하는지 여부를 확인하기 위해 중단 점을 설정하십시오. 일반 텍스트 및 암호 텍스트에서 중단 점을 설정했습니다.
在这里插入图片描述

F5는 프로그램을 시작하고 계정 비밀번호 테스트를 입력하고 로그인합니다.
在这里插入图片描述

이 프로그램은 중단 점에서 중단되었고 일반 텍스트에는 Test123456 및 MD5에서 입력 한 계정으로 암호화 된 암호가 포함되어 있습니다.
在这里插入图片描述

암호화 된 컨텐츠를 해제하고 얻으려면 여기에서 암호화 기능이 호출되었음을 확인할 수 있습니다.
在这里插入图片描述

나중에 응답 패키지 암호 해독이 MM 클래스에서 Test06 함수를 호출하고 요청 패키지 암호화 기능 test05와 응답 패키지 암호 해독 함수 test06이 해당 함수를 DLL에서 호출한다는 것을 확인했습니다.
在这里插入图片描述

여기서 암호화 및 암호 해독은 두 세트의 방법을 호출하며 암호 해독 기능을 사용하여 요청 패킷의 암호화 된 데이터를 해독 할 수 없습니다. 테스트를 용이하게하고 신속하게 암호화하고 해독하기 위해 암호화 및 해독 기능이 공제되고 DLL의 함수는 독립 프로그램으로 컴파일되도록 요청되므로 알고리즘을 분석 할 필요가 없습니다.
여기에서 SharpDevelop Compiled를 사용하고 있으며 Visual Studio를 사용하면 항상 오류가 발생합니다 .
public static String decryptresponse (String Cipher) {
바이트 [] bytes=encoding.utf8.getBytes (cipher);
바이트 [] 배열=새로운 바이트 [bytes.length + 128];
int count=program.test06 (ref bytes [0], ref array [0]);
문자열 text=encoding.utf8.getString (Array, 0, count);
리턴 텍스트;
}
public static string EncryPtrequest (String Plain) {
바이트 [] bytes=encoding.utf8.getBytes (일반);
int num=bytes.length * 2 + 128;
if (num32) {
num=64;
}
바이트 [] 배열=새로운 바이트 [num];
int num2=0;
num2=test05 (ref bytes [0], ref 어레이 [0]);
문자열 result=encoding.utf8.getString (Array, 0, Num2);
반환 결과;
}
암호화
在这里插入图片描述

암호 해독
在这里插入图片描述

그런 다음 Python의 Flask 프레임 워크를 사용하여 Burpsuite에서 재생 테스트를 용이하게하기 위해 로컬로 프록시 전달 프로그램을 작성하십시오.
프로세스는 다음과 같습니다.
일반 텍스트 데이터 패킷을 프록시 에이전트로 로컬로 보냅니다. 요청 패킷을받습니다. 발신자는 요청 패킷을 암호화합니다. 암호화 된 데이터 패킷은 서버 호출자에게 전달됩니다. 서버에서 반환 한 컨텐츠는 해독되어 플라스크 가져 오기 요청, 플라스크에서 플라스크 텍스트 데이터로 돌아갑니다.
urllib.parse import Quote에서
가져 오기 요청
OS 가져 오기
헤더={
'사용자 에이전트 ':'모질라 ',
'Content-Type':'응용 프로그램/x-www-form-urlencoded ',
'허용 인코딩 ':'gzip, deflate ',
}
app=flask ( 'example')
@app.route ( '/example', methods=[ 'post']))
DEF 프록시 () :
form=request.form
request_plain=''
Form:의 키
request_plain +='{}={}'. 형식 (키, 양식 [key])
response_plain=test (request_plain)
return response_plain
DEF 암호화 (파일 이름) :
Encrypt_cmd='crypto.exe -encrypt {}'. 형식 (filename) #암호화 할 내용을 파일에서 읽으십시오.
결과=os.popen (encrypt_cmd) # exe를 실행합니다
request_cipher=QUOTE (result.Read ()) #URL 인코딩 후 + 부사를 %2B 서버로 변환하여 인식하는 컨텐츠 암호화 컨텐츠
return request_cipher
def decrypt (filename) :
decrypt_cmd='crypto.exe -decrypt {}'. 형식 (filename) # 컨텐츠를 해독 할 컨텐츠 파일에서 읽으십시오.
결과=os.popen (decrypt_cmd) # exe를 실행합니다
response_plain=result.read () # 해독 된 내용을 읽습니다
return response_plain
DEF 테스트 (request_plain) :
url='http://example.com/api/'
plain_txt='plain.txt'
f1:으로 Open (plain_txt, 'w')
f1.writelines (request_plain) # plaintext를 plain.txt에 저장합니다
request_cipher=encrypt (plain_txt) # 암호화 일반 텍스트
응답=requests.post (url=url, data=request_cipher, 헤더=헤더) #send request
cipher_txt='cipher.txt'
f2:으로 Open (cipher_txt, 'w')을 사용합니다
f2.writelines (response.text) cipher.txt의 storage ciphertext
response_plain=decrypt (cipher_txt) # decrypt ciphertext
return response_plain
__name__=='__ 메인 __': 인 경우
app.run (host='0.0.0.0', port=9999, debug=true)
여기서 요청한 인터페이스는 매번 동일하며 유일한 변경 사항은 요청 본문의 매개 변수입니다. CodeService에는 모든 인터페이스의 모든 일반 텍스트가 있으며 모두 추출됩니다.
在这里插入图片描述

BurpSuite ~
在这里插入图片描述
에서 정상적으로 테스트 할 수 있습니다
마지막으로, SQL 주입은 인터페이스에서 성공적으로 발견되었습니다.
在这里插入图片描述

0x04 总结​

1. WSEXPLORER를 통해 지정된 프로세스의 패키지를 잡고 HTTP 프로토콜의 데이터 패킷이 암호화되었음을 알게됩니다. 방지 방지, 많은 난독 방지 암호화 도구 DE4DOT-X64.EXE ORIGIN.EXE5에 의해 난독 화 된 소스 코드를 지원합니다. DNSPY를 사용하여 프로그램을 다시 디 컴파일 한 다음 프로그램 암호화의 기능 메소드를보고 F5를 눌러 실행하십시오. 프로그램은 중단 점에서 중단되었으며 일반 텍스트에는 내가 입력 한 계정 테스트 123456 및 MD5로 암호화 된 암호가 포함되어 있습니다. 6. 프로그램의 암호화 및 암호 해독 기능 세그먼트를 찾아 기본 코드를 잘라내어 Python 7에 작성하십시오. 그런 다음 Python의 Flask Framework를 사용하여 Burpsuite의 재생 테스트를 용이하게하기 위해 프록시 전달 프로그램을 로컬로 작성하십시오. 프로세스는 다음과 같습니다. 일반 텍스트 데이터 패킷을 프록시 에이전트로 로컬로 보내십시오. 요청 패킷이 수신되었습니다. 발신자는 요청 패킷을 암호화합니다. 암호화 된 데이터 패킷은 서버 호출자에게 전달됩니다. 서버에서 반환 한 컨텐츠는 해독되어 일반 텍스트 데이터로 로컬로 반환됩니다.
원래 연결 : https://blog.csdn.net/qq_32727277/article/details/102783316
 
뒤로
상단