본문 바로가기

2. Information Security37

9. 다운로드 공격 1. apache 설정 - Options Indexes FollowSymLinks MultiViews 2020. 2. 13.
8. 업로드 공격 우회 1. .htaccess 파일 업로드 (아파치 디렉토리 권한 설정 파일 -> 디렉토리 내 존재 시 적용) - png 파일 스크립트 허용 처리 AddHandler php7-script .php .png AddType text/html .php .png - php 파일 읽기 php_flag_engine off 2. 확장자 대소문자 변경 php -> PhP 3. 이중 확장자 - webshell.php.suspected -> 실행시 webshell.php로 실행됨 - 검증 시 우측부터 실행 시 좌측부터 수행하기 때문 - 블랙리스트 기반 필터링 시 사용, 화이트리스트 기반 필터링 시 무용 4. test.php%00.jpg (취약한 버전에서 동작) 5. png, jpg 파일 내 코드 삽입 -> 해당 디렉토리 실행 권.. 2020. 2. 13.
7. Filtering 우회 2 1) MySQL syntax - MySQL은 상당히 말랑말랑한 문법체계를 가지고 있다. 무슨말인고 하니 SeLeCT와 같이 Keyword는 대소문자를 구분하지않고 select * from users와 같은 query도 공백을 필터링하는경우 %0a같은 delimiter를 쓸수 있고 또한 select(*)from(users); 와같이 공백이 필요한 부분에 ()를 감싸는것도 적법한 문장이다. 이러한 MySQL의 특성을 이용해 여러가지 필터링을 우회 할 수 있습니다. 2) Keyword Filter - 인젝션을 가능케 하는 여러가지 키워드 (union, select, limit, having, like) 등등의 필터링은 인젝션을 얼핏 봐서는 불가능하게 만든다. 이런경우에 mysql내 다양한 내장함수들을 사용함으.. 2020. 2. 13.
6. Filtering 우회 1. Preg_match 우회 - \ : \ 앞에 오는 문자의 경우 특수문자가 아닌 일반문자로 처리하게 됨 - preg_match('/'/'); 여기서 ' 문자를 필터링 함 - www.example.com?id=admin&pw=test 폼에서 인젝션 공격을 수행한다고 하면 - www.example.com?id=\&pw=or+1=1# 이런식으로 공격하면 되는데 - $_GET['id'] = \ / $_GET['pw'] = or+1=1# - 쿼리를 살펴보면 아래와 같다 - 정상쿼리 : select id from userdb where id='admin' and pw='test'; - 공격쿼리 : select id from userdb where id='\' and pw=' or 1=1#' 2. 공백우회 - /.. 2020. 2. 11.
5. Filtering 우회 = LIKE, >, 한 줄 주석 /**/ => 여러 줄 주석 #, --과 같은 한 줄 범위 주석 우회 \n (라인피드, %0A) %20 (스페이스바) %0A, %0B, %0C, %0D, %09, /**/, () ' (싱글 쿼터) " (더블 쿼터) ' (싱글 쿼터) 우회 \를 사용하여 문자열 취급을 시켜줌 (preg_match 우회 가능) ereg, eregi 우회 %00 후 문자열 작성 (why? ereg, eregi는 %00까지 패턴 검색) str_replace('abc','',$array) 우회 ababcc와 같이 빈 칸을 이용해 우회 ereg 우회 대소문자 적절히 섞기 -> admin이면 ADMIN, Admin 등 and, or 각각 &&, || (url에서 &&는 사용 X) 문자열 비교 hex().. 2020. 2. 5.
웹해킹 26번 (webhacking.kr old 26) 1. 취약점 환경 : PHP 2. Write Up 2020. 2. 5.
4. SQL INJECTION CHEAT SHEET (SQL 인젝션 치트 시트) 1. Error Based SQL InjectionHaving Error (This Column Name)- www.test.com/?no=1' having 1=1 #- www.test.com/?no=(1)having(1)in(1) Group by Having Error (Another Column Name)- www.test.com/?no=1' having 1=1-- (Column name)- www.test.com/?no=1' group by no having 1=1# -> name column error- www.test.com/?no=1' group by no, name having 1=1# -> code column erorr- www.test.com/?no=1' group by no, name.. 2020. 2. 4.
웹해킹 13번 (webhacking.kr old 13) 1. 공격유형 : Blind Sql Injection 2. Write Up 이 문제는 이번에 old 버전으로 리뉴얼 되었는데 공격 포인트를 정리해보자면 Ascii, Limit, having, group by, union, +, group_concat 등의 구문이 차단되어 있고 컬럼, 테이블 정보를 모르는 환경에서 "Blind Sql Injection"을 기반으로하는 "ord, concat" 구문을 조합 공격으로 해결 가능한 문제였다. 기존에는 Ascii 문자가 필터링되었을때 chr("문자") 등의 방식으로 바로 비교했었던 경험으로 동일하게 시도했지만 000000000 등의 숫자만 결과로 보여주어 이부분을 찾는데 조금 애를 먹었다. Ascii의 대안인 ord 기능이 있다는 것을 알고 적용했을때 문제를 해결.. 2020. 1. 30.
웹해킹 24번 (webhacking.kr old 24) 1. 공격유형 : PHP 함수 2. Write up 😊 코드분석 - extract 함수 : 이 함수는 array 변수 내에 존재하는 각각의 데이터를 변수화 시켜준다. - 그림에서 eTest Array 변수를 생성하여 출력한뒤 extract로 변환하면 우측과 같은 결과가 나타나는데 이는 연관 배열 형태의 변수가 extract에 의하여 개별 변수로 이용 가능한 것을 확인할 수 있다. - 즉 eTest 변수 내의 'test'를 출력할 때 기존 echo $eTest['test']에서 echo $test가 되는 것이다. - 이후 $ip, $agent 변수에 각각의 값을 지정해 준다 (extract 함수를 안썼다면 $ip= $_SERVER['REMOTE_ADDR'] 이런식으로 지정을 해야하지만 $REMOTE_ADD.. 2020. 1. 19.