[PHP] Non alphanumeric code

[PHP] Non alphanumeric code TL;DR PHP의 가변 함수와  bit 연산자로 alphabet 없이 함수를 실행 시킨다. 1. alphabet이 아닌 문자열을 변수에 넣는다. 2. bit연산자를 통해 원하는 문자열의 bit 값으로 바꾸어 준다. 3. 가변 함수를 사용해 함수를 실행 시킨다. <?php if (isset($_GET[‘eval’])) { if (preg_match(‘/[a-z]/i’, $_GET[‘eval’])) { die(‘No ALPHABET!!!!’); } else { eval(‘echo ‘.$_GET[‘eval’].’;’); } } 조건 …

[phpTrick] array === array compare bypass(?) (<5.5.9)

php Array === Array compare bug Example Code <?php $arr = [‘admin’, ‘password’]; $auth = $_GET[‘auth’]; if( $arr === $auth && $auth[0] != ‘admin’){ echo ‘Hello admin!’; } else { echo ‘login plz’; } 위와 같은 코드가 있을 때, 2번째 줄 $arr의 0번째인자가 admin으로 박혀있고, 3번째 줄에선 $auth와 $arr의 키/값 순서까지 일치해야 true여야하고(identity), $auth[0]이 admin이 …

[phpTrick] php safe_mode bypass vulnerability (< 5.1.6, <4.4 )

php safe_mode bypass (<5.1.6, <4.4) Normal Example //localhost/download.php?dir=path/file.jpg와 같은 파일을 다운 받게 하는 페이지가 존재할 때, LFI를 통해 서버의 파일을 다운받으려고 할 때 //localhost/download.php?dir=../../../../../../etc/passwd와 같은 쿼리를 날리게 되면 Warning: fopen(/some/path/../../../../../../etc/passwd) [function.fopen]: failed to open stream: Permission denied in /var/www/html/download.php on line 1 Safe mode 가 활성화 되어있기 때문에 다운로드가 불가능하다. Bypass Example 이때 //localhost/download.php?dir=../../../../../../etc/passwd/./처럼 자기 자신의 파일을 …

[SQL injection] get unknown Column’s data

SQL injection_ get unknown Column’s data “SELECT * FROM Table WHERE …” 위처럼 Column의 이름을 알지 못할 경우 해당 information_schema의 Column 테이블에서 가져와야 한다. 하지만 information_schema가 막힌경우 Column의 이름을 알 수 가 없다.  그러나 이번 글에서 이름을 알지 못하는 Column의 정보를 가져오는 방법을 알아보자 Concept 일반적인 SQLi 경우 컬럼의 정보를 얻기 위해 information_schema.columns 에서 가져 …

SQL Injection using User Defined Variable

SQL Injection using User Defined Variable 사용자 정의 변수를 이용한 SQL injection 기법(거의 문제 풀이용…) Syntax[refer] SELECT @UDV := ‘String’, @UDV := Numeric   OR SET @UDV := ‘String’ SELECT * FROM Table WHERE ‘Column’=@UDV MySQL에선 “사용자 정의 변수“를 지원한다. 기본적인 문법은 “@변수명“이고 “:= 값“연산자로 변수에 값을 넣을 수 있다. 하지만 이 변수 선언이 WHERE절 에서도 …

Efficient Blind SQL injection

Efficient Blind SQL injection Efficient Blind SQL injection 즉, 효율적인 블라인드 SQLi란 말 그대로 효율을 극대화한 블라인드 SQLi이다. 기존 Blind SQLi는 한 글자를 알아내기위해최대(big-O)26번이고 만약 대소문자를 구분한다면 26*2인 52번의 공격 시도를 해야한다. 하지만 Efficient Blind SQLi는 문자를 2진수로 바꾸어 최대(big-O)7번의 시도만으로 한 글자를 알아 낼 수 있다. 개념 설명 MySQL의 경우 bin() 이라는 함수가 존재한다. 이 함수는 …

[Vulnerability of PHP Function] extract()

Extract($_POST) or ($_GET)[php.net] PHP에서 Extract()함수를  사용함에 있어서 발생할 수 있는 위험성을 알아본다. Extract() 함수 Extract($_GET)과 같이 선언 될 경우 $_GET[id]가 의미하는 바와 $id가 의미하는 바가 같아진다.   서버 사이드 변수 조작(holyshield_CTF) <?php $up=”abc”; extract($_GET); $down=”efg”; echo “u p : $up<br>”; echo “down: $down”; ?> 위와 소스코드와 같은 경우 extract 함수 위에 선언된 변수($up)의 경우 사용자 마음대로 …