Извлечь mysql запрос из tcpdump - PullRequest
0 голосов
/ 27 мая 2020

Я использую tcpdump для захвата TCP-пакета с порта 3306, который перенаправляется на MySQL сервер

sudo tcpdump -X -i ens5 -s 0 -tttt dst port 3306

и выполняется SQL select * from user_trading_volume limit 1 от MySQL клиента

полученный результат ниже

2020-05-27 07:46:44.330084 IP ip-10-0-1-33.ap-northeast-2.compute.internal.59750 > ip-10-30-1-179.ap-northeast-2.compute.internal.mysql: Flags [P.], seq 1945:2020, ack 16715, win 512, options [nop,nop,TS val 3790143765 ecr 4258512397], length 75
0x0000:  4500 007f 54fb 4000 4006 ce8c 0a00 0121  E...T.@.@......!
0x0010:  0a1e 01b3 e966 0cea 76a0 9245 c975 2466  .....f..v..E.u$f
0x0020:  8018 0200 1763 0000 0101 080a e1e9 0115  .....c..........
0x0030:  fdd3 be0d 1703 0300 46f5 525d 17c9 20ac  ........F.R]....
0x0040:  62e6 fcdc ba82 11fc 91c2 c187 7ca8 a542  b...........|..B
0x0050:  6ed8 a1fa b1d8 01bd 1240 61d9 686e 183d  n........@a.hn.=
0x0060:  f2fc 9b9a a62d c212 8d4d e1c6 e67a 4bdc  .....-...M...zK.
0x0070:  ea2e 75dc 68cf 5c45 1721 2ced c511 ca    ..u.h.\E.!,....

2020-05-27 07:46:44.331029 IP ip-10-0-1-33.ap-northeast-2.compute.internal.59750 > ip-10-30-1-179.ap-northeast-2.compute.internal.mysql: Flags [.], ack 17677, win 505, options [nop,nop,TS val 3790143766 ecr 4258513778], length 0
0x0000:  4500 0034 54fc 4000 4006 ced6 0a00 0121  E..4T.@.@......!
0x0010:  0a1e 01b3 e966 0cea 76a0 9290 c975 2828  .....f..v....u((
0x0020:  8010 01f9 1718 0000 0101 080a e1e9 0116  ................
0x0030:  fdd3 c372        

, но захваченный пакет не читался (что означает не ASCII)

Я использую AWS aurora (mysql 5.7)

Кто-нибудь знает, что означает этот пакет?

PS. Я тоже пробовал это в своей локальной среде и смог получить соответствие SQL из пакета, как показано ниже (запустите mysql в контейнере docker и выполнил запрос через mysql workbench)

16:59:46.628631 IP (tos 0x0, ttl 64, id 59587, offset 0, flags [DF], proto TCP (6), length 98)
    view-localhost.52652 > view-localhost.3318: Flags [P.], cksum 0xfe56 (incorrect -> 0x1538), seq 61:107, ack 899, win 512, options [nop,nop,TS val 632447157 ecr 632447154], length 46
E..b..@.@.S...............@....=.....V.....
%.`.%.`.*....select * from user_trading_volume limit 1

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Глядя на первый байт, это выглядит как два необработанных IP-пакета (45 => версия IP 4 , типичный 20-байтовый заголовок ( 5 * 4 байта). В Википедии есть дополнительная информация на заголовки IP .

Преобразование в pcap

Таким образом, мы сможем преобразовать это обратно в pcap. Мы можем преобразовать этот текстовый дамп в захват пакета, используя text2pcap , утилита командной строки, поставляемая с Wireshark.

С заданным текстом в виде файла temp мы можем преобразовать его в pcap

$ cat temp | grep -v 2020 | cut -c3-49 | sed 's/ \(\w\w\)/ \1 /g' \
 | text2pcap -l 101 - temp.pcap
Input from: Standard input
Output to: temp.pcap
Output format: pcap
Wrote packet of 127 bytes.
Wrote packet of 52 bytes.
Read 2 potential packets, wrote 2 packets (235 bytes).

Дезинфекция ввода text2pcap

Здесь мы дезинфицируем ввод, чтобы text2pcap не выходил из строя:

  • grev -v 2020: удалить информационные строки 2020 ...
  • cut -c3-49: удалить предыдущее представление 0x и ASCII
  • sed 's/ \(\w\w\)/ \1 /g': преобразовать шестнадцатеричный дамп из 2 байтов, затем пробела в 1 байт, затем пробел (09ab => 09 ab)
  • text2pcap -l 101 - temp.cap: чтение из стандартного ввода и запись в temp.pcap как необработанные IP-пакеты (см. Ниже)

Теперь вы можете просмотреть этот захват в * 10 39 * Wireshark , чтобы увидеть, что это за поля.

Определение номера уровня ссылок для text2pcap

Возвращаясь к начальному байту, этот байт запускает уровень IP, когда обычно уровень ссылок как Ethe rnet запускает пакет. Это означает, что мы не можем использовать типичный канальный уровень 1 (Ethe rnet). Канальный уровень для необработанного IP-адреса - 101, поэтому нам нужно указать его с text2pcap как -l 101. - - стандартный ввод, а затем мы записываем файл как temp.pcap.

Что означает пакет?

При загрузке в Wireshark полезная нагрузка пакета 1 составляет 75 байтов, и это не ASCII. Вы, вероятно, захотите вручную декодировать эти байты, используя ссылку MySQL протокол . Потому что согласно документам,

Протокол MySQL используется между MySQL клиентами и MySQL сервером.

0 голосов
/ 27 мая 2020

вы можете использовать tcpdump для захвата данных, а затем с помощью опции -w перенаправить их в файлы. затем загрузите его с помощью wirehark.

https://www.wireshark.org/docs/wsug_html_chunked/AppToolstcpdump.html

...