본문 바로가기

system

6. Return Oriented Programming (ROP) 6. python programming 관련 동영상입니다. 설명은 생략하도록 할게요. 필요하신 분은 참고하세요! python 바이너리 사용법은 ./python [port] 입니다. 7. ROP 6은 건너뛰고 왜 7이냐면, 중간에 python basic programming 이 있었지만 설명할 게 별로 없으므로 넘어가기로 했습니다. 이번 7번째 강의시간은 Return Oriented Programming을 배워보도록 합니다. 이 기법은 리얼월드에서도 자주 쓰이는 기법으로 , 아직까지 ROP를 막는 방법이 연구되지 않았습니다. ROP(Return Oriented Programming)는 현재 수행중인 프로그램 코드 안에 존재하는 서브루틴이 리턴 명령어에 닿기 전에 선별된 기계 명령어 또는 기계 명령어 덩어리.. 더보기
[2015 Plaid CTF] pwnable_EBP 160p 대학원 준비하느라 많이 바쁜 관계로 가볍게 한문제 풀고 포스팅합니다. 2015. 4. 18일 오전 3시인가 0시부터 시작했던 ppp팀 주관의 2015 plaid ctf , pwnable 문제 ebp 입니다. 전형적인 포맷스트링 버그 문제입니다. 바이너리는 매우 단순합니다. 제가 문제풀면서 적당히 정리한 text 라 지금 response와 buf 배열이 함수 내에 존재하는데원래 바이너리에 buf[1024]와 response[1024]는 전역변수로 선언되어 있습니다. 이 바이너리를 간단하게 요약하면 #include char buf[1024];char response[1024]; void main(){while(1){fgets(buf, sizeof(buf), stdin);echo();}} void echo().. 더보기
[2014 Christmas CTF] The Magic Picture Book write up이 풀려있기 때문에 슬슬 소스, 바이너리, 플래그파일을 뿌립니다. http://gon.kaist.ac.kr/?cat=1 여기 링크는 카이스트 곤 동아리 분들이 푼 write up 사이트입니다. 제가 아직 지식이 부족해서 바이너리를 복잡하게 꼬았어요. 미안합니다 ㅠ 다음엔 더 질좋고 공부하기에도 좋은 문제를 만들도록 하겠습니다.열심히 공부할게요. 문제는 이런식으로 생겼고 Weights and Measures 와 같이 exploit 코드는 공개하지 않겠습니다. signal()을 쓰면 fork()로 연결된 child 프로세스가 종료될 때 종료되지 않고 남아있는 걸 해결할 수 있다네요. 바이너리 사용법은 간단합니다. ./The_Magic_Picture_Book 4940 이런식으로 바이너리 옆에 사.. 더보기
Alpha-Numeric Shellcode (Ascii Shellcode) 알파뉴메릭 쉘코드 제작방법에 대해 포스팅합니다. 말 그대로 숫자, 영어만으로 쉘코드를 제작할 수 있습니다. 오래된 기법이긴 하지만 이리저리 국내, 해외사이트를 뒤져봐도 정작 제작하는 방법은 안 나와있고 여러가지 툴을 이용한, Alpha3으로 제작하기, 메타스플로잇 alpha_mixed 옵션을 이용해서 만들기 밖에 없네요. 아스키쉘코드를 적용시키려면 우선 환경이 중요합니다. esp컨트롤로 스택포인트를 eip에 위치시켜서 xor한 값을 실행시킬 수 있습니다. 우선, 제일(?) 유명할 거라 생각되는 리눅스 쉘코드를 던져봅니다. http://shell-storm.org/shellcode/files/shellcode-827.php #include #include char *shellcode = "\x31\xc0\.. 더보기
[2015 Nullcon] exploitable 300 이 문제 이 외에도 여러 문제가 있지만 이 대회는 왠지모르게 씽크빅 대결인 듯 하여 그나마(?) 기술적인 exploitable 문제 하나 포스팅합니다. 바이너리를 실행해보면 Command% 가 나옵니다. 사용법은 set [name] [data] get [name] set a 1234get a를 하면 a 에 1234가 저장되서 get a 로 1234가 출력됩니다. 이것만으로는 아무것도 모르므로 gdb로 분석합니다. main 함수를 보면 input_loop 함수로 넘어가고 여기로 넘어가면 "Command%" 출력 후 fgets로 문자열을 받고 process_command 함수로 넘어갑니다. 여기는 strstr 함수로 비교를 해서 help입력 시, help 함수로, exit 입력시 exit.strcmp로 se.. 더보기
[Linux] 개성적인 터미널 만들기 이번엔 자신만의 터미널 만들기에 대해 포스팅을 해봅니다. 여기서 다룰 내용은 터미널 출력 포맷팅 (Color Bash Shell), figlet 툴, asciiview 툴 사용법입니다. 일단 결과물부터.. 터미널을 열면 피카츄 그림과 함께 제 아이디가 출력되고배시 쉘에 컬러로 이쁘게 꾸밀 수 있습니다. 우선, 일반 그림을 아스키문자로 바꿔주는 툴이 따로 있는데asciiview 라는 툴입니다. sudo apt-get install aview로 툴을 설치해준 뒤, 그림이 있는 경로에서 asciiview xxxx.jpg -driver curses 를 해주면 그림을 아스키문자로 변환해줍니다. 자세한 옵션은 터미널에서 man asciiview 를 사용하시면 됩니다. 혹은 http://manned.org/ascii.. 더보기
[2014 Hack.lu] guess the flag write-up 몇달 전에 있었던 hack.lu ctf 문제 중 exploit 문제 Guess the Flag 입니다. 그 날 이 문제 풀면서 멘붕이 왔었는데 바쁜 일 다 끝나고 학교동아리 홈페이지에 이 문제를 아주 약간 바꿔서 올린걸 풀어보았습니다. 문제의 원래 코드는 이렇게 생겼습니다. 전 동아리 서버에 올린 문제로 풀이를 하겠습니다. 문제의 서버환경은 64bit이지만 동아리 서버는 32bit입니다. 문제풀이 하실 때에 크게 차이 없을거에요. 이 문제의 핵심적인 부분을 설명드리자면, * guess> 뒤에 100글자를 입력해야 하고 위의 is_flag_correct() 함수에서 char value1 = bin_by_hex[flag_hex[i * 2 ]];char value2 = bin_by_hex[flag_hex[i .. 더보기
stack corruption basic 요즘은 Buffer Overflow 라는 표현보다 Stack corruption, Heap Corruption이라는 표현을 쓰더라구요. 저도 트랜드(?)에 맞춰서 스택커럽션이라는 표현을 쓰도록 할게요. 시스템 포스팅을 시작하기에 앞서 시스템 해킹이 뭔지 알아보겠습니다. 우선, 간단하게 취약한 코드를 코딩합니다. 환경은 공지사항에도 올려놨듯이, ubuntu 14.04, 커널환경은 linux 3.13.0-36-generic 입니다. 컴파일 옵션에 -fno-stack-protector, mpreferred-stack-boundary=2 옵션을 주었는데 -fno-stack-protector 를 걸면 컴파일된 프로그램에 메모리보호기법인 ssp(stack-smashing-protector) 를 걸지 않습니다. 카나.. 더보기
Assembly-> C Handray(2) Assembly-> C Handray(1)에서 했던 내용을 약간 응용해서 Codegate 2013 vuln 400 문제를 handray 할텐데요.assembly언어를 C로 handray하는 건 끈기와 인내(?)가 필요한 작업이기 때문에 일부분만 하겠습니다. 이전 글을 읽으시고 핸드레이를 연습하시는 분이라면 이 글은 어셈블리어가 눈에 익숙해지신 분들만 읽어주셨으면 좋겠습니다. 코드가 너무 길어서 일일히 설명해드릴 수가 없고(어차피 노가다이기 때문에 핸드레이 좀 해보신 분들은 이해하실 수 있을겁니다.) Ida의 힘을 빌려 함수와 변수명을 정의하는 과정을 보여드립니다. 일단 이 문제는 이렇게 생겼습니다. 핸드레이에 익숙하신 분은 Ida-pro를 이용해서 코드분석을 빨리 하시는 것도 좋은 방법이지만, 배우는 입.. 더보기
Assembly-> C Handray(1) 시스템해킹, 리버싱을 시작하기에 앞서, 어셈을 C로 바꾸고 C를 어셈으로 바꿀 수 있는 능력은 정말 중요하다고 생각합니다. 리버싱이든 시스템이든 우리는 어셈블리어를 무조건 마주치고 분석해야하는 입장이기 때문입니다.(물론 안드로이드 리버싱을 할 때에는 달빅코드로 되어있어서 어셈블리어와는 약간 다른 개념이지만요.) 문제를 많이 풀어보는 것도 좋은데 전 그전에 C언어로 어떤 코드든 컴파일해서 그걸 디버거로 역분석하여 핸드레이로 다시 복원하는 연습을 하셨으면 좋겠다고 생각합니다. 짧게는 한달, 많게는 두달까지요. 이 기준은 여러분이 적당하다고 느낄때까지 입니다. 복원하는 연습을 꾸준히 하다보면 어셈블리어코드가 자연스레 눈에 들어오는데, 그정도면 성공입니다. 예를 들어서, 간단한 코드가 있는데 gdb로 열어보면 .. 더보기