decimal轉為string sql_SQL注入詳解|OWASP Top 10安全風險實踐(二)

本文為一些列連載文章之一,不定期更新,計劃目錄如下:

OWASP介紹

SQL注入

命令注入

XML外部實體注入

XPATH注入

反射式、DOM及存儲XSS

失效的身份認證和會話管理

不安全的直接對象引用

安全配置錯誤

敏感信息泄露

功能級訪問控制缺失

跨站請求偽造

服務端請求偽造

文件上傳漏洞

未驗證的重定向和轉發

不安全的反序列化

使用含有已知漏洞的組件

一、?????注入

注入攻擊漏洞,例如SQL,OS 以及 LDAP注入。這些攻擊發生在當不可信的數據作為命令或 者查詢語句的一部分,被發送給解釋器的時候。攻擊者發送的惡意數據可以欺騙解釋器,以執行計劃外的命令或者在未被恰當授權時訪問數據。

  1. SQL注入

  • 漏洞利用演示

cbec574800499ded2e36db37cfe2fe7b.png
  • 漏洞危害說明

SQL注入攻擊成功后,可導致用戶數據庫中存儲的機密數據被竊取,更改,刪除,或者上傳木馬文件,甚至執行系統命令以進一步獲取服務器權限等。

  • 漏洞代碼分析

處理用戶登錄的后臺代碼主要如下:(左右滑動查看代碼)

