Red Team/프로젝트 관련

정보보안 스터디 - 27주차 4일 - AJAX, XXE, SSRF 예제

wonder12 2023. 4. 17. 03:13

 

 

☞ 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 , "&lt;");
}

 

 

 

 

 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이 더 보기좋습니다.