<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
libinjection是一款用於防禦SQL隱碼攻擊的開源軟體庫。它是由C語言編寫的,可以嵌入到任何Web應用程式中,並可以較為準確地檢測和防止惡意SQL隱碼攻擊語句。libinjection採用了基於正規表示式的技術來識別和攔截SQL隱碼攻擊,同時其開放原始碼的特點也使得其具備了較高的可客製化性和擴充套件性。
libinjection是一個基於C語言的SQLi詞法解析分析器,它可以通過對不同語句進行詞法分析和語法分析來實現對SQL語句以及HTML語句的解析。
在此之前,市場上絕大多數的WAF都是基於正則匹配(Regex)的,很多的WAF(防火牆)以及NGWAF(下一代防火牆)出於效能方面的考慮,都會選擇使用這個庫來代替常規的正規表示式。
ModSecurity,它是Apache和nginx的流行WAF。ModSecurity捆綁了libinjection,mod_security從2.7.4版本開始就支援libinjection(dectectSQLi-v2.7.4、detectXSS-v2.8.0)。
libinjection和正規表示式都是非常有效的防禦SQL隱碼攻擊的技術,但兩者之間有一些差異和優劣。
libinjection
libinjection是一個專門用於檢測SQL隱碼攻擊的庫,其使用了一個基於機器學習的演演算法來分析請求中的SQL語句。與正規表示式相比,它有以下優點:
正規表示式
正規表示式是一種常見的用於檢測和防禦各種Web應用程式攻擊(包括SQL隱碼攻擊)的技術。與libinjection相比,它有以下優點:
更通用:正規表示式不僅可用於檢測SQL隱碼攻擊,而且還可用於檢測其他型別的Web應用程式攻擊。更靈活:正規表示式可以使用各種模式和操作符,從而可以靈活地處理各種複雜情況。更可設定性:正規表示式的規則庫可以根據實際情況進行客製化和設定。
總體而言,libinjection可能比正規表示式更準確,更容易維護,並具有更快的效能,但正規表示式更通用,更靈活,具有更高的可設定性。因此,為了獲得最佳的安全效能,您可能需要考慮同時使用這兩種技術。
下面是使用libinjection和ModSecurity進行SQL隱碼攻擊檢測和預防的步驟:
安裝ModSecurity
安裝並設定ModSecurity,使其可以與您的Web伺服器一起使用。
安裝libinjection
安裝libinjection並將其與ModSecurity整合。如果您使用的是Debian或Ubuntu,可以使用以下命令進行安裝:
sudo apt-get install libinjection-dev
在ModSecurity中使用libinjection
將ModSecurity設定為使用libinjection來檢測SQL隱碼攻擊。以下是一個範例ModSecurity規則,可用於檢測SQL隱碼攻擊:
SecRule ARGS "@detectSQLi" "id:1, phase:2, t:none, t:lowercase, t:replaceComments, t:compressWhitespace, ctl:auditLogParts=+E, ctl:debugLogParts=+E, ctl:requestBodyProcessor=XML, ctl:ruleEngine=on, ctl:auditEngine=on, ctl:ruleRemoveByTag=abcd ctl:ruleRemoveById=1 libinjection_check" SecRule &TX:INJECTION @eq 1 "id:2, phase:2, t:none, ctl:auditLogParts=+E, ctl:debugLogParts=+E, ctl:requestBodyProcessor=XML, ctl:ruleEngine=on, ctl:auditEngine=On, ctl:ruleRemoveByTag=abcd ctl:ruleRemoveById=2 block"
這個規則中包含了兩個SecRule。第一個將對輸入請求進行規範化和過濾,然後使用libinjection檢測SQL隱碼攻擊。第二個SecRule將根據檢測結果來做出相應的動作,例如阻止存取請求或將其記錄在紀錄檔中。
ModSecurity不僅使用了libinjection,還使用了正規表示式等多種技術來進行SQL隱碼攻擊防禦。實際上,在ModSecurity中使用正規表示式是非常常見的一種方法,因為這種方法可以用於檢測和阻止各種型別的Web應用程式攻擊,包括SQL隱碼攻擊。
以下是一個範例ModSecurity規則,使用正規表示式檢測SQL隱碼攻擊:
SecRule ARGS "@detectSQLi" "id:1, phase:2, t:none, t:lowercase, t:replaceComments, t:compressWhitespace, ctl:auditLogParts=+E, ctl:debugLogParts=+E, ctl:requestBodyProcessor=XML, ctl:ruleEngine=on, ctl:auditEngine=on, ctl:ruleRemoveByTag=abcd ctl:ruleRemoveById=1 libinjection_check" SecRule &TX:INJECTION @eq 1 "id:2, phase:2, t:none, ctl:auditLogParts=+E, ctl:debugLogParts=+E, ctl:requestBodyProcessor=XML, ctl:ruleEngine=on, ctl:auditEngine=On, ctl:ruleRemoveByTag=abcd ctl:ruleRemoveById=2 block"
雖然語意分析引擎能夠更準確地識別和阻止惡意流量,但是正規表示式仍然是一種非常重要的檢測方式,可以用來完成一些特定的任務。
例如,對於某些規則化的資料格式,如郵件地址、電話號碼和身份證號碼等,使用正規表示式可以快速、準確地進行匹配判斷。此外,正規表示式還可以用來檢測各種型別的注入攻擊(如SQL隱碼攻擊和XSS攻擊)等漏洞利用行為。
因此,在實際的安全防禦中,WAF通常會同時採用多種技術手段,包括語意分析引擎和正規表示式等,以提高其檢測能力,並最大程度地保護Web應用程式免受攻擊威脅。
多年以來,WAF對攻擊的檢測,通常使用正規表示式,典型的如ModSecurity。作為老牌的WAF,其擁有龐大的正則規則庫。其檢測率高,但也正因為規則數量龐大,正則逐一匹配,此過程速度慢,效能低。
對於同步檢測的WAF產品,部署並對網站提供防護後,會帶來不小的存取效能影響。
新興的WAF產品,漸有使用語意分析引擎取代正規表示式檢測。
其優勢究竟何在,效能又能提升多少?
WAF研發領域,語意分析相對於正規表示式先進性的研究
直接檢視原文連結: https://www.toutiao.com/article/6944906084217799207/
libinjection架構和使用
官方使用範例
#include <stdio.h> #include <string.h> #include "libinjection.h" int main(int argc, const char* argv[]) { char fingerprint[8]; const char* input; size_t slen; int issqli; if (argc < 2) { fprintf(stderr, "Usage: %s inputstringn", argv[0]); return -1; } input = argv[1]; slen = strlen(input); issqli = libinjection_sqli(input, slen, fingerprint); if (issqli) { printf("sqli with fingerprint of '%s'n", fingerprint); } else { printf("not sqlin"); } return issqli; }
具體的檢查sql注入實現為 libinjection_is_sqli
:
int libinjection_is_sqli(struct libinjection_sqli_state * sql_state) { const char *s = sql_state->s; size_t slen = sql_state->slen; /* * no input? not SQLi */ if (slen == 0) { return FALSE; } /* * test input "as-is" */ libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_NONE | FLAG_SQL_ANSI); if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, sql_state->fingerprint, strlen(sql_state->fingerprint))) { return TRUE; } else if (reparse_as_mysql(sql_state)) { libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_NONE | FLAG_SQL_MYSQL); if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, sql_state->fingerprint, strlen(sql_state->fingerprint))) { return TRUE; } } /* * if input has a single_quote, then * test as if input was actually ' * example: if input if "1' = 1", then pretend it's * "'1' = 1" * Porting Notes: example the same as doing * is_string_sqli(sql_state, "'" + s, slen+1, NULL, fn, arg) * */ if (memchr(s, CHAR_SINGLE, slen)) { libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_SINGLE | FLAG_SQL_ANSI); if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, sql_state->fingerprint, strlen(sql_state->fingerprint))) { return TRUE; } else if (reparse_as_mysql(sql_state)) { libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_SINGLE | FLAG_SQL_MYSQL); if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, sql_state->fingerprint, strlen(sql_state->fingerprint))) { return TRUE; } } } /* * same as above but with a double-quote " */ if (memchr(s, CHAR_DOUBLE, slen)) { libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_DOUBLE | FLAG_SQL_MYSQL); if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT, sql_state->fingerprint, strlen(sql_state->fingerprint))) { return TRUE; } } /* * Hurray, input is not SQLi */ return FALSE; }
這段程式碼是用於檢測 SQL 注入攻擊的,通過呼叫 libinjection 庫對輸入的 SQL 查詢語句進行指紋識別,並判斷是否存在於已知的 SQL 注入指紋庫中。
“test input as-is” 的意思是對輸入的 SQL 語句進行原樣測試,即不進行任何跳脫或處理。這相當於將輸入的 SQL 語句作為一個整體進行指紋識別,並標記 FLAG_QUOTE_NONE 和 FLAG_SQL_ANSI 標誌位,在已知的 SQL 注入指紋庫中查詢是否存在相同的指紋。如果存在,則說明該輸入可能是 SQL 注入攻擊,否則繼續進行其他檢測。通常情況下,如果輸入字串包含單引號或雙引號字元或者 SQL 關鍵字,就需要進行進一步的檢測和處理。
總結,這段程式碼是用於檢測 SQL 注入攻擊,通過指紋識別技術來進行檢測和防禦。同時支援 ANSI SQL 和 MySQL 兩種語法,並能夠檢測包含單引號和雙引號字元以及 SQL 關鍵字的字串。
例如,輸入常用的SQL隱碼攻擊的檢測語句 :’ and 1=1
libinjection會將其轉換為s&1,其中單引號依據定義被轉換為s,and被轉換為&,數位被轉換為1。
libinjection在轉換完後,通過二分查詢演演算法對內建的特徵進行匹配,匹配到則將SQL隱碼攻擊識別特徵複製進fingerprint變數並返回。
轉換 搜尋鍵碼: sql_keywords
,在檔案libinjection_sqli_data.h
中~!
在libinjection中,將SQL關鍵字轉換為單個字母時使用的字元集通常是a-z或A-Z。這意味著只有26個不同的字母可以用來表示所有的SQL關鍵字。
為了解決這個問題**,libinjection使用了一些技巧來擴充套件字母表的大小。其中一個技巧是引入數位字尾。例如,對於兩個關鍵字SELECT和SET,它們都會被轉換為字母s。為了避免衝突,第二個關鍵字SET會被轉換為字母s2。**
另一個技巧是使用大寫字母表示特殊的關鍵字。例如,LIMIT和OFFSET是MySQL和PostgreSQL中常用的關鍵字,它們被分別對映為L和O。這樣做的好處是,即使一個關鍵字被對映為小寫字母,仍然可以通過使用大寫字母來表示其他特殊關鍵字,以避免衝突。
需要注意的是,雖然僅有26個字母可以用來表示所有的SQL關鍵字,但由於上面提到的技巧,libinjection能夠支援更多的關鍵字,並確保每個關鍵字都使用唯一的單個字母來表示。
【技術分享】如何繞過WAF/NGWAF的libinjection實現SQL隱碼攻擊
參考URL: http://www.52bug.cn/hkjs/3025.html
SQL隱碼攻擊與libinjection分析(1)SQL隱碼攻擊
參考URL: https://blog.csdn.net/lqy971966/article/details/105269658
到此這篇關於SQL隱碼攻擊語意分析庫libinjection的文章就介紹到這了,更多相關SQL隱碼攻擊語意分析庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45