본문 바로가기

컴터 때찌/E​xperience

SQL injection을 방지하는 위해 사용하는 두가지 방법

php에서 mysql을 이용해서 ip/pw를 불러 올때 일반적으로 아래와 같이 사용한다

$result=mysql_query("select leo from jin where id='$_GET[id]' and pw='$_GET[pw]'"));

그리고 기본적인 SQL injection 공격은 ' or 1=1# 와 같이 이루어진다

그러면 우리의 쿼리는

$result=mysql_query("select leo from jin where id='' or 1=1# and pw='$_GET[pw]'"));

이런식으로 들어 가서 1=1으로 참이 되고
mysql 의 주석인 #이 뒷부분을 주석 처리 하게 되서 우회 하게 되는 것이다

결국 single quotes가 문제가 되는 건데 이런 쿼터를 방지 하는 두가지 방법이 있다

첫번째는 addslashed() function을 사용하거나, 해당 함수기능이 포함되어 있는 함수를 사용하는 것이다
addslashed 함수는 /(slash)를 ' (quotes) 앞에 넣어서 쿼터의 기능을 잃어 버리게한다
사용방법은
$id = addslashed('$_GET[id]');
$pw = addslashed('$_GET[pw]');
$result=mysql_query("select leo from jin where id='$id' and pw='$pw'"));
이런식으로 사용하면 된다.

다른 방법은 magic_quotes_gpc 옵션을 사용하는 것이다.
php.ini 에 해당 옵션을 On 하면 이것도 single quotes와 double quotes 앞에 backslash를 넣어서 quotes가 효과 없게 한다.


하지만 이 두가지 방법도 우회 하는 방법이 있으니..으흐?
bypass addslashed =>  http://leopardan.kr/57

'컴터 때찌 > E​xperience' 카테고리의 다른 글

About Ubuntu  (1) 2010.11.03
Local File Inclusion&Remote File Inclusion  (0) 2010.10.20
mysql table 보기  (2) 2010.09.15
addslashed() 함수 우회법  (1) 2010.09.13
위키 백과 [ Hotspot ]  (0) 2010.06.22