4번 문제인 orc 이다.

 

이번 문제는 argv에 커맨드라인으로 입력받고, strcpy로 buffer에 값을 복사한다.

저번 문제에서 사용했던 환경 변수도 environ에서 전부 제거하고 시작하기 때문에 사용할 수 없다.

그리고 argv[1]의 47번째 문자가 \xbf가 아니면 종료해버린다.

따라서 argv[2]에 쉘코드를 넣고, argv[1]에서는 buffer(40) + sfp(4) = 44만큼 더미값으로 덮고, buffer의 ret을 argv[2]의 주소로 덮으면 될 것이다.

우선은 argv[2]의 주소를 알기 위해 임의의 값을 적어볼건데, argv[1][47]이 \xbf이여야하니, 아예 \xbf로 덮어보자.

그리고 argv[2]를 a로 덮어서 argv[2]의 입력이 시작되는 곳을 찾아보자.

 

보다시피 argv[2]의 입력이 시작되는 곳은 0xbffffc3c라는 것을 알 수 있다.

이제 buffer(40) + sfp(4) = 44만큼 더미 값을 채우고, 0xbffffc3c를 리틀엔디안으로 넣고, 두 번째 커맨드라인으로 입력하는 값에는 nop sled 100바이트와 쉘코드를 넣어주자.

 

성공적으로 쉘을 땄다.

