精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

靜態代碼分析之C語言篇

開發 前端
綜合來看,c代碼靜態分析目前最主要的難點在于區間分析,這部分分析的準確性對后續的漏洞分析的準確性有很大的影響。

一、序言

從本篇起,筆者將開啟c語言代碼安全分析篇章,為大家詳細剖析c語言靜態代碼分析的各種技術細節。

二、依賴分析

依賴分析是c語言靜態代碼分析中一個非常重要的環節,它的分析準確與否,關系到了后續的漏洞分析的準確性。

什么是依賴分析

依賴圖是源代碼文件與其依賴庫之間的依賴關系的一種圖形表示。我們知道,在c語言中,項目真正用到的一些組件庫一般只有在編譯的時候才能夠確定,它不像java項目,一份代碼,到處運行,而是一份代碼,多次編譯,因為很多時候,我們為了跨平臺的需要,需要給同一個組件準備不同的適配方案,這也是c語言項目被一些開發人員長期詬病的地方。在c/c++項目的分析工作中,我們首要解決的就是程序文件之間的依賴關系,因為這直接影響到了后續我們靜態代碼分析的準確性。

依賴圖的作用

根據生成的文件依賴圖,我們可以清晰而準確的知道整體項目的組織脈絡。在后續的符號識別和函數調用鏈生成階段,需要依靠依賴圖來找到目標庫文件,從而保證符號識別和函數調用鏈構建的準確性。

如何進行依賴分析

針對c/c++項目文件依賴圖的生成,業內的主流辦法是通過解析compile_commands.json文件中記錄的編譯命令來進行生成。詳情可參考pvs-stdio這款商業sca掃描器的技術說明文檔(pvs-studio.com)。而compile_commands.json文件可以通過編譯工具(make、ninja等)生成,具體的辦法步驟是:

1.收集編譯過程的輸出信息。
2.將輸出信息重定向到解析器,通過正則匹配的方式,生成compile_commands.json文件。

當然,cmake等變異工具本身也支持生產compile_commands.json文件。具體是在構建方案的時候,指定參數:-DCMAKE_EXPORT_COMPILE_COMMANDS=1。

那么,有了compile_commands.json文件之后要如何進行依賴分析呢?

我們先看下compile_commands.json文件的數據結構:

[
{
"directory": "/Users/pony/work/sourcehub/cmake-examples/01-basic/B-hello-headers/build",
"command": "/Library/Developer/CommandLineTools/usr/bin/cc -I/Users/pony/work/sourcehub/cmake-examples/01-basic/B-hello-headers/include -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk -o CMakeFiles/hello_headers.dir/src/Hello.c.o -c /Users/pony/work/sourcehub/cmake-examples/01-basic/B-hello-headers/src/Hello.c",
"file": "/Users/pony/work/sourcehub/cmake-examples/01-basic/B-hello-headers/src/Hello.c"
},
{
"directory": "/Users/pony/work/sourcehub/cmake-examples/01-basic/B-hello-headers/build",
"command": "/Library/Developer/CommandLineTools/usr/bin/cc -I/Users/pony/work/sourcehub/cmake-examples/01-basic/B-hello-headers/include -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk -o CMakeFiles/hello_headers.dir/src/main.c.o -c /Users/pony/work/sourcehub/cmake-examples/01-basic/B-hello-headers/src/main.c",
"file": "/Users/pony/work/sourcehub/cmake-examples/01-basic/B-hello-headers/src/main.c"
}
]

其中directory表示當前編譯目錄,command表示當前執行的編譯命令,file表示待編譯的源碼文件。其中,在command命令中,參數I后面跟的是當前源碼所依賴的頭文件目錄的路徑,編譯器在編譯的時候會在給定的這個目錄下搜索相關的頭文件。

但是,顯然只找到頭文件是不夠的,我們還需要找到函數的定義位置,這樣我們才能夠真正建立起函數調用所在文件和函數定義所在文件之間的關聯關系。下面我們為了更好的說明aurora代碼安全分析引擎是如何對c項目進行依賴分析的,下面,我們以一個c代碼項目為示例進行闡述。

