분류 전체보기

[Webhacking.kr] old-48

문제 파일 업로드 기능이 있고, 정상적으로 파일이 올라가는 것을 확인할 수 있다. 웹쉘이 올라가는데, 값이 출력되지 않아서 이렇게 푸는 건 아닌 것 같다. Delete 버튼을 누르면 삭제가 되며 파라미터 mode, time에 각각 del과 시간이 전송되는 것을 볼 수 있다. 문제풀이 mode 파라미터에 del이 전송될 때, rm /upload/[파일명] 형태로 실행되어 삭제된다. 파일명을 조작하여 rm 명령어와 원하는 명령어를 실행할 수 있다. rm /upload/;ls burp suite로 filename을 ;ls로 조작하고 업로드시킨 후, Delete를 누르면 flag값을 확인할 수 있다.

[Webhacking.kr] old-47

문제 문제풀이 어떠한 값을 입력해도 결과는 같게 나온다. mail과 관련된 문제라는 것이 유일한 힌트이다. mail header injection을 통해 문제를 해결할 수 있을 것 같다. 이메일 헤더에 Cc(참조)나 Bcc(숨은참조)를 추가하면 공격자에게 메일을 보낼 수 있는 취약점을 이용한다. input 태그를 textarea 태그로 변경하고, 참조나 숨은참조를 이용하면 flag 값을 얻을 수 있다.

preg_match

설명 정규식이 일치하는지 수행한다. preg_match(string $pattern, string $subject, array $matches = null, int $flags=0, int $offset=0): int|false parameters pattern 검색할 패턴(문자열) subject 입력 문자열 matches 입력 문자열이 패턴과 일치하면, 검색된 결과가 배열 형태로 저장된다. flags PREG_OFFSET_CAPTURE : 모든 일치 항목에 대해 오프셋 단위를 배열로 반환 PREG_UNMATCHED_AS_NULL : 일치하지 않으면 null 값을 반환하고 그렇지 않으면 빈 문자열 반환 offset 시작 문자열 위치 지정 보통 처음부터 시작 pattern 검색할 패턴은 / 문자로 둘러싸여..

programming/php 2023.01.04

[Webhacking.kr] old-46

문제 SQL INJECTION level : view-source id가 admin일 때 문제가 해결된다. 문제풀이 lv=1부터 4까지는 정보가 나오며, 그 외에는 정보가 나오지 않는다. 공백, /, *, %, select, 0x 등 입력값에 대한 검증이 이루어진다. 이를 우회하여 아래와 같은 구문을 입력하면 문제가 해결된다. or 대신 ||, 작은따옴표 대신 char 함수, 2진수를 이용했다. select id,cash from chall46 where lv=0||id=char(97,100,109,105,110) select id,cash from chall46 where lv=0||id=0b0110000101100100011011010110100101101110

mb_convert_encoding

설명 mb_convert_encoding(array|string $string, string $to_encoding, array|string|null $from_encoding = null): array|string|false 문자열을 한 인코딩(from)에서 다른 인코딩(to)으로 변환 parameters string 변환할 문자열 또는 배열 to_encoding 변환할 인코딩 from_encoding 현재 인코딩 return 인코딩된 문자열 또는 배열 취약점 멀티바이트를 사용하는 utf-8 환경에서 %a1~%fe 값과 백슬래시(\)에 해당하는 %5c가 합쳐져서 하나의 문자를 나타내게 된다. %a1~%fe으로 magic_quotes_gpc 옵션 우회 가능하다.

programming/php 2023.01.02

magic_quotes_gpc

php.ini 파일에 작성되어 있는 설정값 디폴트는 on이며, 자동적으로 모든 GET, POST, COOKIE 데이터에 addslashes() 처리 사용자 입력 값에 쿼리를 조작하기 위한 ', %27 등이 있을 경우, 이를 백슬래시(\) 처리하여 공격을 방지한다. +우회 멀티바이트를 사용하는 언어셋(utf-8) 환경에서는 백슬래시(\) 앞에 %a1~%fe 값이 들어오면 해당 값과 백슬래시(\)에 해당하는 %5c가 합쳐져서 하나의 문자를 나타내게 된다.

programming/php 2023.01.02