LFI/RFI
Осы сыныптың осалдықтары браузер арқылы шабуылдаушыларға веб-қосымшадан жауап ретінде серверде жергілікті және Жойылған файлдарды қосуға мүмкіндік береді. Бұл алшақтық шабуылдаушы басқара алатын, path traversal типті таңбаларды енгізе алатын және веб-серверден басқа файлдарды қоса алатын дұрыс кіріс өңдеу болмаған жерде болады.
http://example.com/?search=/../../../../../../etc/passwd
JSON және XML арқылы шабуылдар
JSON немесе XML форматындағы сұрауларды өңдейтін Веб-қосымшалар мен API-лер де шабуылға ұшырайды, өйткені мұндай форматтардың кемшіліктері бар.
JSON (JavaScript Object Notation) — бұл қосымшалар арасындағы байланыс үшін қолданылатын жеңіл деректер алмасу форматы. Бұл XML-ге ұқсас, бірақ JavaScript көмегімен өңдеуге оңай және жақсы. Көптеген веб-қосымшалар бұл форматты деректермен алмасу және деректерді сериялау / десериализациялау үшін пайдаланады. Кейбір веб-қосымшалар JSON -. пайдаланушы деректері сияқты маңызды ақпаратты сақтау үшін пайдаланады. Әдетте RESTful API және AJAX қосымшаларында қолданылады.
JSON көбінесе API-мен байланысты, дегенмен, тіпті қарапайым және танымал веб-қосымшаларда жиі қолданылады. Мысалы, WordPress - те Материалдарды өңдеу JSON форматында сұраныстар жіберу арқылы жүзеге асырылады:
POST /index.php?rest_route=%2Fwp%2Fv2%2Fposts%2F12&_locale=user HTTP/1.1
Host: wordpress.example.com
...
% Басқа тақырыптар%
...
{"id":12,"title":"test title","content":"test body","status":"publish"}
Сервер жағында қарапайым JSON инъекциясын PHP де келесідей жасауға болады:
Сервер пайдаланушы деректерін JSON жолы ретінде, соның ішінде тіркелгі түрін сақтайды;
Пайдаланушы аты мен құпия сөз тазартусыз тікелей пайдаланушы енгізуінен алынады;
JSON жолы қарапайым біріктіру арқылы жасалады: $json_string = '{"account":"user","user":"'.$_GET['user'].'","pass":"'.$_GET[' ass'].'"}'
Шабуылдаушы пайдаланушы атына деректерді қосады: john%22,%22account%22:%22administrator%22
{
"account":"user",
"user":"john",
"account":"administrator",
"pass":"password"
}
Сақталған жолды оқығанда JSON талдаушысы (json_decode) екі есептік жазбаны анықтайды және John пайдаланушысына әкімші құқығын беру арқылы соңғысын алады.
Клиент жағында қарапайым JSON инъекциясын келесідей жасауға болады:
JSON жолы жоғарыдағы мысалдағыдай;
Сервер сенімсіз көзден JSON жолын алады;
Клиент JSON жолын eval көмегімен талдайды:
var result = eval("(" + json_string + ")");
document.getElementById("#account").innerText = result.account;
document.getElementById("#user").innerText = result.name;
document.getElementById("#pass").innerText = result.pass;
Account мәні: user"});alert(document.cookie);({"account":"user
Eval функциясы alert орындайды;
Орындау XSS-ке және құжатты алуға әкеледі.cookie.
XML
XXe қолданатын шабуылдаушы үшін басты мәселе-XML тәрізді мазмұны бар мәтіндік файлдарға қалай қол жеткізуге болады (",',<, >сияқты арнайы XML таңбалары бар файлдар). XML-де бұл мәселені шешудің жолы бар. Егер XML файлдарында арнайы XML таңбаларын сақтау қажет болса, оларды XML анализаторы елемейтін CDATA (символдық деректер) тегтеріне қоюға болады:
characters are ok in here ]]>
Енді шабуылдаушы символдық деректерді пайдаланып сұрау жіберуге тырысуы мүмкін. Бірақ бұл жұмыс істемейді, өйткені XML спецификациясы сыртқы нысандарды ішкі нысандармен біріктіруге мүмкіндік бермейді. Сондықтан төмендегі мысал көрсетілгендей жұмыс істемейді.
Сұрау:
POST http://example.com/xml HTTP/1.1
"file:///etc/fstab">
">
]>
&all;
Күтілетін жауап:
HTTP/1.0 200 OK
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
# / was on /dev/sda1 during installation
UUID=1b83709b-6d53-4987-aba9-72e33873cf61 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=4ffcddd4-6b04-4bff-bd21-bf0dae4e373f none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
Достарыңызбен бөлісу: |