項目目錄:

.
├── CMakeLists.txt
├── README.adoc
├── include
│ └── Hello.h
└── src
├── Hello.c
└── main.c

2 directories, 5 files

CMakeLists.txt

# Set the minimum version of CMake that can be used
# To find the cmake version run
# $ cmake --version
cmake_minimum_required(VERSION 3.5)

# Set the project name
project (hello_headers)

# Create a sources variable with a link to all c files to compile
set(SOURCES
src/Hello.c
src/main.c
)

# Add an executable with the above sources
add_executable(hello_headers ${SOURCES})

# Set the directories that should be included in the build command for this target
# when running g++ these will be included as -I/directory/path/
target_include_directories(hello_headers
PRIVATE
${PROJECT_SOURCE_DIR}/include
)

include/Hello.h

#ifndef __HELLO_H__
#define __HELLO_H__

void print();

#endif

src/Hello.c

#include "Hello.h"
void print()
{
printf("hello world.");
}

src/main.c

#include "Hello.h"

int main(int argc, char *argv[])
{
print();
return 0;
}

這個項目主要由一個主程序和一個組件構成,主程序中通過頭文件Hello.h對組件中定義的print函數進行調用。那么,首先明確,我們期望建立起來的依賴關系是main.c和Hello.c之間的依賴關系。通過對compile_commands文件的分析,我們已經可以知道main.c和Hello.c都和Hello.h是有依賴關系的,只不過一個是API調用,一個是API定義。那么我們是否可以直接說明這兩個文件是有依賴的呢?那顯然是不行的,因為我們無法確定Hello.c中是否是定義了main.c中調用的print函數。只有同時滿足在main.c中調用了Hello.h中聲明的print函數,且在Hello.c中定義了Hello.h中聲明的print函數,那么我們才能夠認為,main.c和Hello.c之間是存在依賴關系的,這樣,我們后續才能夠據此建立起函數之間的調用關系,即函數調用鏈(這對于全局數據流構建分析很重要)。

我們可以用下面這個示意圖來表示這個推導過程。

流程圖-18.jpg

其中,依賴確定模塊一,通過對compile_commands.json文件及相關源碼的AST的分析,確定兩個源碼文件引入了同一個頭文件,依賴確定模塊二,通過分析是否同時導入相同頭文件且一方為函數調用,另一方為函數定義,確定main.c文件到Hello.c之間的依賴關系,而調用鏈確定模塊,通過分析main函數中是否包含對函數print的調用,進而確定main.c中的main函數和src/Hello.c中的print函數的調用關系。

三、代碼數據庫構建

代碼數據庫,顧名思義,存儲的代碼相關的一些數據。這里的代碼數據庫可以認為是第一層代碼屬性圖,我們一般會在其中存儲源代碼的AST表示形式。至于源代碼的AST表示形式,我們可以通過一些AST提取工具來獲取,比如eclipse提供的cdt工具,亦或者一些開源的前端解析工具,如antlr,均可以完成這部分工作。當然,如果我們利用這些工具提取ast,那么獲得的僅是一個ast unit class的集合,而為了后續展示方便,同時也為了能夠通過分布式架構進行高效的分析,我們還需要對這些ast unit類進行必要的初步解析工作,然后將其轉為json格式進行持久化存儲,這部分的處理流程可用下圖表示:

流程圖-12.jpg

四、函數調用圖構建

什么是函數調用圖

函數調用圖是函數之間的調用關系的一種圖形表示形式。在進行過程間數據流分析的時候,我們需要依賴函數調用圖求解函數調用鏈,以便于沿著這個調用鏈進行過程間數據流分析。

如何進行函數調用圖構建

函數調用鏈構建需要建立在依賴分析的基礎之上。在依賴分析中其實已經對這部分進行了形象的闡述,這里就不做過多的贅述。總的來說,依托依賴分析的結果,我們可以獲得兩個源碼文件之間的依賴關系,然后基于此,再對這些源碼中的函數定義信息進行遍歷分析,判斷下函數調用語句的函數簽名和函數定義的函數簽名是否一致,即可構建我們后續分析所需的函數調用鏈。

