#1 ilovepwn

Out-of-Bound 취약점 문제이다. index값을 입력받을때 범위내인지 검증을 하는 과정이 없기 때문이다. 

fakekey의 배열 크기가 8이기 때문에 이 배열을 벗어나 있는 key 배열에 oob 취약점을 이용해 'ILOVEPWN'을 넣어주면 된다.

Shell을 땄다.

 


#2 Part-time Job

main함수를 보면 Your points인 v4가 0x17D78400(400,000,000)을 넘기고 입력받는 v3가 999이면 된다.

v4가 unsigned int 이고 unsigned int는 음수가 해당되지 않으므로 0인 상태에서 4번 선택지를 이용해 --v4하면 unsigned int의 최대값인 4294967295가 된다. 이렇게 하면 첫번째 조건이 풀리고, 바로 다음 v3를 입력 받을 때 999를 입력하면 쉘을 딸 수 있다.


#3 military

main함수를 보면 포멧스트링 버그 문제 인 것 같다. 포멧스트링 버그를 이용해서 discharged_past이 550이면 쉘을 딸 수 있다.

강의에서는 %p를 7번 해서 input 값의 위치를 찾았지만 나오지 않아서 8번 했더니 나왔다.(0x4141414141414141)

그리고 discharged_past의 주소는 0x4040AC 이다.

 

이를 토대로 쉘 코드를 작성해보면...

이 쉘코드는 nc(netcat)에서는 쉘이 따지지 않지만 로컬에서는 쉘이 따진다.

 

"실제 서버에 저장되어 있는 값은 'fake'가 아닙니다. 취약점을 이용해서 서버에 저장되어 있는 값을 guess 해보세요!"

 

로컬에서 fake 값이 어디에 위치하는지 알아야한다.

fake가 리틀엔디안 형식으로 13번 째에 위치하는 것을 알 수 있다.

nc로 접속하여 AAAAAA %13$p로 나온 주소 값인 0x6e41736e304e를

손수 언패킹 해서 hex to text로 변환해주면 N0nsAn이 나왔다.

fake를 N0nsAn으로 바꾸고 익스플로잇 하면 쉘이 따진다.

 

 

강의 해주신 분들 모두 수고 많으셨습니다.

'WhoIs 정보보안 교육 > Pwnable' 카테고리의 다른 글

Pwnable 2주차 과제 Write-up(#1~#4)  (0) 2021.11.28
Pwnable 1주차 과제 Write-up(#1~#3)  (0) 2021.11.21

#1 assembly

문제의 명령을 어셈블리로 작성하면,

mov rax, 0x77; 

mov rbx, 0x88; 

mov rcx, 0x99; 

sub rax, 0x10;           이다.

 

https://defuse.ca/online-x86-assembler.htm#disassembly

 

Online x86 and x64 Intel Instruction Assembler

Online x86 / x64 Assembler and Disassembler This tool takes x86 or x64 assembly instructions and converts them to their binary representation (machine code). It can also go the other way, taking a hexadecimal string of machine code and transforming it into

defuse.ca

해당 사이트에서 어셈블리 코드를 x64로 Assemble하여 나온 String Literal를 flag형식에 맞추면 된다.


#2 assembly

nc로 접속해보면,

IDA로 열어보면,

main 함수

read() 함수에서 bof가 발생한다.

generate_passcode 함수
win 함수

카나리를 우회하는 문제인 것 같다.


#3 assemlater

바로 IDA로 열어보면,

main 함수
assembly_calc 함수

main() 함수에서 scanf로 입력 받고 assembly_calc() 함수를 호출한다.

 

assembly_calc()에서는 인자인 v4와 0xABCD를 xor 한 값이 4886774851(0x123464443)이면 flag를 준다.


#4 canacode

jpg를 .jpg 확장자로 열어보면....

많이 힘드셨나보다...

 

canacod를 IDA로 열어보면,

잘 모르겠다! 패스토큰 사용!

'WhoIs 정보보안 교육 > Pwnable' 카테고리의 다른 글

Pwnable 3주차 과제 Write-up(#1~#3)  (0) 2021.12.05
Pwnable 1주차 과제 Write-up(#1~#3)  (0) 2021.11.21

#1 Studet ID

nc로 접속 해보면,

다음과 같이 나온다.

 

IDA로 열어보자.

 

v4의 배열 크기는 28이고, v5가 1234567890 -> 0x499602D2이면 flag가 나오는 것 같다.

pwntools로 scanf로 입력 받는 v4 부분을 'A' 28개로 채우고, 나머지를 0x499602D2로 채우면 된다.

 

exploit 코드

위의 exploit 코드를 실행하면 flag가 나온다.


#2 Magic Spell

nc로 접속 해보면,

다음과 같다.

IDA로 열어보면,

main 함수

main 함수를 보면 spell1()이라는 함수를 호출하는 것을 알 수 있다.

speel1()함수를 살펴보자.

spell1()함수에서 v1의 배열 크기는 31이며 scanf로 입력 받고, v2가 77 -> 0x4D이면 spell2()함수를 호출한다.

spell2()함수를 살펴보자.

spell2()함수에서는 배열의 크기가 16인 bof를 scanf로 입력받고, strncmp로 문자열을 비교하여 magic이 "pwnable!"이면 flag가 나온다.

 

pwntools로 익스플로잇 코드를 짜보면...

위의 exploit 코드를 실행하면 flag가 나온다.


#3 system

nc로 접속 해보면,

리눅스 상에서 ls -al 명령어를 입력했을 때의 결과 값 같은 것이 나온다.

IDA로 main 함수를 열어보면,

gets함수로 ggang이라는 변수에 입력받고, command를 system함수로 호출한다.

 

전 문제에서 한 것과 마찬가지로 pwntools로 배열을 "A"로 채우고 system함수로 쉘을 따는 쉘 코드를 짜보면,

 위의 쉘코드를 실행하면 쉘이 따지는데, 현재 디렉토리에 있는 flag를 cat으로 읽어주면 flag가 나온다.

'WhoIs 정보보안 교육 > Pwnable' 카테고리의 다른 글

Pwnable 3주차 과제 Write-up(#1~#3)  (0) 2021.12.05
Pwnable 2주차 과제 Write-up(#1~#4)  (0) 2021.11.28