午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > 使用bandit對目標python代碼進行安全函數掃描的案例分析

使用bandit對目標python代碼進行安全函數掃描的案例分析

熱門標簽:如何申請400電話代理 江門智能電話機器人 杭州房產地圖標注 地圖標注可以遠程操作嗎 天津塘沽區地圖標注 滴滴地圖標注公司 智能電話機器人調研 甘肅高頻外呼系統 400電話在線如何申請

技術背景

在一些對python開源庫代碼的安全掃描中,我們有可能需要分析庫中所使用到的函數是否會對代碼的執行環境造成一些非預期的影響。典型的例如python的沙箱逃逸問題,通過一些python的第三方庫可以執行系統shell命令,而這就不在python的沙箱防護范圍之內了。關于python的沙箱逃逸問題,這里不作展開,這也是困擾業界多年的一個問題,連python官方也提過python的沙箱是沒有完美的防護方案的,這里僅作為一個背景案例使用:

# subprocess_Popen.py

import subprocess
import uuid

subprocess.Popen('touch ' + str(uuid.uuid1()) +'.txt', shell = True)

這里演示的功能是使用subprocess函數庫開啟一個系統shell,并執行一個touch的指令,可以生成一個指定文件名的文件,類似于mkdir產生一個文件夾。我們可以看到這個文件成功執行后會在當前的目錄下生成一個uuid隨機命名的txt文件:

[dechin@dechin-manjaro bandit_test]$ python3 subprocess_Popen.py 
[dechin@dechin-manjaro bandit_test]$ ll
總用量 4
-rw-r--r-- 1 dechin dechin 0 1月 26 23:03 b7aa0fc8-5fe7-11eb-b5d3-058313e110e4.txt
-rw-r--r-- 1 dechin dechin 123 1月 26 23:03 subprocess_Popen.py

然而,本次的關注點并不在與這個函數執行了什么功能,而是這個函數中用到了subprocess這個函數庫。按照python的語言特點,當你的系統中如果存在這樣的一個模塊引用了subprocess庫,那么任何可以調用該功能模塊的函數,都可以調用到subprocess這個函數,以下是另外一個惡意用戶的python代碼

# bad.py

from subprocess_Popen import subprocess as subprocess

subprocess.Popen('touch bad.txt', shell = True)

該代碼的目的是在不直接import subprocess的條件下,通過前面創建好的subprocess_Popen.py來進行搭橋調用subprocess的功能函數。這個腳本的執行結果如下:

[dechin@dechin-manjaro bandit_test]$ python3 bad.py 
[dechin@dechin-manjaro bandit_test]$ ll
總用量 12
-rw-r--r-- 1 dechin dechin 0 1月 26 23:13 0fda7ede-5fe9-11eb-80a8-ad279ab4e0a6.txt
-rw-r--r-- 1 dechin dechin 0 1月 26 23:03 b7aa0fc8-5fe7-11eb-b5d3-058313e110e4.txt
-rw-r--r-- 1 dechin dechin 113 1月 26 23:13 bad.py
-rw-r--r-- 1 dechin dechin 0 1月 26 23:13 bad.txt
drwxr-xr-x 2 dechin dechin 4096 1月 26 23:13 __pycache__
-rw-r--r-- 1 dechin dechin 123 1月 26 23:03 subprocess_Popen.py

這個結果意味著,我們成功的使用bad.py調用了subprocess_Popen.py中所引用的subprocess,成功touch了一個bad.txt的文件。

到這里我們的背景案例演示結束,但我們需要重新梳理這些案例中所包含的邏輯:我們原本是希望在自己的系統中不引入python的沙箱逃逸問題,我們會對其他人傳遞過來的代碼進行掃描,如使用下文中將要介紹的bandit工具來屏蔽subprocess等"危險函數"。而如果我們在自己寫的python庫或者引入的第三方python庫中存在類似于subprocess的引用,這就會導致我們的屏蔽失效,用戶可以任意的通過這些引用的搭橋直接調用subprocess的函數功能。因此,在特殊的條件要求下,我們需要對自己的代碼進行安全函數掃描,以免為其他人的系統帶來不可預期的安全風險。bandit只是其中的一種安全函數掃描的工具,接下來我們介紹一下其基本安裝和使用方法。

用pip安裝bandit

這里直接使用pip來安裝bandit,有需要的也可以從源碼直接安裝。關于在pip的使用中配置國內鏡像源的方法,可以參考這篇博客中對python安裝第三方庫的介紹。