五、控制流及數據流分析

什么是控制流及數據流

程序控制流表示的是程序的各個語句結構之間的控制關系,總的來說有兩種形式,一種是基本塊控制關系圖,另一種是表達式控制關系圖。前者注重在基本塊之間的控制關系,后者注重在表達式之間的控制關系。而數據流表示的是程序中數據的流動關系,其中,我們會比較關注變量的定義和引用關系,即def-use鏈,以及一些賦值語句引起的數據流動關系。

為什么要進行控制流和數據流分析

控制流分析和數據流分析是程序靜態分析中比較核心的分析環節,我們在進行代碼安全審計的時候,我們認定某一處存在漏洞,如sql注入漏洞,一般需要有比較完整的污點傳播路徑,才能夠比較有充分的理由其漏洞進行判定,而污點傳播路徑依賴于數據流分析,而數據流分析也依賴于控制流分析。總的來說,java和c的數據流分析的方法大同小異,針對java方面的控制流及數據流分析方法,我已在前一篇文章中進行了詳細的描述,這里就不做過多的贅述了,詳情見:《DevSecOps建設之白盒續篇 - FreeBuf網絡安全行業門戶》。

六、代碼安全分析

棧溢出漏洞

那么,我們如何將靜態代碼分析技術應用在代碼安全分析上呢?我們以pwnable.kr上的一個棧溢出靶場bof為例,詳細闡述aurora白盒引擎是如何進行c代碼安全分析的。漏洞代碼如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
char overflowme[32];
printf("overflow me : ");
gets(overflowme); // smash me!
if(key == 0xcafebabe){
system("/bin/sh");
}
else{
printf("Nah..\n");
}
}
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}

簡要說明:這是一段比較典型的棧溢出漏洞代碼,在函數func中,我們聲明并定義了一個字符數組overflowme,并給其分配了32個字節的內存空間。程序中調用gets函數,獲取命令行輸入流,如果字符流長度在overflowme這個變量定義的合法區間內,那么這個程序將按照正常的邏輯走,如果超過了overlfowme定義的合法區間,那么,在沒有對這個輸入流長度進行合法性校驗的前提下,將會造成棧溢出漏洞,覆蓋變量key的內存空間,影響預期的分支流程走勢,即走到if的then邏輯部分,執行system函數,反彈一個bash窗口。這個調用過程發生時,內存的棧幀分布示意圖如下:

流程圖-13.jpg

其中,下層為func棧幀,上層為main棧幀,棧幀的排布由高地址向低地址排布,先調用的函數占據高地址,后調用的函數占據低地址,而數據寫入規則則是由低地址到高地址。我們在實際利用的時候,如果要改變if分支中的邏輯,可通過輸入以下payload實現攻擊:

payload="a"*52+ chr(0xbe) + chr(0xba) + chr(0xfe) +chr(0xca);

其中,chr(0xbe) + chr(0xba) + chr(0xfe) +chr(0xca)即為0xdeadbeef,而52表示key和overflow之間的距離,這些數據可以通過gdb調試獲得。通過給定overflowme超出其合法值范圍的payload,我們即可實現對原有邏輯的篡改。

那么,針對這種漏洞,我們要怎樣通過靜態分析方法進行檢測呢?

我們可以從棧溢出的原理出發,來思考我們的防護策略。我們知道,棧溢發生的本質原因是在對變量進行傳值的時候,未對輸入數據的字節長度進行合法性校驗。那么,我們在檢測的時候可以枚舉源代碼中的內存寫入操作的函數調用表達式(如gets、memcpy等),通過分析其在進行內存寫入的時候,寫入數據的值的大小是否比聲明的區間大來判定其是否存在漏洞。那么,問題就集中在了對兩者值的大小分析(區間分析)上了。針對緩沖區大小,我們可以根據變量對應的def-use鏈找到變量定義的位置,然后結合其變量定義表達式中和變量區間定義相關的ast數據,進行綜合分析判定。針對輸入的數據的區間大小,我們也可以用類似方式進行分析。當然,區間的值可能并不一定是常量,如果要追求分析的準確性,那么就要對區間范圍進行進一步的約束求解。

