개발 꿀팁/PHP

php 보안 및 취약성

Jammie 2022. 11. 2. 13:17
반응형

세션과 쿠키
쿠키 사용 안 함, url sessionId 지참
nocookie.php

<?php
// ini_set php.ini 설정 항목 수정
ini_set('session.use_cookies',0)
ini_set('session.use_only_cookies',0)
ini_set('session.use_trans_sid',1);
ini_set('session.name', 'sid');

session_start( )
$_SESSION['user'] = array('uid'=>1);

echo '<ahref="session_url.php">url을 사용하여 sessionId</a>;

session_url.php

<?php

// session 값
ini_set('session.use_cookies',0)
ini_set('session.use_only_cookies',0)
ini_set('session.use_trans_sid',1);
ini_set('session.name', 'sid');

$sess_name = session_name( );
session_start( )
print_r($_SESSION['user'])

session fixation 공격
해커가 sessionid를 얻기 위해 웹사이트를 방문하다
페이지 지향점을 위조한다고요?sid=sessionid, 사용자 계정 비밀번호 입력
해커는 로그인 성공 sessionid 획득, 다른 작업 완료
[솔루션] 로그인이 완료되면 sessionid 다시 쓰기
세션 유지
공격자가 sessionId를 획득하여 성공적으로 시스템에 진입하고 타이머를 다르게 설정하여 페이지를 새로 고침으로써 session을 항상 유효하게 한다
[솔루션] 서비스 측에서 session을 저장하지 않고 사용자 정보를 로컬 쿠키에 저장하며, 쿠키 평문 저장소는 공개키를 배포하여 클라이언트에 암호화할 수 있기 때문에 서비스 측에서 개인키를 사용하여 암호를 해독합니다.
파일에 취약점 포함

include
require
fopen
readfile
...

사례 1
/subfiles/a.php

<?php
echo 'a.php';

/subfiles/b.php

 

<?php
echo 'b.php';

/subfiles/ab.php.jpg

<?php
phpinfo();

upload.php

<?php
$path = $_GET['path'];

include('/subfiles/'.$path);

ab.php.jpg php 파일 jpg 접미사를 업로드하는 것은 사진을 업로드하기 위한 접미사 검사입니다.
마지막으로 서버 정보 얻기
사례 2
웹 사이트 루트 디렉터리가 아닌 파일

upload.php

<?php
$path = $_GET['path'];
include($path);

원격 파일 포함 (위험)
php.ini allow_url_include = on
해결방안

사용자가 include와 같은 파일 포함 함수를 직접 사용하지 않도록 하기

 

반응형