[dechin@dechin-manjaro bandit_test]$ python3 -m pip install bandit
Collecting bandit
 Downloading bandit-1.7.0-py3-none-any.whl (115 kB)
 |████████████████████████████████| 115 kB 101 kB/s 
Requirement already satisfied: PyYAML>=5.3.1 in /home/dechin/anaconda3/lib/python3.8/site-packages (from bandit) (5.3.1)
Collecting GitPython>=1.0.1
 Downloading GitPython-3.1.12-py3-none-any.whl (159 kB)
 |████████████████████████████████| 159 kB 28 kB/s 
Requirement already satisfied: six>=1.10.0 in /home/dechin/anaconda3/lib/python3.8/site-packages (from bandit) (1.15.0)
Collecting stevedore>=1.20.0
 Downloading stevedore-3.3.0-py3-none-any.whl (49 kB)
 |████████████████████████████████| 49 kB 25 kB/s 
Collecting gitdb5,>=4.0.1
 Downloading gitdb-4.0.5-py3-none-any.whl (63 kB)
 |████████████████████████████████| 63 kB 28 kB/s 
Collecting pbr!=2.1.0,>=2.0.0
 Downloading pbr-5.5.1-py2.py3-none-any.whl (106 kB)
 |████████████████████████████████| 106 kB 26 kB/s 
Collecting smmap4,>=3.0.1
 Downloading smmap-3.0.5-py2.py3-none-any.whl (25 kB)
Installing collected packages: smmap, gitdb, GitPython, pbr, stevedore, bandit
Successfully installed GitPython-3.1.12 bandit-1.7.0 gitdb-4.0.5 pbr-5.5.1 smmap-3.0.5 stevedore-3.3.0

安裝結束之后,可以通過以下指令驗證是否安裝成功:

[dechin@dechin-manjaro bandit_test]$ bandit -h
usage: bandit [-h] [-r] [-a {file,vuln}] [-n CONTEXT_LINES] [-c CONFIG_FILE] [-p PROFILE] [-t TESTS] [-s SKIPS] [-l] [-i] [-f {csv,custom,html,json,screen,txt,xml,yaml}] [--msg-template MSG_TEMPLATE] [-o [OUTPUT_FILE]] [-v] [-d] [-q]
  [--ignore-nosec] [-x EXCLUDED_PATHS] [-b BASELINE] [--ini INI_PATH] [--exit-zero] [--version]
  [targets [targets ...]]

Bandit - a Python source code security analyzer

positional arguments:
 targets  source file(s) or directory(s) to be tested

optional arguments:
 -h, --help  show this help message and exit
 -r, --recursive find and process files in subdirectories
 -a {file,vuln}, --aggregate {file,vuln}
   aggregate output by vulnerability (default) or by filename
 -n CONTEXT_LINES, --number CONTEXT_LINES
   maximum number of code lines to output for each issue
 -c CONFIG_FILE, --configfile CONFIG_FILE
   optional config file to use for selecting plugins and overriding defaults
 -p PROFILE, --profile PROFILE
   profile to use (defaults to executing all tests)
 -t TESTS, --tests TESTS
   comma-separated list of test IDs to run
 -s SKIPS, --skip SKIPS
   comma-separated list of test IDs to skip
 -l, --level  report only issues of a given severity level or higher (-l for LOW, -ll for MEDIUM, -lll for HIGH)
 -i, --confidence report only issues of a given confidence level or higher (-i for LOW, -ii for MEDIUM, -iii for HIGH)
 -f {csv,custom,html,json,screen,txt,xml,yaml}, --format {csv,custom,html,json,screen,txt,xml,yaml}
   specify output format
 --msg-template MSG_TEMPLATE
   specify output message template (only usable with --format custom), see CUSTOM FORMAT section for list of available values
 -o [OUTPUT_FILE], --output [OUTPUT_FILE]
   write report to filename
 -v, --verbose  output extra information like excluded and included files
 -d, --debug  turn on debug mode
 -q, --quiet, --silent
   only show output in the case of an error
 --ignore-nosec do not skip lines with # nosec comments
 -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS
   comma-separated list of paths (glob patterns supported) to exclude from scan (note that these are in addition to the excluded paths provided in the config file) (default:
   .svn,CVS,.bzr,.hg,.git,__pycache__,.tox,.eggs,*.egg)
 -b BASELINE, --baseline BASELINE
   path of a baseline report to compare against (only JSON-formatted files are accepted)
 --ini INI_PATH path to a .bandit file that supplies command line arguments
 --exit-zero  exit with 0, even with results found
 --version  show program's version number and exit