cantata

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 3번 - goblin  (0) 2020.08.16
[LOB] 2번 - cobolt  (0) 2020.08.16
[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18

3번 문제인 goblin 이다.

 

1, 2번에서는 argv에서 넘어온 인자값을 strcpy로 복사해서 buffer에 넣는 방식이었다.

이번에는 gets로 표준 입력으로 buffer에 입력을 받는다.

따라서 이전처럼 ` 를 이용하여 작성하지 않고, | 를 이용하여 작성한다.

파이썬으로 값을 출력한 후, cat으로 출력해주면 표준 출력으로 찍혀서 값이 넘어갈 것이다.

그 외의 공격 코드 형태 자체는 아까와 동일할 것이다.

 

환경변수의 주소는 0xbfffff09이다.

이제 buffer(16) + sfp(4) = 20만큼 더미값을 채우고, 0xbfffff09를 리틀엔디안으로 넣어주면 될 것이다.

 

성공적으로 쉘을 땄다.

hackers proof

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 4번 - orc  (0) 2020.08.18
[LOB] 2번 - cobolt  (0) 2020.08.16
[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18

2번 문제인 cobolt 이다.

 

1번 문제와 유사하나 buffer의 크기가 이번에는 16이다.

즉, NOP sled나 shellcode를 담기에는 작은 공간이다.

따라서 환경변수로 미리 쉘코드를 만들어두고, 그 환경변수의 주소를 buffer의 ret에 덮어주면 될 것이다.

 

환경변수를 만들 때는 export [환경변수이름], 제거할 때는 unset [환경변수이름]의 형태로 만들 수 있다.

환경변수에 shellcode를 담았으니, 이제 환경변수의 주소를 알아보자.

 

환경변수의 주소는 0xbfffff07이다.

이제 buffer(16) + sfp(4) = 20만큼 더미값을 채우고, 0xbfffff07을 리틀엔디안으로 넣어주면 될 것이다.

 

성공적으로 쉘을 땄다.

hacking exposed

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 4번 - orc  (0) 2020.08.18
[LOB] 3번 - goblin  (0) 2020.08.16
[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18

Load of the BOF 문제를 풀어보기로 했다.

1번 문제인 gremlin 이다.

 

보아하니 argv에 입력받은 내용을 strcpy로 buffer에 복사하는 코드이다.

strcpy로 값을 복사하니 bof가 일어날 것이다.

buffer에 쉘코드를 넣고 ret 주소를 다시 buffer의 주소로 가리키면 될 것이다.

buffer의 사이즈는 256, sfp(4)를 더해 260칸이므로 쉘코드를 제외한 나머지 칸들을 NOP sled로 채워주면 될 것이다.

 

strcpy가 실행된 부분인 main+59에 bp를 걸고, A를 넣어서 어디서부터 buffer가 입력이 되는지 확인해보자.

 

보다시피 0xbffff918 부터 입력이 된다.

 

따라서 쉘코드가 깨지지 않게 적당히 NOP sled를 넣고, 쉘코드를 넣고, NOP sled를 다시 넣고 ret 주소를 0xbffff918로 적어주면 쉘코드가 실행될 것이다.

 

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80

 

쉘코드는 24바이트 쉘 코드를 사용할 것이다.

즉, 260 - 24 = 236 만큼 앞 뒤로 NOP sled를 써주자.

그리고 그 뒤의 ret 주소에 0xbffff918를 리틀엔디안 형식으로 넣어주면 될 것이다.

 

성공적으로 쉘을 땄다.

hello bof world

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 3번 - goblin  (0) 2020.08.16
[LOB] 2번 - cobolt  (0) 2020.08.16
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18
Hackerschool FTZ - level7 write up  (0) 2019.09.18

cobolt 문제를 풀어보았다.

 

? 보아하니 id가 admin이면 solve가 해결된다.

그리고 쿼리문을 확인해보니 GET으로 받아온다.

그래서 생각이 나는대로 id에 admin값을 넣고, 뒤의 코드를 실행 안되게 처리해보았다.

?id=admin%27%23

이렇게 값을 넣어보니 쿼리문에 

select id from prob_cobolt where id='admin'#' and pw=md5('')

와 같이 값이 들어갈 것이다.

 

풀었다.

'Hacking > Webhack' 카테고리의 다른 글

LOS - 1 gremlin write up  (0) 2019.10.10

LOS를 시작하기로 했다.

https://los.eagle-jump.org

 

gremlin 문제를 풀어보았다.

 

php 코드를 보아하니 id의 rseult 값이 참이면 문제가 풀리는 듯 하였다.

쿼리문을 처리하는 부분을 보아하니 id와 pw를 GET으로 받아온다.

그래서 id에 1을 넣어보고 뒤의 코드가 실행되지 않도록 해보았다.

?id=' or 1=1 #

을 넣으면 쿼리문이

select id from prob_gremlin where id='' or 1=1 '# and pw''

이렇게 처리하면 될 것이다.

근데 다시 확인을 해보니 url 링크에는 #이 들어가지 않는 문제가 있었다.

그래서 찾아보니 url 인코딩을 해야된다는 사실을 알게되었다.

' = %27

# = %23

따라서

?id=%27%20or%201=1%20%23

이렇게 값을 넣었다.

성공적으로 풀렸다.

'Hacking > Webhack' 카테고리의 다른 글

LOS - 2 cobolt write up  (0) 2019.10.10

이 늅늅이가 팀에서 NACTF를 나가게 되었다. 다른 분야는 이미 대부분 풀려있었기에 암호학만 잡고 풀어보았다.

라고 해도 별로 많이 못 풀어서 아쉽다.

Vyom's Soggy Croutons (50)

 

보아하니 카이사르다.

key값을 17로 해보니 flag를 얻을 수 있었다.

FLAG : nactf{et_tu_brute}

 

Loony Tunes (50)

 

pig.jpg가 있는 것을 확인할 수 있었다.

 

보아하니 freemason 암호화같다.

freemason 암호화 기법을 찾아보니 이러하였다.

FLAG : nactf{th_th_th_thats_all_folks}

 

Dr. J's Group Test Randomizer: Board Problem #0 (100)

 

문제를 읽어보니 middle-square method가 사용되었다고 한다.

middle-square method는 seed값을 이용하여 첫 seed를 제곱한 값에서 첫 seed와 똑같은 길이의 수를 가운데서 뽑아내고, 그 값을 다음 seed 값으로 사용한다.

따라서 첫 값을 구하면 다음 값을 유추해 낼 수 있을 것이다.

 

우선 random으로 만들어지는 값을 봤다.

 

처음 나온 값인 6263488612262025 에서 중간 8자리의 48861226를 제곱해보니, 다음 수인 2387419406223076를 얻을 수 있었다.

그렇다면 다음 숫자는 2387419406223076의 중간 8자리인 41940622의 제곱인 1759015773746884터이고, 그 다음 수는 1759015773746884의 중간 8자리 숫자인 01577374의 제곱인 2488108735876일 것이다.

 

FLAG : nactf{1_l0v3_chunky_7urn1p5}

 

Reversible Sneaky Algorithm #0 (125)

 

RSA문제다.

플래그 값을 hexdump로 변환하여 다시 10진수로 바꿔서 띄워 놓은 듯 하다.

rsa.txt를 열어보니 공개키 n값과 개인키 d값, 암호문으로 추정되는 c값이 주어졌다.

 

RSA는 복호화할 때, C**D MOD N 이라는 연산 과정으로 복호화된다.

 

결과 값을 문자로 변환시키면 flag를 얻을 수 있다.

FLAG : nactf{w3lc0me_t0_numb3r_th30ry}

level9입니다.(id:level9, pw:apple)

 

힌트를 보니 드디어 bof문제다.

보아하니 buf 사이즈가 10인데 40자리를 입력받는다.

그리고 buf2에 go가 있으면 level10 권한을 준다.

buf를 이용하여 bof를 내면 될 것 같았다.

우선 hint파일을 가져와서 한글 부분을 없애고 컴파일하여 파일을 만들어 gdb로 까봤다.

 

fgets부분과 strncmp부분을 보아하니 윗부분에 eax에 ebp-40과 ebp-24를 lea한다.

즉, ebp-40이 buf고 ebp-24가 buf2일 것이다.

0x08048461 - 0x0804844b = 16

그대로 입력하면 될 듯 하였다.

 

level10권한을 얻을 수 있었다.

level10이다.(id:level10, pw:interesting to hack!)

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 2번 - cobolt  (0) 2020.08.16
[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level8 write up  (0) 2019.09.18
Hackerschool FTZ - level7 write up  (0) 2019.09.18
Hackerschool FTZ - level6 write up  (0) 2019.09.10

level8입니다.(id:level8, pw:break the world)

hint를 확인해보니 shadow 파일이 숨겨져있고, 파일 크기가 2700이라고 했다.

그래서 일단 파일 사이즈가 2700인 파일을 찾아보았다.

뭐 어찌저찌 found.txt라는 녀석이 눈에 띄는데, 한 번 출력해봤다.

 

솔직히 말해서 뭔지 모르겠다.

그래서 대충 :으로 구분하는 저런 형식의 암호화, 복호화 하는 툴을 조사하다보니, John the Ripper 라는 툴을 발견할 수 있었다.

보아하니 level9: 뒤의 $부터 : 전까지의 값을 복호화 하는 듯 하다.

pass.txt라는 텍스트 파일에 넣어서 복호화를 시도해보았다.

 

오, 아마 apple이 level9의 pw인 듯 하다.

level9까지 왔다.(id:level9, pw:apple)

'Hacking > Pwnable' 카테고리의 다른 글

[LOB] 1번 - gremlin  (0) 2020.08.10
Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level7 write up  (0) 2019.09.18
Hackerschool FTZ - level6 write up  (0) 2019.09.10
Hackerschool FTZ - level5 write up  (0) 2019.09.09

넹, level7입니다. (id:level7, pw:come together)

우선 hint를 봤더니, 대충 2진수를 10진수로 바꿔서 ascii to string을 하면 될 듯 했다.

 

일단 /bin 에서 level7을 실행해봤다.

 

자, 정말 끔찍했습니다.

/bin/wrong.txt 에 힌트가 있고 그게 있어야 풀 수 있는 간단한 문제, 근데 wrong.txt가 왜인지 없어서 어떻게 푸는지 감이 안잡혔다.

한동안 시간을 낭비하고 있다가 다른 분들의 라업의 앞부분을 읽으면서 알게되었다.

단순한 문제였다.

왜인지 구축하여 놓은 로컬 서버에 없었다!

으으, 그래서 wrong.txt의 내용만을 받아왔다.

wrong.txt의 내용은 이것이다.

 

--_--_- --____- ---_-__ --__-_-

 

대충 -는 1, _는 0으로 치환하면 될 듯했다.

 

1101101 1100001 1110100 1100101

 

대충 10진수로 바꿔보니 이랬다.

 

109 97 116 101

 

아스키 코드라 생각이 들어 바꿨더니 mate라는 값을 얻을 수 있었다.

그리고 단순히 그게 암호였다.

 

level8이다.(id:level8, pw:break the world)

'Hacking > Pwnable' 카테고리의 다른 글

Hackerschool FTZ - level9 write up  (0) 2019.09.21
Hackerschool FTZ - level8 write up  (0) 2019.09.18
Hackerschool FTZ - level6 write up  (0) 2019.09.10
Hackerschool FTZ - level5 write up  (0) 2019.09.09
Hackerschool FTZ - level4 write up  (0) 2019.09.09

+ Recent posts