Study/Web
-
[MongoDB] ObjectId 란?Study/Web 2021. 6. 27. 16:51
ObjectId 란? MongoDB는 Document 기반 데이터베이스인데, ObjectId는 해당 Document 내에서 유일함을 보장하는 12byte 값으로, RDBMS의 Primary key와 같다. Primary key는 DBMS가 부여하지만, ObjectId는 클라이언트에서 생성한다는 점이 차이가 있다. ObjectId 구조 Inc Counter은 처음 랜덤한 값에서 자동으로 Increment 되는 값이다. Reference https://docs.mongodb.com/manual/reference/method/ObjectId/ ObjectId — MongoDB Manual Reference > mongo Shell Methods > Object Constructors and Methods Ob..
-
[HTTP] Basic Authentication _ .htpasswdStudy/Web 2021. 3. 8. 15:07
.htpasswd 파일 이란? 서버의 특정 디렉토리에 HTTP Basic Authentication을 설정하여 접근 제한할 때 필요한 파일로 사용자명과 패스워드에 대한 정보를 저장하고 있는 파일이다. [참고] https://en.wikipedia.org/wiki/.htpasswd .htpasswd 형식 grini:$1$0FP4wdQ8$nC4xODrh4cGLHQ8Vkmpzk1 계정ID:$해시 알고리즘 종류$솔트 값$해시된 패스워드 값 [참고] - foswiki.org/Development/ImproveHtPaswdUserFlexibility - httpd.apache.org/docs/current/misc/password_encryptions.html .htpasswd 생성 방법 1. apache2-uti..
-
[HTTP] Header : X-Forwarded-For (XFF)Study/Web 2021. 2. 9. 03:29
X-Forwarded-For (XFF)는 HTTP Proxy (또는 Load Balancers, Caching Server) 등을 통해 웹 서버에 접속하는 클라이언트의 IP 주소를 식별하기 위한 사실상 표준 헤더이다. (표준화된 버전은 HTTP Forwarded Header이다.) 웹 서버(또는 WAS)와 클라이언트 사이에 Proxy Server (또는 Load Balancers, Caching Server) 등의 장비가 있는 경우, 서버 접근 로그는 Proxy Server의 IP만 갖고 있기 때문에 Proxy Server의 IP를 요청한 IP로 인식하게 된다. 이때, X-Forwarded-For 헤더를 통해 웹 프로그램이 실제 요청한 클라이언트의 IP를 파악할 수 있다. [문법] X-Forwarded-..
-
[PHP] WAF Bypass : Non-Alphabets CodeStudy/Web 2021. 1. 11. 17:55
웹 서버의 권한을 얻기 위해 웹 쉘을 이용하는 경우가 많다. 이때, 해당 WAF에서 RCE를 유발할 수 있는 문자를 포함한 코드를 차단한다. RCE를 유발할 수 있는 코드의 예시를 들자면, 아래의 코드와 같이 원하는 인자로 원하는 함수를 실행할 수 있는 코드이다. 해당 코드에서 원하는 함수를 실행할 수 있는 이유는 PHP에서는 가변 함수의 개념을 지원하여 변수나 문자열을 이용하여 함수를 호출할 수 있기 때문이다. PHP 실행 함수 - system() - shell_exec() - eval() - exec() - passthru - etc... 공격자 마음대로 함수를 실행할 수 있다면 보안상 위험하기 때문에 아래 코드와 같이 특정 함수 이름 등을 필터링하여 방어할 수 있다. 이러한 필터링을 우회하기 위해서..
-
PHP 입력 길이 제한 우회Study/Web 2021. 1. 9. 01:48
# TetCTF 2021 _ HPNY (문제 참고) 해당 문제는 Command Injection 문제로, 읽어야하는 파일 이름의 길이가 'fl4g_here_but_can_you_get_it_hohoho.php' 로 상당히 길다. 그러나, 입력 값은 50미만으로 길이가 제한되어 있기 때문에 파일 이름을 그대로 입력할 수 없는 문제이다. 해당 부분의 소스 코드는 아래와 같다. $wl = preg_match('/^[a-z\(\)\_\.]+$/i', $_GET["roll"]); if($wl === 0 || strlen($_GET["roll"]) > 50) { die("bumbadum badum"); } eval("echo ".$_GET["roll"]."();"); 길이 제한을 우회하여 Flag를 얻기 위해서는 ..