七、區間分析

什么是區間分析

區間分析是指通過約束求解算法,對變量和表達式的取值范圍進行跟蹤,為進一步的程序分析提供精確的數據支持。

為什么要做區間分析

通過上文可知,我們在做一些代碼安全分析的時候,比如棧溢出分析,如果我們不能夠比較準確的分析緩沖區和輸入數據的區間大小,那么我們是無法準確地判斷是否存在棧溢出漏洞的。

如何做區間分析

學術上,針對區間分析早有很多相關的方法分析方法,如王雅文、宮云戰等在第五屆中國測試學術會議上發表的論文《區間運算在軟件缺陷檢測中的應用》中就提到了一種區間分析方法。論文中提出,可針對不同的變量類型設置不同的初始區間值,然后通過表達式區間分析、條件區間分析、控制流區間分析三個不同緯度對變量的取值范圍進行約束求解。

1. 表達式區間分析

如表達式3*(++i),如果i的取值范圍是[1,1],那么執行完3*(++i)之后,其取將范圍將變成:[6,6]。

2. 條件區間分析

例如:

if(x>2){

}
else{
}

區間分析在代碼質量領域的應用

區間分析,可以應用于程序中的不可達代碼塊檢測、代碼覆蓋率分析等。例如:

void func(){
int i=5;
if(i<0){
i++;
}
}

初始控制流圖:

流程圖-14.jpg

轉為帶區間信息的控制流圖:

流程圖-15.jpg

從帶區間的控制流圖中可以發現,在執行到stmt_3語句時,因為i<0這個條件的取值范圍是[-∞,-1]n[5,5]=?,所以i<0分支下的所有表達式語句上i的區間范圍會被設置為null,表示不可達到。統計出所有執行的語句數量及總語句數量即可計算得語句覆蓋率,計算公式為:可執行語句數量/語句總數。統計所有可達分支數量及總的分支數量即可計算得分支覆蓋率,計算公式為:可達分支/分支總數。

區間分析在代碼安全領域的應用

比如上面的那個溢出漏洞案例。我們可以得到其初始控制流圖為:

流程圖-16.jpg

轉化為區間為帶區間信息的控制流圖:

流程圖-17.jpg

其中在stmt_3(即語句gets(overflowme))中,overflowme的區間范圍易求得為[0,32],而用戶輸入的數據的范圍是[0,+∞],這里用1000作為缺省值,當然為了以防萬一,也可以設置大一點,顯而易見這里用戶輸入的數據的大小的區間范圍遠大于overflowme最大的取值32,那么這里是肯定存在溢出漏洞的。當然,要比較精確的判定溢出漏洞,我們還可以結合compile_commands.json中的編譯命令(如一些編譯時設定的堆棧溢出的防護策略)進行綜合判定。

八、CI流程自動化

一款靜態代碼安全分析工具,要好用,不僅要引擎能力足夠硬核,在流程方面也應該自動化,讓使用者能夠很方便的配置,很容易地集成到一些主流的CI piplines中。下面我們以gitlab ci,詳細闡述我們是如何實現c代碼自動化安全、代碼質量檢測。

以下是示例ci例子

# This file is a template, and might need editing before it works on your project.
# This is a sample GitLab CI/CD configuration file that should run without any modifications.
# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts,
# it uses echo commands to simulate the pipeline execution.
#
# A pipeline is composed of independent jobs that run scripts, grouped into stages.
# Stages run in sequential order, but jobs within stages run in parallel.
#
# For more information, see: https://docs.gitlab.com/ee/ci/yaml/README.html#stages

stages: # List of stages for jobs, and their order of execution
- build
- test
- deploy

