본문 바로가기

CTF 공부/LOB22

[LOB]death_knight 끝~! 2020. 2. 15.
[LOB]xavius buffer 크기는 40인데 255의 크기를 받습니다. 여기서 buffer overflow 취약점이 발생하네요. 이걸 실행하려면 서버에서 6666포트를 이용해서 nc를 통해 접속을 해야합니다. 접속을하면 이렇게 뜹니다. 저기서 입력을 받는 값에 44의 dummy + &shellcode + nop + shellcode 를 담아서 보내면 됩니다. 근데 여기서 shellcode는 remote shellcode를 넣어야 합니다. 원격으로 다른 서버의 특정 포트로 접속하는 쉘코드입니다. 저는 저의 가상 서버의 주소와 12345 포트번호를 이용해서 만들었습니다. 쉘코드는 다음 글을 참고하였습니다. https://www.exploit-db.com/exploits/25497 Linux/x86 - Reverse (192.. 2020. 2. 15.
[LOB]nightmare argv를 통해 인자를 전달받는 것이 아니네요. fgets를 한번만 사용하니 cat을 통해 payload를 작성하면 될거같고... buffer+47 값이 0xbf, 0x08이면 안된다네요... 스택, 바이너리 영역 모두 사용할 수 없습니다. 또 leave, ret를 체크하는 구문도 있네요... fgets안에 stdin이 취약점이 있다고 합니다. (몰라서 여기저기 검색해봤습니다.ㅠㅠ) stdin을 사용할 시 그 안에 임시 buffer가 존재하는데 그 buffer는 스택영역이 아닌 bss영역이라네요! 이 영역에 진짜 값이 존재하는지 확인해보았습니다. stdin의 주소를 알아온 후 break point를 걸어 값을 넣어봤습니다. 그리고 stdin의 값을 보니 실제로 값이 그대로 남아있는 것을 확인했습니다.! .. 2020. 2. 7.
[LOB]succubus Return Address가 무조건 strcpy의 주소여야하네요.. 그리고 buffer+ 48부터 A로 4byte를 채웁니다... 근데 우리가 사용하는 함수가 strcpy, 복사를 해주는 함수입니다. payload는 대충 이렇게 작성하면 될 것 같습니다. ./nightmare + "\x90"*44 + &strcpy + dummy[4] + (strcpy 첫번째 인자) + (strcpy 두번째 인자) + (strcpy 세번째 인자) 여기서 strcpy의 첫번째 인자는 strcpy가 호출 후 돌아갈 Return Address, 여기서는 dummy[4]가 들어있는 주소를 넣어주고 strcpy의 두번째 인자는 Shellcode가 존재하는 곳의 주소를 넣어주면 됩니다. 마지막으로 strcpy의 세번째 인자는 She.. 2020. 2. 7.
[LOB]zombie_assassin RTL이 안되구요...argv[44:48]이 무조건 D0의 주소여야 합니다. D0 -> GYE -> GUL -> YUT -> M0 순으로 올라가는 것 같습니다... RTL Chaining 방법을 이용해서 적용을 해보면! 일단 각각 함수들의 주소를 구해보겠습니다. 구한 함수들의 주소를 순서대로 삽입하니까 이런 결과가 뜹니다. char* cmd 안에 쓰레기 값이 들어가서 실행이 잘 안되는 것 같습니다.. cmd 값을 /bin/sh로 채워줘야하는데 마지막 MO의 주소 + (4byte dummy : Return Address) + argv address + /bin/sh\x00 으로 채워보겠습니다. core dumped가 발생했으니 실제로 /bin/sh이 존재하는 위치를 찾아보겠습니다. /bin/sh 2F 62.. 2020. 2. 7.
[LOB]assassin FEBP를 이용해서 풀어야 하네요. 잘 몰라서 여기저기 많이 보면서 공부했습니다. ./filename + dummy[4] + &(nop+shellcode) + dummy[32] + &argv[1] + (nop + shellcode) argv[1]의 주소를 모르기에 0xbfbfbfbf로 넣었습니다.! 그리고 생긴 core dump로 argv[1]주소를 확인해보니 argv[1]의 주소는 0xbffff801이네요!! 이걸 이용해서 이제 payload를 작성해서 실행해보면 성공! 2020. 1. 30.
[LOB]giant stack 영역도, RTL도 안되네요... 그럼 뭐가 있을까요? 48byte 중 44byte를 초기화하는거 보니까 4byte 어디 주소로 이동해야하는데...... 호출되는 exit()의 주소가 0x80으로 시작하네요 이런 점을 이용하는 것이 아닌가 싶습니다. 아니였습니다.!!! ret 주소를 다시 호출하고 Shellcode가 담긴 주소를 넣은 후 Shellcode를 넣으면 된다고 합니다.! ret sled라는 취약점이 있습니다. ret는 pop eip jmp eip로 구성되어있습니다. eip에 return address를 넣고, jmp로 이동하는데 ret ret를 연속으로 쓰면 이동하는 주소를 변조시킬 수 있나봐요. payload : ./assassin `python -c 'print "ret Addre.. 2020. 1. 29.
[LOB]bugbear 딱 봐도 어려워보이네요... argv[1]의 44번째부터 4바이트가 execve의 주소랑 같아야합니다. execve(exit()) 후 execve의 ret에 system을 넣고 인자로 /bin/sh을 넣어서 풀어야합니다. (write up 봣습니다 ㅎㅎ.. 어렵네요) 필요한 것들은 - execve 주소 - exit 주소 - system 주소 - /bin/sh 주소 - NULL 주소 이 값들을 구해보면 이렇게 주어지네요! - execve 주소 : 0x489d0a40 - exit 주소 : 0x400391e0 - system 주소 : 0x40058ae0 - /bin/sh 주소 : 0x400fbff9 - NULL 주소 : 0xbffffffc 이걸 이용해서 paylod를 작성하면 ./giant + dummy[44.. 2020. 1. 29.
[LOB]darkknight 코드를 보니까 argv[1]의 첫번째 메모리 값이 0xbf면 안된다네요... 보통 stack 안의 주소는 bf로 시작하던데 참 큰일입니다. 잘 모르겠어서 풀이를 보니까 RTL을 이용해서 풀어야한다고 합니다. 그럴 경우 0x40으로 주소가 시작하기에 우회할 수 있다고 하네요. 간단하게 설명하면 system("/bin/sh")이 실행되게 맞춰주는거라고 합니다. 먼저 system 함수의 주소를 찾아야합니다. 제꺼에서는 0x40058ae0로 나오네요. 또 인자로 전달해 줄 /bin/sh를 찾아야합니다. 저는 이렇게 코딩하였습니다. 결과는?! 이제 paylod를 작성해야하는데 작성하는 법은 https://shipp.tistory.com/46 [HACKING] RTL(Return-To-Libc) 공격 이해하기 bo.. 2020. 1. 29.