New method: oob

This commit is contained in:
ruti 2024-02-29 20:07:59 +03:00
parent ac99152540
commit 5b272ac5b8
4 changed files with 63 additions and 2 deletions

View File

@ -144,6 +144,38 @@ int disorder_attack(int sfd, char *buffer,
}
int oob_attack(int sfd, char *buffer,
ssize_t n, int pos, int fa)
{
struct packet pkt = oob_data;
if (send(sfd, buffer, pos, 0) < 0) {
uniperror("send");
return -1;
}
for (int i = 0; i < pkt.size; i++) {
if (send(sfd, pkt.data + i, 1, MSG_OOB) < 0) {
uniperror("send");
return -1;
}
#ifndef _WIN32
if (pkt.size == 1) {
break;
}
struct timespec delay = {
.tv_nsec = params.sfdelay * 1000
};
nanosleep(&delay, 0);
#endif
}
if (send(sfd, buffer + pos, n - pos, 0) < 0) {
uniperror("send");
return -1;
}
return 0;
}
int desync(int sfd, char *buffer, size_t bfsize,
ssize_t n, struct sockaddr *dst)
{
@ -214,6 +246,9 @@ int desync(int sfd, char *buffer, size_t bfsize,
case DESYNC_DISORDER:
return disorder_attack(sfd, buffer, n, pos, fa);
case DESYNC_OOB:
return oob_attack(sfd, buffer, n, pos, fa);
case DESYNC_SPLIT:
default:
if (send(sfd, buffer, pos, 0) < 0) {

21
main.c
View File

@ -31,9 +31,13 @@ struct packet fake_tls = {
},
fake_http = {
sizeof(http_data), http_data
},
oob_data = {
1, "a"
};
struct params params = {
.ttl = 8,
.split = 3,
@ -71,9 +75,9 @@ const char help_text[] = {
// desync options
" -K, --desync-known Desync only HTTP and TLS with SNI\n"
#ifdef FAKE_SUPPORT
" -m, --method <s|d|f> Desync method: split,disorder,fake\n"
" -m, --method <s|d|o|f> Desync method: split,disorder,oob,fake\n"
#else
" -m, --method <s|d> Desync method: split,disorder\n"
" -m, --method <s|d|o> Desync method: split,disorder,oob\n"
#endif
" -s, --split-pos <offset> Split position, default 3\n"
" -H, --split-at-host Add Host/SNI offset to split position\n"
@ -83,6 +87,7 @@ const char help_text[] = {
" -o, --fake-http <file> Set custom fake packet\n"
" -n, --tls-sni <str> Change SNI in fake CH\n"
#endif
" -e, --oob-data <file> Set custom oob bytes\n"
" -M, --mod-http <h,d,r> Modify http: hcsmix,dcsmix,rmspace\n"
" -r, --tlsrec <offset> Make 2 TLS records\n"
" -L, --tlsrec-at-sni Add SNI offset to tlsrec position\n"
@ -111,6 +116,7 @@ const struct option options[] = {
{"fake-http", 1, 0, 'o'},
{"tls-sni", 1, 0, 'n'},
#endif
{"oob-data", 1, 0, 'e'},
{"mod-http", 1, 0, 'M'},
{"tlsrec", 1, 0, 'r'},
{"tlsrec-at-sni", 0, 0, 'L'},
@ -314,6 +320,9 @@ int main(int argc, char **argv)
case 'd':
params.attack = DESYNC_DISORDER;
break;
case 'o':
params.attack = DESYNC_OOB;
break;
#ifdef FAKE_SUPPORT
case 'f':
params.attack = DESYNC_FAKE;
@ -364,6 +373,14 @@ int main(int argc, char **argv)
}
break;
case 'e':
oob_data.data = ftob(optarg, &oob_data.size);
if (!oob_data.data) {
perror("read file");
return -1;
}
break;
case 'M':
end = optarg;
while (end && !invalid) {

View File

@ -10,6 +10,7 @@ enum demode {
DESYNC_NONE,
DESYNC_SPLIT,
DESYNC_DISORDER,
DESYNC_OOB,
DESYNC_FAKE
};
@ -43,3 +44,4 @@ struct packet {
};
extern struct packet fake_tls;
extern struct packet fake_http;
extern struct packet oob_data;

View File

@ -47,6 +47,9 @@ $ ./ciadpi --method disorder --split-pos 3
Как disorder, только перед первым запросом отправляется часть поддельного
Количество байт отправляемого из фейка равно значению split-pos,
поэтому рекомендуется использовать отрицательное значение или вкл. split-at-host
oob:
Как split, но также отсылается несколько байт вне основного потока после первой части
! Не везде может работать стабильно
-s, --split-pos <offset>
Смещение, по которому будет разбит запрос, по умолчанию 3
@ -64,6 +67,10 @@ $ ./ciadpi --method disorder --split-pos 3
-o, --fake-http <file>
Указать свои поддельные пакеты, вместо дефолтных
-e, --oob-data <file>
Данные отсылаемые вне основной потока
! При размере более одного байта может поломать сайт
-n, --tls-sni <str>
Изменить SNI в fake пакете на указанный