build-job: # This job runs in the build stage, which runs first.
image: ci_vtsmap:latest
stage: build
script:
- echo "Compiling the code..."
- mkdir build && cd build
- cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 ..
- curl -F "file=@compile_commands.json" -F "user=${GITLAB_USER_NAME}" -F "projectname=${CI_PROJECT_NAME}" -F "language=c" -F "email=xxx@gmail.com" -F "type=git"-F "branch=${CI_COMMIT_BRANCH}" -F "commitid=${CI_COMMIT_SHA}" -F "gitaddr=${CI_PROJECT_URL}" -F “token=xxx” -x POST http://[domain]/pushjob/
- make .
- echo "Compile complete."

deploy-job: # This job runs in the deploy stage.
stage: deploy # It only runs when *both* jobs in the test stage complete successfully.
script:
- echo "Deploying application..."
- echo "Application successfully deployed."

其中,我們會在原有的ci腳本中加入兩行命令,一行時在原有的cmake命令上加上參數-DCMAKE_EXPORT_COMPILE_COMMANDS=1 來生成compile_commands.json文件,以便于后端的靜態分析引擎進行依賴分析。以下命令用于提交任務信息:

curl -F "file=@compile_commands.json" -F "user=${GITLAB_USER_NAME}" -F "projectname=${CI_PROJECT_NAME}" -F "language=c" -F "email=xxx@gmail.com" -F "type=git" -F "branch=${CI_COMMIT_BRANCH}" -F "commitid=${CI_COMMIT_SHA}" -F "gitaddr=${CI_PROJECT_URL}" -F “token=xxx” -x POST http://[domain]/pushjob/

九、總結

綜合來看,c代碼靜態分析目前最主要的難點在于區間分析,這部分分析的準確性對后續的漏洞分析的準確性有很大的影響。所以在c代碼靜態分析方面,區間分析方面需要花比較大的功夫去鉆研,不僅要保證分析的分析的準確性,同時也要考慮到分析的效率,因為很多c代碼項目,如linux內核等,代碼量非常龐大,如果沒有一個比較合理的算法,加快代碼分析速度,那么接入到企業內部使用,其體驗感也是非常差的。當然,精度和速度兩者一般情況下是一種此消彼長的關系的,如何從中達到一個平衡,還需要不斷的進行測試和實踐。

王雅文,宮云戰,楊朝紅,肖慶,區間運算在軟件缺陷檢測中的應用,第五屆中國測試學術會議論文集,2008,51-52。

責任編輯:武曉燕 來源: FreeBuf.COM
相關推薦

2013-10-31 11:08:15

2013-04-08 10:47:42

Xcode靜態代碼分析

2021-06-08 13:56:34

工具靜態代碼

2009-08-27 10:44:21

C#靜態變量

2021-04-13 11:15:54

網絡安全C語言循環結構

2021-04-08 11:10:22

網絡安全C語言if…else…

2023-12-29 08:27:36

C語言靜態變量開發

2023-11-21 15:59:34

C語言Windows

2022-01-19 08:00:00

靜態代碼動態代碼開發

2022-11-28 08:15:14

Go語言代碼

2022-12-05 09:32:29

Go 語言風格規范

2024-03-19 08:02:28

集群GaussDB指標

2022-03-25 00:00:00

Splunk搜索SPL

2009-08-27 16:00:03

C#靜態字段C#實例字段

2012-04-25 11:04:13

Visual Stud

2009-08-21 08:59:35

C#語言規范

2020-11-26 06:40:24

Go語言基礎

2020-11-30 06:17:03

Go語言

2020-12-02 08:45:36

Go語言

2012-06-15 10:13:03

點贊
收藏

51CTO技術棧公眾號