CUSTOM FORMATTING
-----------------

Available tags:

 {abspath}, {relpath}, {line}, {test_id},
 {severity}, {msg}, {confidence}, {range}

Example usage:

 Default template:
 bandit -r examples/ --format custom --msg-template \

 "{abspath}:{line}: {test_id}[bandit]: {severity}: {msg}"

 Provides same output as:
 bandit -r examples/ --format custom

 Tags can also be formatted in python string.format() style:
 bandit -r examples/ --format custom --msg-template \

 "{relpath:20.20s}: {line:03}: {test_id:^8}: DEFECT: {msg:>20}"

 See python documentation for more information about formatting style:
 https://docs.python.org/3/library/string.html

The following tests were discovered and loaded:
-----------------------------------------------
 B101 assert_used
 B102 exec_used
 B103 set_bad_file_permissions
 B104 hardcoded_bind_all_interfaces
 B105 hardcoded_password_string
 B106 hardcoded_password_funcarg
 B107 hardcoded_password_default
 B108 hardcoded_tmp_directory
 B110 try_except_pass
 B112 try_except_continue
 B201 flask_debug_true
 B301 pickle
 B302 marshal
 B303 md5
 B304 ciphers
 B305 cipher_modes
 B306 mktemp_q
 B307 eval
 B308 mark_safe
 B309 httpsconnection
 B310 urllib_urlopen
 B311 random
 B312 telnetlib
 B313 xml_bad_cElementTree
 B314 xml_bad_ElementTree
 B315 xml_bad_expatreader
 B316 xml_bad_expatbuilder
 B317 xml_bad_sax
 B318 xml_bad_minidom
 B319 xml_bad_pulldom
 B320 xml_bad_etree
 B321 ftplib
 B323 unverified_context
 B324 hashlib_new_insecure_functions
 B325 tempnam
 B401 import_telnetlib
 B402 import_ftplib
 B403 import_pickle
 B404 import_subprocess
 B405 import_xml_etree
 B406 import_xml_sax
 B407 import_xml_expat
 B408 import_xml_minidom
 B409 import_xml_pulldom
 B410 import_lxml
 B411 import_xmlrpclib
 B412 import_httpoxy
 B413 import_pycrypto
 B501 request_with_no_cert_validation
 B502 ssl_with_bad_version
 B503 ssl_with_bad_defaults
 B504 ssl_with_no_version
 B505 weak_cryptographic_key
 B506 yaml_load
 B507 ssh_no_host_key_verification
 B601 paramiko_calls
 B602 subprocess_popen_with_shell_equals_true
 B603 subprocess_without_shell_equals_true
 B604 any_other_function_with_shell_equals_true
 B605 start_process_with_a_shell
 B606 start_process_with_no_shell
 B607 start_process_with_partial_path
 B608 hardcoded_sql_expressions
 B609 linux_commands_wildcard_injection
 B610 django_extra_used
 B611 django_rawsql_used
 B701 jinja2_autoescape_false
 B702 use_of_mako_templates
 B703 django_mark_safe

從這個列表中的屏蔽函數我們可以看出所謂的"危險函數"到底都有哪些,比如常用的subprocessrandom都被包含在內。subprocess是因為其對shell的調用而被列為"危險函數",而random則是因為其偽隨機數的性質(這里簡單說明一下,現在一般推薦使用secrets中的所謂安全隨機數,但是實際上只有量子疊加測量才能夠真正實現真隨機數)。

bandit常用使用方法

直接對py文件進行掃描:

[dechin@dechin-manjaro bandit_test]$ bandit subprocess_Popen.py 
[main] INFO profile include tests: None
[main] INFO profile exclude tests: None
[main] INFO cli include tests: None
[main] INFO cli exclude tests: None
[main] INFO running on Python 3.8.5
[node_visitor] INFO Unable to find qualified name for module: subprocess_Popen.py
Run started:2021-01-26 15:31:00.425603

Test results:
>> Issue: [B404:blacklist] Consider possible security implications associated with subprocess module.
 Severity: Low Confidence: High
 Location: subprocess_Popen.py:3
 More Info: https://bandit.readthedocs.io/en/latest/blacklists/blacklist_imports.html#b404-import-subprocess
2
3 import subprocess
4 import uuid