publicbooleancheck_Sql_Login(String ipaddr) throws Exception {        getConnection();        String name = loginuser.getName();        String passwd_page = loginuser.getPassword();        boolean flag = false; // 默認返回值是false        Md5Util md5 = new Md5Util();        String passwd =md5.getMD5(passwd_page.getBytes());         // 拼湊的SQL語句,存在注入風險        String sql = "selectname from user where name=" + "'" + name + "'" + " andpassword=" + "'" + passwd + "'";        System.out.println("登錄頁面,拼湊SQL語句: " + sql);         try {             java.sql.Statement st = conn.createStatement();             rs =st.executeQuery(sql);             if (rs.next()) {                 flag = true;             } else {                 flag = false;             }             st.close();             System.out.println("登錄頁面查詢結果" + "db.java.check_Sql_Login():" + flag);        } catch (Exceptione) {             e.printStackTrace();        } finally {             out.close();             conn.close();        }    return flag;    }

如果用戶名tmp已經存在,輸入tmp‘#即可。

如果用戶名不存在,繼續構建條件為true的語句,如xxx’ or 1=1or ‘1’=’1。

調試輸出分別如下:

登錄頁面,拼湊SQL語句1: select name from user where name='tmp'#' andpassword='d41d8cd98f00b204e9800998ecf8427e'

登錄頁面查詢結果db.java.check_Sql_Login(): true

登錄頁面,拼湊SQL語句1: select name from user where name='xxxxx' or1=1 or '1'='1' and password='d41d8cd98f00b204e9800998ecf8427e'

登錄頁面查詢結果db.java.check_Sql_Login(): true

  • 漏洞代碼修復

防止SQL注入可使用:(左右滑動查看代碼)

? ? ?a.推薦使用預編譯語句,通過prepared Statements類的set方法對參數進行檢測;??

publicbooleancheck_Presql_Login() throws Exception {        getConnection();        String name = loginuser.getName();        String passwd = loginuser.getPassword();        boolean flag = false;         //定義執行的SQL代碼        //區分data和code        String sql = "select* from user where name=" + "?" + " andpassword=" + "?";        pst = conn.prepareStatement(sql);        pst.setString(1,name);        Md5Util md5 = new Md5Util();        passwd = md5.getMD5(passwd.getBytes());        pst.setString(2,passwd);        System.out.println("登錄頁面,預編譯SQL語句: " + sql);        rs = pst.executeQuery();        if (rs.next()) {            flag = true;        } else {            flag = false;        }rs.close();System.out.println("登錄頁面查詢結果" + "db.java.check_Presql_Login():" + flag);return flag;}

? ? ?b.使用ESAPI提供的方法;(左右滑動查看代碼)

publicbooleancheck_EsapiSql_Login() throws Exception {        getConnection();        String name = loginuser.getName();        String passwd = loginuser.getPassword();        boolean flag = false; // 默認返回值是false        Md5Util md5 = new Md5Util();        passwd = md5.getMD5(passwd.getBytes());                Codec mysqlCodec = newMySQLCodec(MySQLCodec.MYSQL_MODE);        String esapi_name = ESAPI.encoder().encodeForSQL(mysqlCodec,name);        String esapi_passwd = ESAPI.encoder().encodeForSQL(mysqlCodec,passwd);         // 拼湊的SQL語句,存在注入風險        String sql = "selectname from user where name=" + "'" +esapi_name + "'" + " andpassword=" + "'" + esapi_passwd+ "'";         try {            java.sql.Statement st = conn.createStatement();            rs =st.executeQuery(sql);            if (rs.next()) {                 flag = true;            } else {                 flag = false;            }            st.close();            System.out.println("登錄頁面查詢結果" + "db.java.check_Sql_Login():"                     + flag);        } catch (Exceptione) {            e.printStackTrace();        } finally {            out.close();            conn.close();        }        return flag;????}

c.自定義過濾方法;??

1)?自定義過濾方法(左右滑動查看代碼)

 protectedstaticboolean sqlValidate(String str) {        str = str.toLowerCase();//統一轉為小寫        String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" +                "char|declare|sitename|netuser|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" +                "table|from|grant|use|group_concat|column_name|" +                "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" +                "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#";//過濾掉的sql關鍵字,可以手動添加                       String[] badStrs = badStr_miss.split("\\|");        for (int i = 0; i< badStrs.length; i++) {            if(str.indexOf(badStrs[i]) >= 0) {               System.out.println("發現非法字符:"+badStrs[i]);                returntrue;            }        }        returnfalse;}

2)對用戶輸入進行過濾??(左右滑動查看代碼)

publicboolean check_ValidSql_Login() throws Exception {        getConnection();        String name = loginuser.getName();        String passwd = loginuser.getPassword();        boolean flag = false; // 默認返回值是false        Md5Util md5 = new Md5Util();        passwd = md5.getMD5(passwd.getBytes());         // 拼湊的SQL語句,存在注入風險        String sql = "selectname from user where name=" + "'" + name + "'" + " andpassword=" + "'" + passwd + "'";                if (sqlValidate(name)){             System.out.println("登錄頁面,拼湊SQL語句: " + sql);        } else {             try {                 java.sql.Statement st = conn.createStatement();                 rs = st.executeQuery(sql);                 if (rs.next()) {                     flag = true;                 } else {                     flag = false;                 }                 st.close();                 System.out.println("登錄頁面查詢結果" + "db.java.check_Sql_Login():" + flag);             } catch (Exceptione) {                 e.printStackTrace();             } finally {                 out.close();                 conn.close();             }        }        return flag;}

作者:王愛華 新鈦云服安全架構師

二十年IT行業安全咨詢、安全技術和安全管理經驗,擁有安全行業CISSP、CISA認證,曾任浦東中軟、絡安、盛大網絡、平安付、滬江網等公司安全咨詢顧問、安全經理、高級安全研究員、安全架構師職位。處理過互聯網公司各類安全問題,包括信息基礎架構安全,應用架構和代碼安全,應用運維安全,數據安全和災難恢復等。
熟悉ISO17799、等級保護、PCI-DSS、SOX等信息安全標準規范,具有支付牌照、等級保護、PCI認證的申請、實施和年審經驗。熟悉Shell、Python、Java等語言,曾負責搭建metron開源大數據平臺,單獨開發OWASP TOP 10安全演示平臺和企業信息安全管理平臺等。

了解新鈦云服

新鈦云服正式獲批工信部ISP/IDC(含互聯網資源協作)牌照

深耕專業,矗立鰲頭,新鈦云服獲千萬Pre-A輪融資

原電訊盈科中國區副總裁加入新鈦云服「附專訪」

新鈦云服,打造最專業的Cloud?MSP+,做企業業務和云之間的橋梁

新鈦云服一周年,完成兩輪融資,服務五十多家客戶

上海某倉儲物流電子商務公司混合云解決方案

新鈦云服出品的部分精品技術干貨

OWASP Top 10安全風險實踐(一)

七個用于Docker和Kubernetes防護的安全工具

運維人的終身成長,從清單管理開始|萬字長文!

99%運維不知道,系統文件md5變了,竟然是因為......

OpenStack與ZStack深度對比:架構、部署、計算存儲與網絡、運維監控等

什么是云原生?

IT混合云戰略:是什么、為什么,如何構建?

ac567d145ac46372374ef675300e46fa.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271509.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271509.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

各類排序算法實現(親測)

排序算法通常分為外部排序和內部排序&#xff0c;通常所說的八類排序屬于內部排序&#xff1b; 外部排序在此不說明&#xff0c;主要給出八類排序的簡單思想和實現&#xff1a; 1.插入排序 1.1 直接插入排序&#xff1a; 每次將一個新數&#xff0c;插入到已經排列好的有序…

沖正什么意思

沖正是用戶在進行銀行轉賬或者du取現交易時&#xff0c;在未操作成功&#xff0c;但是銀行卡賬戶發生了扣款時&#xff0c;采取的一種補救的方法&#xff0c;銀行的專業術語稱之為沖正。其實就是銀行系統在誤扣了用戶銀行卡中的金額后&#xff0c;再將金額退還到用戶銀行卡中的…

.net 2005大寫html標簽 xhtml10,HTML10.ppt

關于標簽的說明 正如之前所說的&#xff0c;部分的內容并不是為瀏覽者寫的&#xff0c;而是為瀏覽器和搜索引擎寫的。因此部分不應該含有任何在頁面中可視的的內容。 DTD 如果現在再次效驗我們的網頁&#xff0c;仍然會得到出錯信息&#xff0c;提示找不到DTD文件&#xff0c;那…

計算機基礎:聲音的相關知識筆記

1、聲音的相關概念 模擬聲音信號&#xff1a;聲波在時間和幅度上都是連續的模擬信號。 1.1 聲音的組成 幅度&#xff1a;聲波的振幅。計量單位是分貝&#xff08;dB&#xff09; 頻率&#xff1a;聲波每秒變化的次數&#xff0c;用Hz表示。人耳能聽到的聲音信號的頻率范圍20Hz~…

ansi編碼_Java 字符編碼

點擊上方藍字關注我們&#xff01;作者介紹王云靜&#xff0c;Java 開發工程師&#xff0c;2018 年 7 月加入去哪兒網&#xff0c;目前在目的地 - 呼叫中心。曾獲得過 ACM 亞洲區域賽銅牌。-----基本概念字符集字符(Character)是各種文字和符號的總稱&#xff0c;包括各國家文字…

外賣和快遞行業數據_下周一起,整治全面啟動!鎖定全市外賣、快遞行業!

為加強我市外賣、快遞行業電動自行車交通安全管理&#xff0c;降壓預防事故&#xff0c;營造良好的通行秩序&#xff0c;下周一起(12月21日)深圳交警將開展電動自行車交通安全月暨外賣、快遞行業集中整治行動。?圈重點?下周一起(12月21日)正式開展外賣、快遞行業集中整治行動…

計算機基礎:圖形、圖像相關知識筆記

1、圖形、圖像的基礎知識 圖形&#xff1a;由稱為矢量的數學對象所定義的直線和曲線等組成。 圖像&#xff1a;也稱為柵格圖像&#xff0c;由點陣圖或位圖圖像、用像素來代表圖像。每一個像素都被分配一個特點的位置和顏色值。 圖形和圖像之間在一定條件下可以互相轉換&#xf…

計算機應用用什么樣的筆記本,制圖用什么筆記本好

以前人們常說的繪畫都是在紙上&#xff0c;然而科技時代的到來也讓繪畫的方式有了改變&#xff0c;而且現實中還在發展電子商務&#xff0c;因此大家都開始使用計算機制圖&#xff0c;不同的計算機制圖的方式不一樣&#xff0c;專業使用電腦制圖的人都會對電腦比較挑剔。它們還…

Powerdesigner 在線打開 不用安裝客戶端 訪問pdm,ldm文件

Powerdesigner 在線打開 不用安裝客戶端 http://www.dmanywhere.cn/

【代碼筆記】iOS-下拉選項cell

一&#xff0c;效果圖。 二&#xff0c;工程圖。 三&#xff0c;代碼。 RootViewController.h #import <UIKit/UIKit.h> //加入頭文件 #import "ComboBoxView.h"interface RootViewController : UIViewController {ComboBoxView *_comboBox; }end RootV…

寬量程電壓電流 stm32_萬用表你只會量電壓電流?史上最全萬用表手冊,這么做你不會燒表...

一&#xff0c;萬用表使用前的準備。二&#xff0c;萬用表各個檔位的含義。三&#xff0c;萬用表測量電壓。四&#xff0c;萬用表測量電流。五&#xff0c;萬用表測量電阻。六&#xff0c;萬用表測量二極管。七&#xff0c;萬用表測量電容。八&#xff0c;萬用表一般的維護保養…

24個筆畫順序表_小學一年級語文26個漢語拼音字母要點+田字格兒歌,趕緊給孩子看...

126個漢語拼音字母要點漢語拼音字母表-聲母表漢語中每個音節起始處的輔音可以構成聲母。漢語拼音方案《聲母表》規定的聲母符號一共有23個。b [玻] p [坡] m [摸] f [佛]d [得] t [特] n [訥] l [勒]g [哥] k [科] h [喝] j [基] q [欺] x [希]z [資] c[雌] s [思] r [日] zh[知…

多媒體基礎:動畫和視頻知識筆記

1、動畫和視頻的概念 動畫&#xff1a;將靜態的圖像、圖形等按照一定的時間順序顯示而形成的連續的動態畫面。傳統意義來說動畫是在連續多格的膠片上拍攝的一系列畫面&#xff0c;比將膠片以一定的速度放映&#xff0c;從而產生動態的視覺技術。 視頻&#xff1a;活動的、連續的…

mongoDB的安裝(一)

0、安裝環境說明&#xff1a; linux系統&#xff1a;centos6.5 mongoDB版本&#xff1a;mongodb-linux-x86_64-rhel62-3.2.7.tgz 1、下載 mongoDB的下載&#xff1a;https://www.mongodb.com/download-center#community&#xff0c;注意選擇版本 2、解壓 tar -zxvf mongodb-lin…

計算機管理任務計劃程序損壞,win7彈出任務計劃程序窗口顯示該任務映像損壞或已篡改0x80041321錯誤代碼怎么辦...

最近有win7 64位專業版系統用戶到本站反饋說碰到這樣一個問題&#xff0c;就是電腦突然彈出一個任務計劃程序窗口&#xff0c;顯示該任務映像損壞或已篡改0x80041321錯誤代碼&#xff0c;遇到這樣的問題該如何處理呢&#xff0c;本文就給大家講解一下win7彈出任務計劃程序窗口顯…

c51單片機矩陣鍵盤1602計算器_基于51單片機矩陣鍵盤的簡易計算器制作

1. 運算過程、符號公式實時顯示在顯示屏上(I2C 1602)。2. 自帶三角函數、開根號、平方運算。3. 計算得出的結果可設置保存并用以下一次計算。4. 所有運算結果精確到至少小數點后兩位。5. 運算結果可通過串口發送給上位機。6. 當斷電重啟時&#xff0c;能存儲并顯示斷電前正在計…

Visual paradigm社區版下載及中文菜單的設置

免費的官網社區版鏈接為&#xff1a; https://www.visual-paradigm.com/download/community.jsp 設置中文菜單 安裝之后&#xff0c;由于如果想設置中文菜單的話&#xff0c;可能會遇到麻煩&#xff0c;因為菜單太多 如下圖&#xff0c;所示步驟&#xff1a; Window-->…

python畫函數圖像要用到的模塊_教你如何繪制數學函數圖像——numpy和matplotlib的簡單應用...

numpy和matplotlib的簡單應用 一、numpy庫 1.什么是numpy NumPy系統是Python的一種開源的數值計算擴展。這種工具可用來存儲和處理大型矩陣&#xff0c;比Python自身的嵌套列表&#xff08;nested list structure)結構要高效的多&#xff08;該結構也可以用來表示矩陣&#xff…

臺式電腦如何使用無線網,wifi怎么連接?

隨著網絡的發展&#xff0c;現在無線路由器已經深入到尋常百姓家了&#xff0c;無線信號滿街都是&#xff0c;但是作為臺式電腦&#xff0c;卻不具備wifi自動連接這個功能。那么&#xff0c;臺式電腦怎么用wifi呢&#xff1f;下面小編就教大家wifi如何連接。1、電腦必須安裝一塊…

軟件測試的缺陷管理系統有哪些,簡述:一款優秀的缺陷管理系統有哪些功能特點!...

原標題&#xff1a;簡述&#xff1a;一款優秀的缺陷管理系統有哪些功能特點&#xff01;什么是缺陷管理系統&#xff1f;缺陷管理系統指的是在軟件生命周期中識別、管理、溝通任何缺陷的過程(從缺陷的識別&#xff0c;到缺陷的解決關閉)&#xff0c;確保缺陷被跟蹤管理而不丟失…