시스템 해킹 6

[Whois] 시스템 해킹 - Format String Bug

23번째 줄을 보면 조건문 안에 or가 있다 이 조건문을 탈출해야 system 함수가 발동된다. 1. buf와 s2 값을 비교해서 같을때 2. discharged_past 값이 550이 아닐때 두 조건을 반대로 만족시켜야 한다. discharged_past를 살펴보면 메모리 주소가 00 00 00 00 00 40 40 AC 인 것을 확인할 수 있습니다. 일단 위 코드를 보면 buf부터 차례대로 2칸, s 5칸 s2 8칸을 차지합니다. 포맷스트링을 이용해서 공격을 할 것인데 나눠서 설명을 하겠습니다. %550c: 550칸 띄워준다, 550byte를 확보한다, 550을 입력받는다. %10%n: 10번째에 AAAAAA: 패딩값, 쓰레기값이다 원하는 값을 10번째에 넣어주려고 했으나 %550~$n까지 총 10칸..

시스템 해킹 2021.12.08

[Whois] 시스템 해킹 - OOB(Out-Of-Bound)

v4를 통해 숫자를 입력받고 fakekey[v4] 배열처럼 생겼지만 아닌 변수에 캐릭터형을 입력받습니다. 처음 while조건을 빠져나가기 위해선 fakekey[0] 번째가 #이어야 합니다. 원래 10(0x23) 이었으나 %c로 받으므로 보기 쉽게 캐릭터형으로 바꿔주었습니다. * fakekey[v4] 입력시 주의할 점: " %c" => 스페이스바 처음에 fakekey[0] 에 ' #'을 입력했을 때는 쉘로 들어가지 않고 root@kali 머무르고 있었습니다.(루트) 그 이유는 20번째 줄 조건문을 충족시키지 못했기 때문인데 key에 ILOVEPWN을 넣어주어야 했고, 17번째 줄부터 key[0] 번째부터 입력된다는 것을 알았습니다. 키는 char[] 입니다. 해당 변수에 들어가보니 fakekey보다 위에 ..

시스템 해킹 2021.12.06

[Whois] 시스템해킹 - Integer Issues

v3에 1-4까지 값을 입력받아 해당 번호에 맞는 알바를 하고 포인트를 받는 코드입니다. 시작 포인트는 30입니다. system() 함수를 실행시키기 위해선 ② v3값이 999이여야하고 ① v4값은 정확히 4억보다 커야합니다. ① 4번을 누를씨 1포인트씩 마이너스가 진행됩니다. 30포인트를 모두 깎자 정수 오버플로우가 발생해서 v3의 값이 42억대의 숫자로 바꼈습니다. ② 입력을 받는 역할이었던 v3에 999를 입력하자 두 가지 조건문을 탈출하고 system() 함수가 발동되어 해당 쉘로 이동합니다. 해당 쉘에서 flag를 보는 명령어 입력 후 답을 확인합니다.

시스템 해킹 2021.12.06

[Whois] 시스템해킹 - 버퍼오버플로우3

3번째 문제는 함수나 변수에 들어가봐도 힌트가 너무 적었습니다. 마지막우로 command를 살펴보았습니다. command를 보면 60~90(16)까지 채워져있었고, 마지막 command 부분엔 ls -al이 있었습니다. *ls -al은 모든 디렉터리의 상세정보까지 볼 수 있는 명령어이다. ls -al대신 cat /flag 명령어를 실행시키고 싶었고, 지금껏 system(command) 에서 cat /flag를 실행시켰기 때문에 버퍼오버플로우를 발생시키고 명령어를 바꾸면 된다고 생각했습니다. 명령어 사용을 하기 전 오버플로우 리미트를 알기 위해 계산기를 통해 10진수 값을 알아왔습니다. 첫 번째 문제와 비슷한 형태로 해결할 수 있었습니다. cat;는 파이썬으로 인자전달을 할 때 블로그를 참고했었는데 정확한..

시스템 해킹 2021.11.23

[Whois] 시스템해킹 - 버퍼오버플로우2

main에는 spell1() 함수만 덩그러니 놓여있었습니다. spell1 함수 안으로 들어오자 위와 같은 코드가 나왔습니다. 1번 문제와 비슷한 유형으로 v1 값을 scanf로 받아주지만 정작 비교해주는 것은 v2이었습니다. 그렇기 때문에 v1을 오버플로우해서 v2에 접근하고 v2값을 수정해주어야 합니다. v2값이 77('M')이 된다면 spell2() 함수를 호출해줍니다. spell2()함수는 magic 과 pwnable! 지정된 길이 만큼 비교해 줍니다. (8uLL) spell1까지는 31칸 오버플로우 시켜주고 아스키코드 값인 (77=M) 을 Hex로 입력해주어 "\x4D"로 입력했습니다. 하지만 함수를 실행하고 다음 명령어를 어떻게 붙이는지가 난관이었습니다. spell2() 함수에 bof를 까 본 ..

시스템 해킹 2021.11.23

[Whois] 시스템해킹 - 버퍼오버플로우1

첫번째 student 파일을 IDA 프로그램을 사용해서 코드로 확인해 보니 v5가 1234567890을 만족할 때 flag를 알려주는 것을 확인했습니다. 그러나 scanf로 입력받는 것은 v4 뿐이며 if 문에서는 v5를 비교하기 때문에 v4의 값을 채워줘야 합니다. (버퍼오버플로우 발생시키기) 그렇기에 v4[28]은 총 28칸을 채워주어야 합니다. 이후, v5에는 1234567890값을 넣어주어야 하는데 어셈블러가 16진수(Hex)를 좋아하기에 계산기를 사용했습니다. IDA에서도 코드를 확인해보니 역시 16진수와 비교하고 있습니다. 위 사진을 보면 cmp(compare) 49960D2h 를 비교하여 flag를 출력해줍니다. *h는 16진수가 아님 가상머신을 이용해 칼리리눅스를 켜주었습니다. 쉘에서 py..

시스템 해킹 2021.11.22