sql string轉為日期 SQL注入基本原理

2021-10-11 03:26:07 字數 2827 閱讀 9683

web技術發展日新月異,但是徒手拼sql的傳統手藝還是受相當多的開發者親睞。畢竟相比於再去學習一套複雜的orm規則,手拼更說方便,直觀。通常自己拼sql的人,應該是有聽說過sql注入很危險,但是總是心想:我的sql語句這麼簡單,不可能被注入的。

有乙個web介面提供輸入商品名稱,展示對應**,生產日期及生產地資訊。例如輸入hammer展示:

我們跳過了搭建web搜尋介面的過程,直接關注重點部分:sql注入

如果要實現以上功能,那麼我們大致可以猜到伺服器使用的sql語句如下:

select ? from ? where ? like '%hammer%';
其中?表示目前我們並不知道具體的表名和欄位名,此sql唯一可以被操縱的就是單引號裡面的輸入內容'%hammer%。假如我們直接在查詢框裡輸入乙個單引號。即變成

select ? from ? where ? like '%'%';
這樣拼接後造成sql語法錯誤,得不到任何結果,我們需要使用--來把最後乙個單引號注釋掉。

select ? from ? where ? like '%'; -- %';
*注意第二個單引號是我們自己加的,原有的單引號在句未,已被我們注釋掉啦*。

--後的是注釋內容(你也可以用#),這樣你可以得到所有的產品資訊,目前為止,還是沒有嗅到危險的訊號。

緊緊抓住上一步中可以擴充套件的單引號部分。來乙個簡單的延時語句試一試:

select ? from ? where ? like '%hammer%' 

and 1 = sleep(2); -- %';

這時查詢會2秒後才返回結果,如果把時間延長,用指令碼多點幾次查詢,一下就能把資料庫的連線池用完。

當然,還有破壞力更強的!

select ? from ? where ? like '%hammer%'; 

drop table ***x; -- %';

可以直接把錶/資料庫直接刪除掉,至於如何知道引資料庫中有哪一些表(即如何確定上句sql中的***x)呢?

我們需要知道此資料庫有哪一些表!這樣才能能拿到有用的資訊。

使用union可以把不同表的內容拼在一起,小試一下:

select ?,?,?,? from ? where ? like '%hammer%' union 

(select 1,2,3,4 from dual); -- %';

可以看到我們把假資料1,2,3,4成功地拼接到搜尋結果中。

mysql系統自帶的資訊都存在information_schema資料庫中。我們試著在裡面找找有用的資訊。

現在知道了這些資料庫名和表名,所有人都對它為所欲為了!(包括上面執行的drop)。

看著列表一猜就能知道我們目前查的是products表,接下來我們再把products具體的字段也挖出來。

所以,通過上面2步,我們知道了表名和欄位名,那麼查詢api的完整sql應該是(把上面的?都補全啦):

select name,price,address,updated_at 

from products

where name like '%hammer%';

通過不斷重複以上幾個步驟,你就可以通過這乙個小小的入口把資料庫的所有資訊(比如上面發現的user表 )都翻個遍。

注意:以上都是在自己的機器上嘗試的,千萬不要越界去hack別人家的伺服器!

如果你sql注入想要更深入/系統的學習,可以使用當然你可以自己本地搭建dvwa,或挑戰hackme-sql-injection-challenges。

github存檔:

sql注入基本原理​notes.tried.cc

php字串轉為日期格式,日期格式轉為字串

strtotime 函式將任何字串的日期時間描述解析為 unix 時間戳 自 january 1 1970 00 00 00 gmt 起的秒數 列印當前時間 php eol 換行符,相容不同系統 將指定日期轉成時間戳,例如 20190813121721 echo strtotime 20190813...

CString日期如何轉為CTime

假設該 cstring 中的結構為 04d年 02d月 02d日 則 cstring timestr 2000年04月05日 int year,month,day byte tt 5 get year memset tt,0,sizeof tt tt 0 timestr 0 tt 1 timestr...

Android日期格式轉換(將日期轉為週期)

最近自己的專案中遇到乙個需求,需要將標準的日yyyy mm dd轉換為具體的週期,即星期幾。通過查詢資料發現,android中已經為我們提供了強大的日期工具calendar類,我們可以通過該類就能快速實現日期之間的轉化。這裡,我已經將其封裝成了乙個工具類,並提供類漢 英兩種週期格式的轉化 creat...