97精品在线播放| 天堂av2020| 人人九九精品| 日韩av在线发布| 精品久久国产精品| 污污免费在线观看| 日本精品裸体写真集在线观看| 日本一区二区不卡视频| 99国产高清| 无码人妻精品一区二区三区蜜桃91 | 色乱码一区二区三区网站| 欧美一区二区二区| 欧美三级午夜理伦三级| 精品视频在线一区二区| av电影天堂一区二区在线| 国产精品情侣自拍| 黄色小视频在线免费看| 日韩一区二区三区免费播放| 亚洲第一区在线观看| 久久这里只精品| 欧洲一区精品| 亚洲一区二区三区三| 丝袜美腿玉足3d专区一区| 国产 欧美 精品| 蜜桃在线一区二区三区| 国产69久久精品成人看| 久久久久黄色片| 久久人人88| 亚洲人成在线播放| 人妻av一区二区| 高清一区二区三区av| 日本韩国一区二区三区视频| 91免费黄视频| 亚洲性图自拍| 成人免费一区二区三区视频| 亚洲成人午夜在线| 日色在线视频| 99久久99久久综合| 99久久国产免费免费| 国产精品爽爽久久久久久| 水蜜桃久久夜色精品一区的特点 | 成人欧美一区二区三区黑人一 | 日韩极品精品视频免费观看| 又色又爽又黄18网站| 白嫩亚洲一区二区三区| 欧美色中文字幕| 欧美性猛交久久久乱大交小说 | 国产在线视频2019最新视频| 无码一区二区三区| 翔田千里一区二区| 91精品国产91| 国产精品视频免费播放| 亚洲一区二区动漫| 欧美亚洲成人免费| 久久99精品波多结衣一区| 最新日韩在线| 69av在线播放| 一二三区免费视频| 麻豆精品网站| 国产精品成人免费视频| 欧美brazzers| 捆绑调教美女网站视频一区| 国产精品一区二区久久久| 中文字幕一区二区三区免费看| 久久一二三四| 国产精品久久久久久亚洲影视| 中文字幕在线视频免费| 美女一区二区三区在线观看| 国产拍精品一二三| 国产三级视频在线播放| 福利视频网站一区二区三区| 激情小说综合网| 男男电影完整版在线观看| 国产色产综合产在线视频| 亚洲人成网站在线观看播放| 黄网站在线免费看| 亚洲一区二区三区四区在线 | 色天使综合视频| 欧美日韩国产综合视频在线观看| 伊人色在线观看| 青草伊人久久| 日韩精品在线免费观看| 波多野结衣家庭教师在线观看| 国产精品97| 久久久久久国产精品| 亚洲综合久久网| 久久福利视频一区二区| 鬼打鬼之黄金道士1992林正英| 日本美女一级视频| 中文字幕av一区二区三区| 好色先生视频污| 中文字幕在线看片| 欧美日韩久久一区| jjzzjjzz欧美69巨大| 国产成人ay| 欧美大片免费观看在线观看网站推荐| 日本三级网站在线观看| 蜜桃av噜噜一区| 国产精品swag| 日本在线免费| 天天免费综合色| 亚洲欧美aaa| 噜噜噜狠狠夜夜躁精品仙踪林| 国产午夜精品全部视频播放 | 国产九九在线视频| 欧美片第1页| 91精品在线麻豆| 国产高清自拍视频| 99精品视频在线观看免费播放| 欧美激情视频播放| 中文 欧美 日韩| 99这里都是精品| 国产经典久久久| 我爱我色成人网| 亚洲成人999| 欧美性生给视频| 蜜桃视频一区| 国产日韩欧美精品| 成人免费看片| 欧美私模裸体表演在线观看| 成人性生活免费看| 天天做天天爱综合| 国产精品大片wwwwww| 手机在线精品视频| 一区二区三区高清在线| 97超碰成人在线| 亚洲小说图片| 97在线日本国产| 国产成人精品一区二区无码呦| 国产欧美日韩不卡| 欧美aⅴ在线观看| 成功精品影院| 欧美激情免费在线| 国产三区在线播放| 国产精品久久久99| 国产精彩免费视频| 你懂的一区二区三区| 午夜免费日韩视频| 免费观看黄色av| 亚洲精品高清在线观看| 亚洲一区二区三区观看| 日韩精品91| 国产精品久久久久久亚洲调教| 蝌蚪视频在线播放| 色香色香欲天天天影视综合网| 亚洲熟女一区二区| 亚洲欧洲日本mm| 国产精品区一区| 丁香花在线高清完整版视频 | 亚洲欧美激情一区二区三区| 天天综合精品| 亚洲专区国产精品| 超碰在线无需免费| 日韩一区二区影院| 久草国产在线观看| 成人黄色一级视频| 日本少妇高潮喷水视频| 琪琪久久久久日韩精品| 26uuu另类亚洲欧美日本一 | 亚洲不卡在线| 久久久久久成人| 亚洲欧美日韩动漫| 色综合久久久久久久久| 88久久精品无码一区二区毛片| 久久精品盗摄| 色就是色欧美| **国产精品| 欧美日韩国产第一页| 免费观看国产视频| 色婷婷久久综合| 欧美人与禽zoz0善交| 极品少妇一区二区| 菠萝蜜视频在线观看入口| 国产精品网在线观看| 8x海外华人永久免费日韩内陆视频| 台湾av在线二三区观看| 欧美伊人精品成人久久综合97| 老司机精品免费视频| 国产一区不卡视频| 男女视频网站在线观看| 久操精品在线| 91精品中文在线| heyzo一区| 国产亚洲成av人片在线观看桃| 亚洲性生活大片| 亚洲福利电影网| 国产熟女一区二区| 国产精品香蕉一区二区三区| 99视频在线免费播放| 日韩精品dvd| 国产一级特黄a大片99| 国产综合色在线观看| 美女精品视频一区| 色中色在线视频| 制服丝袜av成人在线看| 国产成人愉拍精品久久 | 日韩av影院在线观看| 成年人视频免费| 亚洲免费三区一区二区| 少妇按摩一区二区三区| 国产一区二区三区高清播放| 国产精品秘入口18禁麻豆免会员| 天天做天天爱综合| 乱一区二区三区在线播放| 麻豆国产一区二区三区四区| 日本精品性网站在线观看| av黄色在线| 最近2019中文免费高清视频观看www99| 国模私拍视频在线| 欧美美女一区二区| 亚洲天堂视频网站| 亚洲制服丝袜在线| 欧美一区二区三区观看| 久久久无码精品亚洲日韩按摩| 亚欧美一区二区三区| 日韩高清一区二区| 日韩av综合在线观看| 欧美特黄视频| 小说区视频区图片区| 欧美亚洲高清| 久久久一本精品99久久精品66| 日本精品视频| 91麻豆国产精品| 久久久久黄色| 国产成人精品免高潮在线观看| 成人性生交大片免费看在线播放| 久久成人一区二区| 1769视频在线播放免费观看| 精品中文字幕久久久久久| 亚洲av永久纯肉无码精品动漫| 欧美日韩国产不卡| 成人黄色激情视频| 色成年激情久久综合| 草久久免费视频| 精品久久久久久久久久ntr影视| 精品少妇一二三区| 亚洲国产精品影院| 久久久夜色精品| 亚洲综合色在线| 精品欧美一区二区久久久久| 亚洲美女在线国产| 538精品在线观看| 亚洲老妇xxxxxx| 精品国产乱码久久久久久鸭王1| 亚洲免费资源在线播放| 一区二区三区四区五区| 亚洲乱码精品一二三四区日韩在线 | 中国一级片黄色一级片黄| 欧美中文字幕一区| 国产成人av免费| 欧美日韩一区精品| 一级片视频免费| 91精品国产综合久久久久久 | 亚洲精品自拍视频| 你懂的视频在线| 亚洲日韩第一页| yiren22亚洲综合伊人22| 中文字幕视频一区二区在线有码| 91精品大全| 播播国产欧美激情| av毛片在线看| 久久久久中文字幕2018| av在线视屏| 日本在线观看天堂男亚洲| 色8久久影院午夜场| 国产精品人成电影在线观看| 欧美黄色a视频| 96sao精品视频在线观看| 一区三区自拍| 麻豆亚洲一区| 人人狠狠综合久久亚洲婷| 亚洲永久一区二区三区在线| 亚洲乱码在线| 黄网站欧美内射| 日韩中文字幕区一区有砖一区| 色一情一区二区三区| 国产成人鲁色资源国产91色综| 日本少妇xxxx| 中文字幕av免费专区久久| 日本老熟俱乐部h0930| 亚洲.国产.中文慕字在线| 久久久精品视频网站| 欧美精品v国产精品v日韩精品 | 国产精品自在线拍| 欧美不卡三区| 外国成人激情视频| 奇米精品一区二区三区| 日本成人在线视频网站| 性鲍视频在线观看| 2023国产精品自拍| 亚洲区一区二区三| 亚洲动漫第一页| 无码人妻丰满熟妇区五十路| 91精品国产色综合久久ai换脸 | 91午夜精品亚洲一区二区三区| 欧美日韩免费观看一区三区| 噜噜噜久久,亚洲精品国产品| 亚洲人在线视频| 制服丝袜中文字幕在线| 国产精品69av| 高清日韩中文字幕| 一区二区在线观看网站| 国产日韩一区| 日本55丰满熟妇厨房伦| 久久婷婷一区二区三区| 久久久久99精品成人片毛片| 精品1区2区3区| 亚洲人妻一区二区| 久久91亚洲精品中文字幕| 91国内外精品自在线播放| 久久精品中文字幕一区二区三区 | 亚洲免费一级视频| 99国产精品久| 久久久久久久黄色| 欧美日韩久久一区二区| 日本一二三区在线视频| 欧美日韩国产成人在线| 国产精品igao视频网网址不卡日韩| 欧美一二三区| 国产亚洲福利| 四虎成人免费视频| 亚洲美女视频一区| 在线观看黄色国产| 国产午夜一区二区| 欧美成人资源| 久久免费99精品久久久久久| 午夜日韩电影| 超碰在线超碰在线| 综合久久给合久久狠狠狠97色| 亚洲 欧美 中文字幕| 日韩精品视频观看| 国产精品高颜值在线观看| 成人av资源| 欧美日本不卡| 国产吃瓜黑料一区二区| 亚洲六月丁香色婷婷综合久久| 亚洲图片在线播放| 中文字幕日韩精品有码视频| 亚洲www啪成人一区二区| 久久久久久精| 午夜综合激情| 免费一级做a爰片久久毛片潮| 欧美日韩性视频| 日韩欧美在线番号| 欧美最猛性xxxx| 亚洲婷婷丁香| 成人性视频欧美一区二区三区| 国产日韩高清在线| 中文字幕永久在线| 中文亚洲视频在线| 成人国产精品入口免费视频| 亚欧洲精品在线视频免费观看| 日本亚洲一区二区| 91香蕉视频污在线观看| 欧美久久久久久久久中文字幕| 蜜桃av在线免费观看| 91久久嫩草影院一区二区| 国产一区观看| 在线观看国产三级| 欧美性猛交99久久久久99按摩| 男人天堂亚洲二区| 国产精品免费视频久久久| 香蕉精品视频在线观看| 日韩黄色一区二区| 亚洲成在人线免费| 黄色av网站在线免费观看| 国产精品永久免费观看| 亚洲一区二区日韩| 在线观看亚洲免费视频| 欧美性高跟鞋xxxxhd| 日本中文字幕在线看| 99久久精品免费看国产一区二区三区| 亚洲电影成人| 国产真人做爰视频免费| 欧美一区二区视频免费观看| free性欧美| 色999五月色| 国产一区二区三区蝌蚪| 国产一级片视频| 国产一区二区三区免费视频| 91丨精品丨国产| 怡红院av亚洲一区二区三区h| 亚洲国产精品99久久久久久久久| 国产精品欧美激情在线| 国内精品免费午夜毛片| 青青草91久久久久久久久| 乱码一区二区三区| 日本久久一区二区| 亚洲丝袜精品| 日本一区高清不卡| 国产精品123| 色老头在线视频| 久久91亚洲人成电影网站| 精品国产一区二区三区四区| 久久久久久无码精品人妻一区二区| 日韩欧美一区二区在线| jizzjizz亚洲| 日韩一区二区电影在线观看| 国产·精品毛片| 在线观看亚洲一区二区|