--------------------------------------------------
>> Issue: [B602:subprocess_popen_with_shell_equals_true] subprocess call with shell=True identified, security issue.
 Severity: High Confidence: High
 Location: subprocess_Popen.py:6
 More Info: https://bandit.readthedocs.io/en/latest/plugins/b602_subprocess_popen_with_shell_equals_true.html
5
6 subprocess.Popen('touch ' + str(uuid.uuid1()) +'.txt', shell = True)

--------------------------------------------------

Code scanned:
 Total lines of code: 3
 Total lines skipped (#nosec): 0

Run metrics:
 Total issues (by severity):
  Undefined: 0.0
  Low: 1.0
  Medium: 0.0
  High: 1.0
 Total issues (by confidence):
  Undefined: 0.0
  Low: 0.0
  Medium: 0.0
  High: 2.0
Files skipped (0):

通過對剛才所創建的調用了危險函數subprocess的py文件subprocess_Popen.py的掃描,我們識別出了其中的"危險函數",注意這里的Issue編號是602,定級是Severity: Low Confidence: High。但是如果我們用bandit去掃描利用了其他函數對危險函數的調用搭橋來二次調用的bad.py文件,我們發現是另外一種結果:

[dechin@dechin-manjaro bandit_test]$ bandit bad.py 
[main] INFO profile include tests: None
[main] INFO profile exclude tests: None
[main] INFO cli include tests: None
[main] INFO cli exclude tests: None
[main] INFO running on Python 3.8.5
[node_visitor] INFO Unable to find qualified name for module: bad.py
Run started:2021-01-26 15:30:47.370468

Test results:                            
>> Issue: [B404:blacklist] Consider possible security implications associated with subprocess module.
 Severity: Low Confidence: High                          
 Location: bad.py:3                           
 More Info: https://bandit.readthedocs.io/en/latest/blacklists/blacklist_imports.html#b404-import-subprocess                
2
3 from subprocess_Popen import subprocess as subprocess
4
5 subprocess.Popen('touch bad.txt', shell = True)

--------------------------------------------------
>> Issue: [B604:any_other_function_with_shell_equals_true] Function call with shell=True parameter identified, possible security issue.
 Severity: Medium Confidence: Low                         
 Location: bad.py:5                           
 More Info: https://bandit.readthedocs.io/en/latest/plugins/b604_any_other_function_with_shell_equals_true.html                
4
5 subprocess.Popen('touch bad.txt', shell = True)

--------------------------------------------------

Code scanned:                            
 Total lines of code: 2
 Total lines skipped (#nosec): 0

Run metrics:                         
 Total issues (by severity):
  Undefined: 0.0
  Low: 1.0
  Medium: 1.0
  High: 0.0
 Total issues (by confidence):
  Undefined: 0.0
  Low: 1.0
  Medium: 0.0
  High: 1.0
Files skipped (0):

注意這里雖然實現的功能跟上面那個例子是一樣的,但是這里的Issue編號為604,定級也變成了Severity: Medium Confidence: Low。這里的關鍵并不是定級變成了什么,而是定級被改變了,這是因為bandit是通過對字符串的處理來識別危險函數的,因此對于這種二次調用的特殊場景,bandit不一定都能夠準確的識別出來對危險函數的調用,甚至可能出現二次調用后,完全無法識別風險函數的使用的可能性。

2.掃描一個目錄下的所有py文件,并將結果寫入txt文件

[dechin@dechin-manjaro bandit_test]$ bandit *.py -o test_bandit.txt -f txt
[main] INFO profile include tests: None
[main] INFO profile exclude tests: None
[main] INFO cli include tests: None
[main] INFO cli exclude tests: None
[main] INFO running on Python 3.8.5
[node_visitor] INFO Unable to find qualified name for module: bad.py
[node_visitor] INFO Unable to find qualified name for module: subprocess_Popen.py
[text] INFO Text output written to file: test_bandit.txt

該案例就掃描了當前目錄下的所有py文件,其實就是bad.pysubprocess_Popen.py這兩個,并且將最終的掃描結果保存至test_bandit.txt文件中,這里我們就不展示txt文件的具體內容,大概就是將上一章節的兩個執行結果進行了整合。

3.掃描一個目錄下的多層文件夾中的py文件,并將結果寫入html文件

假如我們有如下所示的一個目錄結構需要進行掃描測試:

[dechin@dechin-manjaro bandit_test]$ tree
.
├── bad.py
├── bad.txt
├── level2
│ └── test_random.py
├── subprocess_Popen.py
├── test_bandit.html
└── test_bandit.txt

1 directory, 6 files
[dechin@dechin-manjaro bandit_test]$ cat level2/test_random.py 
# test_bandit.py

import random

a = random.random()

我們可以在當前目錄下執行如下指令:

[dechin@dechin-manjaro bandit_test]$ bandit -r . -f html -o test_bandit.html
[main] INFO profile include tests: None
[main] INFO profile exclude tests: None
[main] INFO cli include tests: None
[main] INFO cli exclude tests: None
[main] INFO running on Python 3.8.5
[html] INFO HTML output written to file: test_bandit.html

這里我們得到的結果是一個test_bandit.html文件,文件內容如下圖所示:

4.使用配置文件禁用部分Issue
在執行目錄下創建一個.bandit文件,作如下配置就可以避免對B404的審查:

[bandit]
skips: B404

執行的掃描結果如下圖所示,我們可以看到B404相關的Issue已經不在列表中了:

5.在py文件中直接逃避bandit審計
在待掃描的py文件的對應風險函數后加上如下注釋,即可在bandit審計過程中自動忽略:

# bad.py

from subprocess_Popen import subprocess as sb

sb.Popen('touch bad.txt', shell = 1) # nosec

這里我們可以看到最終的審計結果中,B604也隨之而不見了,如下圖所示。從這個案例中我們也可以知悉,bandit并不是一個用來作安全防護的工具,僅僅是用來做比較初步的python代碼安全函數使用規范的審查工作,而掃描出來的問題是否處理,其實最終還是取決于開發者自己。

bandit簡單性能測試

眾所周知python語言的性能是極其受限的,因此bandit的性能也有可能十分的低下,這里讓我們來定量的測試一下bandit的性能到底在什么水準。首先我們創建一個10000行的py文件,內容全部為危險函數的使用:

# gen.py

import os

with open('test_bandit_power.py', 'w') as py_file:
 py_file.write('import subprocess as sb\n')
 for i in range(10000):
 py_file.write('sb.Popen(\'whoami', shell = 1)\n')

通過執行python3 gen.py就可以生成一個10000行的危險函數文件test_bandit_power.py,大約300KB的大小。此時我們針對這單個的文件進行bandit掃描測試,我們發現這個過程極為漫長,并且生成了大量的錯誤日志:

[dechin@dechin-manjaro bandit_test]$ time bandit test_bandit_power.py -f html -o test_power.html
[main] INFO profile include tests: None
[main] INFO profile exclude tests: None
[main] INFO cli include tests: None
[main] INFO cli exclude tests: None
[main] INFO running on Python 3.8.5
[node_visitor] INFO Unable to find qualified name for module: test_bandit_power.py
[html] INFO HTML output written to file: test_power.html

real 0m6.239s
user 0m6.082s
sys 0m0.150s

我們可以簡單估算,如果10000行的代碼都需要6s的時間來進行掃描,那么對于比較大的項目的1000000+的代碼的掃描時間,則有可能達到10min往上,這個時間雖然也不是特別長,但是對于大型的項目而言這絕對不是一個非常高效的選擇。

總結概要

在一些對安全性要求較高的開發項目中,有可能會禁止使用危險函數,如subprocess等。而bandit的作用旨在通過對代碼的掃描自動化的給出安全危險函數分析意見,至于是否采納,還是以不同項目的管理者需求為準。同時經過我們的測試發現,bandit在實際使用場景下性能表現并不如意,因此在大型項目中我們并不推薦使用,如果一定要使用也可以考慮進行針對性的配置。

版權聲明

本文首發鏈接為:https://www.cnblogs.com/dechinphy/p/bandit.html
作者ID:DechinPhy
更多原著文章請參考:https://www.cnblogs.com/dechinphy/

您可能感興趣的文章:
  • Python通過kerberos安全認證操作kafka方式
  • 線程安全及Python中的GIL原理分析
  • python線程安全及多進程多線程實現方法詳解
  • 詳解python實現線程安全的單例模式
  • 利用python批量給云主機配置安全組的方法教程
  • Python簡單實現安全開關文件的兩種方式
  • python smtplib模塊發送SSL/TLS安全郵件實例
  • Python操作sqlite3快速、安全插入數據(防注入)的實例
  • 詳細總結Python常見的安全問題

標簽:德宏 長春 河池 廊坊 重慶 臨汾 東莞 漢中

巨人網絡通訊聲明:本文標題《使用bandit對目標python代碼進行安全函數掃描的案例分析》,本文關鍵詞  使用,bandit,對,目標,python,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用bandit對目標python代碼進行安全函數掃描的案例分析》相關的同類信息!
  • 本頁收集關于使用bandit對目標python代碼進行安全函數掃描的案例分析的相關信息資訊供網民參考!
  • 推薦文章
    91精品国产综合久| 中国黄色片免费看| 日韩欧美国产高清| 国产丝袜视频在线观看| 国产精品久久久久久久久电影网| 欧美性生活一区| 国产精品久久久久久久久毛片| 97超碰在线视| 中文字幕精品久久久久| 国产成人欧美日韩在线电影| 亚洲区 欧美区| 国产精品久久77777| 亚洲精品免费在线播放| 国产女片a归国片aa| 国产精品三区在线| 日韩一级片网站| 老司机精品视频网站| 精品国产午夜福利在线观看| 国产中文字幕亚洲| 欧美亚洲国产一区二区三区va | 天天av天天翘| 中文字幕在线永久| 好吊妞www.84com只有这里才有精品 | 欧美激情视频给我| 日韩欧美综合在线视频| 亚洲精品久久久狠狠狠爱| 动漫美女无遮挡免费| 国产精品尤物福利片在线观看| 欧美在线一区二区三区| 亚洲av综合色区无码一二三区| 深爱五月综合网| 国产精品视频久久| 日韩一区二区三区视频在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲av毛片基地| mm131午夜| 欧美黑人性猛交| 在线观看三级视频欧美| 韩国一区二区三区| 国产乡下妇女做爰| 国产免费又粗又猛又爽| 成人h视频在线观看| 亚洲欧美第一页| 国产亚洲一区二区三区在线观看 | 一区二区三区四区在线免费观看 | 最新av免费在线观看| 麻豆亚洲一区| 日韩女在线观看| 亚洲视频一区二区三区| 岛国精品视频在线播放| 久久综合色综合88| 人禽交欧美网站| 日韩不卡在线播放| 30一40一50老女人毛片| 韩日视频在线观看| 人妻与黑人一区二区三区| 伊人手机在线视频| 国产一级不卡毛片| 性欧美长视频免费观看不卡| 日本不卡二区| av最新在线观看| 99视频在线精品| 91精品国产91久久久久久最新毛片 | 国产婷婷一区二区三区久久| 99热精品在线播放| 不卡在线视频中文字幕| 91香蕉国产在线观看软件| 久久66热偷产精品| 亚洲人吸女人奶水| 国语自产精品视频在线看抢先版图片 | 91精品在线观看视频| 欧美大尺度在线观看| 91久久精品www人人做人人爽| 无码人妻精品一区二区三区66| 午夜老司机福利| 91麻豆精品国产无毒不卡在线观看| 欧美系列一区| 99热在线观看精品| 北条麻妃一区二区三区| 亚洲成色777777在线观看影院| 一本色道久久综合亚洲精品小说 | 成人一区在线观看| 一区二区三区在线免费播放| 久久男人av资源网站| 在线观看日本一区二区| 男女男精品视频网站| 视频在线观看一区| 欧美视频在线不卡| 亚洲国产精品影院| 久久免费成人精品视频| www精品久久| 奇米精品一区二区三区四区 | 欧美天天综合色影久久精品| 成人中心免费视频| 无码国产精品一区二区高潮| av一区二区三| 亚洲情趣在线观看| 国产亚洲精品成人av久久ww| 亚洲蜜桃av| 天天综合网日韩| 国产又黄又粗又猛又爽的视频 | 黄色三级生活片| 黄色大全在线观看| 中文字幕亚洲一区二区va在线| 日韩精品免费在线视频| 亚洲精品国产欧美| 亚洲一区影院| 日批免费在线观看| 蜜臀久久99精品久久久无需会员| 一级二级黄色片| 亚洲大片精品永久免费| 亚洲国产一区二区三区在线| 久久一日本道色综合久久| 亚洲永久免费av| 色综合久久久888| 国内外成人免费激情视频| 国产亚洲欧美精品久久久久久| 日本一区二区免费在线 | 在线观看一区二区三区三州| 真实的国产乱xxxx在线91| 日韩三区在线观看| 国产综合av一区二区三区| 国产一级久久久久毛片精品| 久久久国产一区二区三区四区小说 | 国产日产欧产精品推荐色| 欧美成人亚洲成人| 在线观看亚洲色图| 日韩中文字幕观看| 亚洲毛片在线观看.| 欧美色图亚洲自拍| 五月天视频在线观看| 欧美熟妇另类久久久久久不卡| 欧美天堂亚洲电影院在线播放| 亚洲欧洲视频在线| 91亚色免费| 丰满少妇被猛烈进入一区二区| 午夜精品在线看| 久久久久久久久久久91| 日韩无套无码精品| 成人午夜视频一区二区播放| 高清av一区二区| 欧美中文在线免费| 免费黄色在线视频| www.欧美日韩国产在线| 51色欧美片视频在线观看| 好男人www社区| 日韩av手机在线免费观看| 国产欧美一区二区在线| 插插插亚洲综合网| 精品久久久久久无码国产| 日本中文字幕免费| 高清shemale亚洲人妖| 91美女福利视频高清| 一路向西2在线观看| 亚洲午夜精品在线| 国产精品国产亚洲精品看不卡| 中文字幕在线网站| 宅男在线国产精品| 青青草av网站| 国产盗摄x88av| 天天色 色综合| 日本一区视频在线播放| 精品一区二区三区久久久| 日本一区二区在线视频| 久久先锋影音av鲁色资源网| 亚洲精品少妇一区二区| 亚洲视频综合在线| 国产成人免费高清视频| 亚洲av综合色区无码一二三区| 亚洲制服丝袜av| 亚洲国产欧美日韩| 自拍偷拍色综合| 日韩精品中文字幕在线| 99在线国产| 久久综合激情网| 欧美日韩综合视频| 亚洲国产果冻传媒av在线观看| 欧美成人精品福利| 黄色片网址在线观看| 人人妻人人藻人人爽欧美一区| 狠狠躁夜夜躁人人爽天天天天97| 欧美肥老妇视频| 日韩精品xxx| 亚洲男人的天堂在线观看| 欧美日韩精品久久久免费观看| 国产按摩一区二区三区| 性色av一区二区咪爱| 色婷婷粉嫩av| 久久综合中文字幕| 国产欧美日韩亚洲| 国产成人久久精品77777综合| 在线亚洲男人天堂| 欧美日韩不卡在线视频| 久久久不卡影院| 久久久噜噜噜www成人网| 欧美一区二区三区播放老司机| 可以免费观看av毛片| 久久久精品免费免费| 日韩欧美国产二区| 成人黄色短视频| 亚洲国产精品悠悠久久琪琪| 国产三级av在线播放| 亚洲国产日韩欧美综合久久 | 一区二区欧美久久| youjizz在线视频| 日韩精品福利在线| 蜜桃精品一区二区| 黑人狂躁日本妞一区二区三区| 伊人免费视频二| 欧美天天综合网| 中文精品无码中文字幕无码专区 | 国产一区二区三区在线观看免费视频 | 少妇丰满尤物大尺度写真| 成人丝袜18视频在线观看| 欧美日韩ab片| 国产xxxx孕妇| 欧美日韩精品综合| 一区二区三区在线视频免费观看| 懂色av粉嫩av浪潮av| 亚洲精品免费在线视频| 国产精品久久久久aaaa| 天天躁日日躁aaaa视频| 欧美激情视频三区| 99国产精品99| 99re视频在线播放| 午夜精品久久久久久久96蜜桃| 国产日韩视频在线观看| 三级网站在线播放| 国内外成人免费激情在线视频 | 欧美三级在线看| 2019男人天堂| 91久久国产婷婷一区二区| 麻豆91在线看| 国内精品二区| av日韩在线网站| 欧美精品aaaa| 国产精品天天看| 欧美亚洲免费在线| 中文字幕亚洲成人| 女人扒开腿免费视频app| 在线播放日韩专区| 成人免费视频一区| 91嫩草|国产丨精品入口| 亚洲欧美日韩精品久久久| 欧美写真视频网站| 天堂在线亚洲视频| 国产乱子伦精品无码专区| 亚洲制服丝袜在线| 91国模少妇一区二区三区| 最近2019中文字幕第三页视频 | 激情丁香综合五月| 国产精品69页| 日韩女优av电影在线观看| 亚洲 中文字幕 日韩 无码| 国产精品久久久久久久久果冻传媒| 亚洲精品成人a8198a| 不卡电影一区二区三区| 欧美不卡福利| 中文有码在线播放| caoporen国产精品| 亚洲女爱视频在线| av网页在线观看| 国产成人亚洲精品| 麻豆国产精品一区二区三区| 亚洲性猛交xxxx乱大交| 欧美一区二区三区四区五区| 小早川怜子久久精品中文字幕| 欧美大片在线观看一区| 五月天免费网站| 最近2019中文字幕在线高清| 久久青青草原亚洲av无码麻豆| 午夜精品一区二区三区在线播放| 亚洲av无码国产精品久久不卡 | 制服视频三区第一页精品| 久久亚洲无码视频| 亚洲三级 欧美三级| 久久激情免费视频| 欧美中文在线视频| 免费久久精品视频| 成人国产在线看| 色婷婷精品大视频在线蜜桃视频| 久久成人激情视频| 国内精品久久久久久| 国产在线视频一区二区| 黄色一级片黄色| 在线观看中文字幕不卡| 911国产在线| 欧美一区二区三区免费观看| 久久精品国产999大香线蕉| 国产女人18毛片| 色综合久久久久久久久久久| 美女被到爽高潮视频| 九九九久久久久久| 久久精品国产999大香线蕉| 又大又硬又爽免费视频| 欧美精品一卡两卡| 五月婷婷激情视频| 精品国产一区二区三区四区vr | 日韩视频123| 中文字幕一区二区免费| 精品在线不卡| 亚洲成人综合在线| 国产在线免费av| 国产精品久久久久久久天堂| 99国产精品99久久久久久| 三大队在线观看| 久久99视频免费| 不卡视频在线观看| 国产av一区二区三区传媒| 欧美精品性视频| 精品影视av免费| 中文字幕在线观看第三页| 精品爽片免费看久久| 手机看片福利永久| 久草精品在线播放| 色系列之999| 国产成人亚洲综合a∨婷婷图片| www.欧美激情.com| 久久精品最新地址| 久久精品72免费观看| 一区二区三区欧美精品| 欧美激情乱人伦一区| 成人毛片在线观看| 一本加勒比波多野结衣| 国产经典一区二区| 中文字幕亚洲一区二区va在线| 国产高潮国产高潮久久久91| 久久久久久亚洲精品不卡4k岛国 | 91久久一区二区| 91影院在线播放| 日本一区二区黄色| 欧美超级免费视 在线| 久久青草欧美一区二区三区| 激情五月激情综合| 久久久久久久久一区| 欧美r级在线观看| 国产美女精品一区二区三区| 午夜剧场免费看| 国产精品美女www| 一区二区三区在线播放| 中文字幕在线观看1| 黄色一级视频片| 欧美日韩国产在线播放| 神马久久久久久久久久| 稀缺小u女呦精品呦| 亚洲自拍偷拍色图| 日韩美女一区二区三区四区| 国产精品一区专区| 久久久久久久久毛片| 精品人妻大屁股白浆无码| 韩国精品久久久999| 一本色道久久综合亚洲aⅴ蜜桃 | 亚洲美女爱爱视频| 国产成人精品久久二区二区91| 同产精品九九九| 久久99热99| 熟女少妇a性色生活片毛片| 五月天在线免费视频| 69av视频在线播放| 在线播放一区二区三区| www.亚洲在线| 成人免费一级片| 美女被爆操网站| 亚洲黄色成人久久久| 久久久久久国产三级电影| 色综合久久中文综合久久97 | 三上悠亚ssⅰn939无码播放| 熟妇人妻va精品中文字幕| 精品国产一二| 精品福利一区二区三区免费视频| 国产一区二区精品久久99| 后入内射无码人妻一区| 国内外免费激情视频| 欧美乱偷一区二区三区在线| 国产91免费观看| 日韩中文综合网| 亚洲国产精品女人久久久| 欧美日韩免费观看中文| 久久久亚洲午夜电影| 国产精品一区二区久久精品爱涩| 国产福利视频导航| 欧美一区二区三区网站| 欧美日韩偷拍视频| 国产免费嫩草影院| 国产精品无码在线| 亚洲综合av在线播放| 国产精彩视频一区二区| 欧美乱偷一区二区三区在线| 国产成人精品综合| 美女久久久久久久久久久| 精品国产一区二区精华| 欧美日韩一区在线观看| 亚洲一区二区三区四区五区黄 | 日韩av在线看| 欧美日韩一区二区在线视频| 亚洲国产精品久久艾草纯爱| 欧美极品美女视频| 91色视频在线| 99久久精品免费| 国产成人h网站| 久久精品国产久精国产| 日韩激情在线观看| 日韩高清不卡在线| 国产精品影视天天线| 美女在线视频一区| 久久er99精品| 国产精品一区在线观看乱码| 国产乱对白刺激视频不卡| 韩国三级电影一区二区| 精品无码三级在线观看视频 |