목록전체 글 (370)
cgy12306
var_dump는 데이터가 어떠한 형식인지 보여줌. 문자열을 사용할 때는 “”를 사용. \(역슬래쉬)는 문자열의 시작이라는 “의 기능을 취소시켜 그냥 문자”로 인식하게 된다. 출처 : https://opentutorials.org/course/62/5115 숫자와 문자 - 생활코딩 예제 /number_string/number.php https://github.com/egoing/phpeverybody/blob/master/number_string/number.php /number_string/string.php https://github.com/egoing/phpeverybody/blob/master/number_string/string.php
HTTP : 웹 브라우저와 웹 서버가 통신하기 위한 규약 예를 들면 HTML은 편지 HTTP는 운송수단 Common Gateway Interface : 웹서버와 서버 사이드 스크립트가 데이터를 주고받기 위한 통신규약 php파일 하나를 만들면 DB에서 데이터를 얻어와서 CGI를 이용해 HTML 형태로 보여준다. php파일 하나로 모든 정보를 보여줄 수 있기 때문에 서버 사이드 스크립트 언어를 사용한다. 출처 : https://opentutorials.org/course/62/5117 서버측 언어를 사용하는 이유 - 생활코딩 서버측 언어를 사용하는 이유 2013-10-13 23:54:35 opentutorials.org
1번째 줄은 php엔진에게 php문법을 사용한다고 알려줌. 2번째 줄은 echo는 뒤에 있는 것을 화면에 출력하는 명령어. 문자열은 “ ”, ‘ ’ 를 사용. 3번째 줄은 php문법을 종료한다고 알려줌. echo “Hello workld”;는 html 내부이기 때문에 그대로 출력되고 그 다음 줄
PHP는 서버쪽에서 실행되는 프로그래밍 언어이다. 웹 클라이언트는 URL을 엔터로 요청을 하면 웹 서버는 URL에 해당하는 것을 제공한다. php는 hosting환경에서 사용 가능하고, 컴파일이 필요 없는 interpreter방식의 언어이다. 웹 서버 구성 sudo apt-get update sudo apt-get install apache2 sudo apt-get install php sudo apt-get install libapache2-mod-php sudo apt-get install mysql-server sudo /etc/init.d/apache2 restart sudo /etc/init.d/mysql restart apt-get을 업데이트 해준후 apache2, php, mysql을 설치하..
ID : cobolt PW : hacking exposed 파일을 확인해보자. 버퍼를 16byte만큼 할당해주고 gets로 buffer를 입력받는다. gets도 버퍼오버플로우 취약점이 존재한다. 디버깅 해보자. 버퍼를 16만큼 할당해주는걸 볼 수 있다. gremlin처럼 풀면 될 것 같다. 환경변수에 쉘코드를 넣어주고 쉘코드의 주소를 알아내는 코드를 작성하고 실행한다. 명령어는 (python -c 'print "A"*20 + "\xc7\xfe\xff\xbf"'; cat) | ./goblin 이다. FTZ에서 봤듯이 매개변수를 이용해서 값을 복사하는 strcpy와는 달리 표준입력을 이용하는 gets를 쓰기 때문에 파이브를 이용하고 쉘주소가 있는 곳을 실행한 후 cat으로 명령어를 입력할 수 있게 해준다. ..
ID : gremlin PW : hello bof world 파일을 확인 해 보자. 버퍼를 16byte만큼 할당해 준다. 이러면 gate문제에서 쉘코드 길이가 25byte여서 명령어 안에 넣어줄 수 없다. 그러면 환경변수 안에 쉘코드를 넣어주고 쉘코드의 주소를 알아내서 ret에다가 그 쉘코드 주소를 넣어주는 방법을 생각해 볼 수 있다. 디버깅을 해보자. 버퍼를 16만큼 할당 해주는걸 볼 수 있다. 그러면 A를 16(buffer) + 4(SFP)만큼 덮어주고 ret에 쉘코드 주소를 넣어주면 되겠다. 우선 쉘코드를 환경변수에 넣어보자. 쉘코드의 주소를 알아보자. c코드를 작성한다. 주소는 0xbffffec5이다. 그럼 이제 명령어를 입력해보자. ./cobolt `python -c 'print "A"*20 +..
ID : gate PW : gate 파일 목록을 확인해보니 gremlin이라는 실행 파일과 C파일이 있다. C파일을 열어보자. 버퍼를 256byte 만큼 할당해준다. 인자가 1개면 argv error를 출력하고 종료하며 아닐 경우 두번째 인자를 strcpy함수를 이용해 buffer에 넣고 buffer를 출력하는 코드이다. strcpy는 문자열의 길이를 검사하지 않고 그대로 복사하기 때문에 버퍼오버플로우에 취약할 수 있다. 디버깅 해보자. 256(0x100)만큼 버퍼를 할당해주고 strcpy 함수를 호출하는걸 볼 수 있다. 시나리오를 작성해보면 256(버퍼) + 4(SFP)를 덮어주고 ret에다가 다른 주소를 넣어 쉘코드를 실행 시킬 것이다. NOP sled 기법을 사용할 것이다. NOP sled 는 NO..
ID : level20 PW : we are just regular guys hint 파일을 열어보면 bleh에 80만큼 할당해주고, fgets으로 bleh의 79바이트 만큼 입력을 해주게 된다. bleh변수에 79바이트 만큼 할당해주면 BOF를 사용할 수 없게된다. 일단 디버깅 해보자. 메인 심볼이 없어서 디스어셈블을 할 수 없다고 한다. 다시 hint 파일을 보면 printf(bleh);부분이 있다. 원래 c언어를 했었다면 printf("%s", 변수); 이렇게 작성을 했었을텐데 printf(bleh)이 적혀있다. 이 코드는 FSB의 취약점이 있다. FSB 취약점은 Format String Bug의 약자이다. 우선 포맷스트링의 종류이다. 파라미터 변수형식 %d 정수형 10진수 상수 %f 실수형 상수(..
ID : level19 PW : swimming in pink gets의 취약점을 이용한 버퍼오버플로우이다. 디버깅 ㄱㄱ 40byte+ SFP(4byte)= 44byte이다. 44byte만큼 A를 넣어주고, ret에 쉘코드가 들어있는 환경변수의 주소를 넣어주면 된다. 기존의 있던 쉘코드를 그대로 이용해봤지만 uid가 level19이다. 여태 이용했던 쉘코드의 내용은 /bin//sh로 쉘을 획득하는 거지만 이번 attackme의 c 코드를 확인해보면 setreuid로 uid를 얻는 것이 없다. 그러면 level20의 uid를 확인하고 쉘 코드에 level20의 uid를 얻어주는 코드를 넣어주면 된다. (RDH님의 도움) level20의 uid는 3100이다. setreuid(3100,3100)을 포함하는 ..
ID : level18 PW : why did you do it check와 deadbeef와 비교해서 같으면 shellout 함수를 호출해서 쉘을 획득하는 것 같다. 이 부분을 보면 x버퍼에 1바이트씩 읽어서 스위치 문을 돌린다. x에 0x08이면 count-1을 해주고, 일반적인 값이 들어오는 경우 string[count]위치에 x를 넣고 count+1을 해준다. 디버깅을 해보면 main+91에서 ebp-104와 0xdeadbeef를 비교하는 것을 보면 ebp-104 부분은 check변수가 들어가는 곳 임을 알수 있다. 이 부분은 switch문의 영역이다. main+444부분을 보면 epb-2520와 0x8과 비교한다. ebp-252에 x가 들어가는 것을 알 수 있다. 그리고 0x8048731을 따라..