목록전체 글 (40)
syurhia 님의 블로그
"AI를 통해서 프롬프트를 만드는 것"을 시도해보는 프롬프트이다. 매번 사용할 때마다 프롬프트를 직접 만드는 건 너무 불편할 것 같다는 마음에 만들어보기 시작한다. 심심풀이겸 나에게 도움이 되길 바라며 조금씩 해보고 있다.사용 방법은 아래에 제공하는 프롬프트를 그냥 사용하면 된다. 프롬프트를 사용한 뒤, 일반적인 채팅처럼 내가 원하는 프롬프트를 요구(자세하게 요구할수록 좋다)하면, AI가 최적화된 프롬프트를 만들기 위해 질문을 할 것이다. 그러면 그 질문에 대답을 잘 해주면 된다. 그리고...따단! 프롬프트 완성이다. 편하지 않은가? 프롬프트 엔지니어링을 공부한 사람보다는 좀 떨어질수도 있겠지만, 일단 이거라도 써야지.. 아래로 갈수록 최신순이다.맨 처음에 프롬프트 엔지니어링이라는 개념을 알게 되었을 ..
1. File path traversal, simple case 2. File path traversal, traversal sequences blocked with absolute path bypass 3. File path traversal, traversal sequences stripped non-recursively 4. File path traversal, traversal sequences stripped with superfluous URL-decode 5. File path traversal, validation of start of path 6. File path traversal, validation of file extension with null byte bypass 7. File..
이번에는 개발자가 .png로 끝나는 파일명을 유저에게서 입력받았을 때만 검증을 받고 통과가 되는 코드를 짰을 때를 가정한 문제다.일명 널바이트 취약점인데(구버전 PHP 5.3미만 환경에서 주로 먹혔던 취약점이라고 한다.), %00이라는 널 바이트를 이용한다. 웹서버와 리눅스OS의 차이점에 의해 쓸 수 있는 공격기법인데, 웹서버는 보통 PHP나 Python, Java같은 고급 언어들을 사용한다. 얘네들은 문자열의 길이를 기억하는 방식으로 문자열을 관리한다. 즉, 문자열이 몇 바이트였는지 그 크기를 기억하는 것이다.리눅스는 C언어로 되어있는데, C언어뿐만 아니라 C++도 포함해서 문자열의 끝을 구분할 때 \0(NULL이다)이라는 특수 문자로 구별한다. 문자열의 크기는 모르고, NULL인지를 확인하는 것으로 ..
이번에는 base디렉터리가 고정되어있을 때 쓸 수 있는 방법이다.예시로 들면 출력할 파일명이 무조건 /var/www/html으로 시작해야 된다고 코드로 검증을 할 때, 공격자가 var/www/html/../../../etc/passwd와 같이 요청을 보내는 것으로 검증을 통과하고, 그 뒤에는 ../로 인해 /etc/passwd가 불러지는 방식이다. 문제를 보도록 하자.그림 1과 같은 웹사이트가 있다.path traversal취약점이 존재한다고 한다.이번에 학습한 내용을 토대로 취약점이 존재할테니 그림 1의 페이지 소스를 보도록 하자.그림 2가 그림 1의 페이지 소스이다.그림 2를 보면 이미지 태그가 있고 image라는 프로그램을 실행시키는데 filename이라는 변수를 쓰고 있으며, /var/www/im..
이번에는 상대경로와 절대경로를 전부 막아버리는 코드가 작성되어 있는 상황이다. 이 때, 사용 가능한 방법으로써 URL 인코딩이 있다. 웹서버에 GET으로 요청을 보낼 때 URL인코딩으로 보내면 웹서버에서는 자동으로 URL디코딩을 하게 되어있다. 즉, 인코딩을 한 번 해봤자 어차피 웹서버가 디코딩을 해주기 때문에 한 번 인코딩을 한 것으로는 공격에 성공할 수 없다. 그런데 이번 문제는 좀 특이하긴 하다.애플리케이션(아마도 Image라는 프로그램)이 Path Traversal시퀀스가 포함된 공격을 차단하는데(검증을 한다는 뜻), 검증이 끝난 후에 URL디코딩을 수행하고 이 값을 토대로 파일을 불러온다고 한다. 이럴 경우에 사용 가능한 공격 방법이다. 더보기애초에 왜 이런 구조로 코드를 짠다는 건지 이해가 ..
이번에는 절대경로가 통하지 않고, 상대경로 ../를 replace와 같은 방식으로 거를 때 우회하는 방법이다(while문으로 모든 ../를 거르지 않을 때). ../를 거르기 때문에 사용자가 ../../../../etc/passwd라는 값을 입력하게 되면 etc/passwd라는 값만 전하게 되어, /var/www/html/etc/passwd라는 파일을 OS가 찾으려는 시도를 하게 될 것이다.그러니, ....//와 같이 해놓는 식으로 우회하는 거다. 이렇게 하면 ../가 걸러져서 결국에는 ../가 남게 된다.....// => ../ (굵은 표시 한 게 사라진 결과 상대 경로만 남음.) 이를 해결하기 위해서는 while문으로 끝까지 전부 처리해줘야 한다. 근데 이거 말고도 다른 방어 방법은 있으니까 그건 ..
이번에는 개발자가 상대경로를 블랙리스트로 막아놨을 때, 우회하는 방법에 관한 내용이다.첫 번째 우회방법으로 절대경로를 이용한다. 이게 가능한 이유는 개발자가 유저에게 입력받은 경로랑, 자기가 적은 베이스 경로를 그냥 합치려고 할 때 생기는 성질때문이다.원리는 다음과 같다./var/www/html/file과 같은 디렉터리 뒤에 파일 이름을 사용자로부터 받는다고 가정해보자. 이 때, 사용자가 "///etc/passwd"와 같은 입력을 하면 특정 코드로 인해 /var/www/html/file와 ///etc/passwd를 합치려고 한다. 여기서 뒤의 값이 ///로 되어있기 때문에 합쳐주는 함수가 앞의 값인 /var/www/html/file을 다 버리고 /etc/passwd만 남긴다.(슬래시가 2개 이상 겹치는 ..
유저의 요청에 디렉터리 입력이 있을 때, 웹 서버의 파일 디렉토리에 접근이 가능한 path traversal(경로 조작)에 대해 알아보자. 백엔드로 파일 처리 함수로 들어가는 값을 적절히 처리하지 못하면 발생할 수 있는 취약점이다(보통 웹서버로 요청이 들어오면 그 요청 값을 파일처리 함수로 보내야 실제 파일을 받을 수 있으니까). 보통의 유저는 요청값을 변조하지 않기에 서버가 지정해준 파일만 열게 되겠지만, 공격자의 경우에는 서버에 보낼 요청값을 바꿔서 다른 파일을 불러오는 방식으로 공격이 이루어진다. 예를 들면 웹 사이트에서 흔히 볼 수 있는 파일을 보여주는 태그로써 와 같은 이미지 태그가 있지 않은가? 이 기능을 통해서도 서버의 설정파일들을 보내달라고 요청할 수도 있는 것이다. 대략적인 설명은 했으니..
서승완 지음 개인적으로 AI(챗지피티, 제미나이)를 쓸 때, 검색의 기능을 대신해서 사용해보자니 환각이 자주 발생하기도 했고, 설명을 하는 방식도 좀 불편하게 설명을 해주는 문제점이 있었다. 그래서, 프롬프트 엔지니어링이라는 걸 이용하면 환각 문제점과 내가 원하는 방식대로 설명을 할 수 있는지, 그리고 좀 더 전문적으로 내용을 작성해줄 수 있을까 싶었다.과거(2023년도) 책이라 그런지 최신과는 좀 동떨어져있긴 하지만, 엔지니어링 기법을 배우기에는 적합한 책이라고 생각되었다. 최신기법을 사용함에 있어서는 다른 책을 읽어볼 필요가 있다고 생각된다.이 책에서는 근본적으로 챗지피티를 쓸 때 적용 가능한 방법들을 얘기한다. 바드,클로드,...와 같은 LLM들에도 적용은 가능하지만 각각의 LLM들은 특성이 다르기..
아래 명령어로 MariaDB 설정 파일을 확인해보자. cat /etc/my.cnf.d/mariadb-server.cnf 그러면 MariaDB 설정 파일이 열린다.여기서 [mysqld]라는 문자를 찾아보자. 아래에 datadir, socket, log-error, pid-file등이 있을 것이다. 여기서 아래와 같이 한글 설정을 추가해준다.character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci 추가해준 뒤, MariaDB를 재시작해주자.sudo systemctl restart mariadb 그러면 이제 데이터베이스에 한글로 작성할 수 있게 된다.다만, 이전에 만들어준 데이터베이스는 여전히 옛날 인코딩(영어)를 유지하기 때문에 ..