From b3f6e90b9a1eb90f1c9fff0432972ea691dbe62e Mon Sep 17 00:00:00 2001 From: MDLeom <2809763-curben@users.noreply.gitlab.com> Date: Thu, 7 Mar 2024 10:09:32 +0000 Subject: [PATCH] feat: remove phishtank source frequent interference from cloudflare captcha --- src/script.sh | 55 ++++----------------------------------- utils/csvquote-bin-glibc | Bin 27496 -> 0 bytes utils/csvquote-bin-musl | Bin 23016 -> 0 bytes 3 files changed, 5 insertions(+), 50 deletions(-) delete mode 100755 utils/csvquote-bin-glibc delete mode 100755 utils/csvquote-bin-musl diff --git a/src/script.sh b/src/script.sh index 6371a671..5f444462 100644 --- a/src/script.sh +++ b/src/script.sh @@ -37,18 +37,6 @@ check_grep() { check_grep -## Detect Musl C library -LIBC="$(ldd /bin/ls | grep 'musl' || [ $? = 1 ])" -if [ -z "$LIBC" ]; then - rm "/tmp/musl.log" - # Not Musl - CSVQUOTE="../utils/csvquote-bin-glibc" -else - # Musl - CSVQUOTE="../utils/csvquote-bin-musl" -fi - - ## Fallback to busybox's dos2unix if installed if ! command -v dos2unix &> /dev/null then @@ -66,29 +54,12 @@ fi mkdir -p "tmp/" cd "tmp/" -USER_AGENT="phishtank/malware-filter" -if [ -n "$GITLAB_USER_LOGIN" ]; then - USER_AGENT="phishtank/$GITLAB_USER_LOGIN" -elif [ -n "$GITHUB_REPOSITORY_OWNER" ]; then - USER_AGENT="phishtank/$GITHUB_REPOSITORY_OWNER" -fi - ## Prepare datasets -if [ -n "$PHISHTANK_API" ]; then - curl --user-agent "$USER_AGENT" \ - "https://data.phishtank.com/data/$PHISHTANK_API/online-valid.csv.bz2" -o "phishtank.bz2" -else - curl --user-agent "$USER_AGENT" \ - "https://data.phishtank.com/data/online-valid.csv.bz2" -o "phishtank.bz2" -fi - curl "https://openphish.com/feed.txt" -o "openphish-raw.txt" curl "https://github.com/0xDanielLopez/TweetFeed/raw/master/week.csv" -o "phishunt.csv" curl "https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m.csv.zip" -o "top-1m-umbrella.zip" curl "https://tranco-list.eu/top-1m.csv.zip" -o "top-1m-tranco.zip" -bunzip2 -kc "phishtank.bz2" > "phishtank.csv" - ## Cloudflare Radar if [ -n "$CF_API" ]; then mkdir -p "cf/" @@ -118,26 +89,14 @@ fi ## Parse URLs -cat "phishtank.csv" | \ +cat "openphish-raw.txt" | \ +dos2unix | \ tr "[:upper:]" "[:lower:]" | \ -## Workaround for column with double quotes -"./$CSVQUOTE" | \ -cut -f 2 -d "," | \ -"./$CSVQUOTE" -u | \ -sed 's/"//g' | \ cut -f 3- -d "/" | \ # Domain must have at least a 'dot' grep -F "." | \ sed "s/^www\.//g" | \ # url encode space #11 -sed "s/ /%20/g" > "phishtank.txt" - -cat "openphish-raw.txt" | \ -dos2unix | \ -tr "[:upper:]" "[:lower:]" | \ -cut -f 3- -d "/" | \ -grep -F "." | \ -sed "s/^www\.//g" | \ sed "s/ /%20/g" > "openphish.txt" cat "phishunt.csv" | \ @@ -149,11 +108,7 @@ grep -F "." | \ sed "s/^www\.//g" > "phishunt.txt" ## Combine all sources -cat "phishtank.txt" \ - "openphish.txt" | \ - # #43 #45 - # "phishunt.txt" | \ -sort -u > "phishing.txt" +sort -u "openphish.txt" > "phishing.txt" ## Parse domain and IP address only cat "phishing.txt" | \ @@ -276,7 +231,7 @@ SECOND_LINE="! Updated: $CURRENT_TIME" THIRD_LINE="! Expires: 1 day (update frequency)" FOURTH_LINE="! Homepage: https://gitlab.com/malware-filter/phishing-filter" FIFTH_LINE="! License: https://gitlab.com/malware-filter/phishing-filter#license" -SIXTH_LINE="! Sources: phishtank.com, openphish.com, phishunt.io" +SIXTH_LINE="! Sources: openphish.com, phishunt.io" COMMENT_UBO="$FIRST_LINE\n$SECOND_LINE\n$THIRD_LINE\n$FOURTH_LINE\n$FIFTH_LINE\n$SIXTH_LINE" mkdir -p "../public/" @@ -465,7 +420,7 @@ sed "2s/Domains Blocklist/Hosts Blocklist (IE)/" > "../public/phishing-filter.tp ## Clean up artifacts -rm "phishtank.csv" "top-1m-umbrella.zip" "top-1m-umbrella.txt" "top-1m-tranco.txt" "openphish-raw.txt" "phishunt.csv" "cf/" "top-1m-radar.txt" +rm "top-1m-umbrella.zip" "top-1m-umbrella.txt" "top-1m-tranco.txt" "openphish-raw.txt" "phishunt.csv" "cf/" "top-1m-radar.txt" cd ../ diff --git a/utils/csvquote-bin-glibc b/utils/csvquote-bin-glibc deleted file mode 100755 index 5649d8e866d3b21f04a964dc58ce4ef91b75e604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27496 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≪#m?F_oBp6kB-_D(}z#fIshc=Z*s8kjc=PD~L z0{9kPdDLAqN;rL{S)x}u{r2Zw2jg6nG|3UCczeUQa_uBz# zRHRo0;Qr&OSN&QDcW9A513)p6#iiea%LPC8&5X**Oer9l`cC=$&s2)&B$+ zf7b<>Onvn}KT;zkI+UPy)W%xrIg zrQ2WG`2iSsDmL}iJc8}d)TjPMO(ZW@^ZiWyotJacf7OhtT-A>M23-;&pZjiE~O&!rb_iZcd1}q_bNn49N250i}Djaz~BdSnO{0 gJ)t4a!}6=eKGiWLGuPKikW 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 M(^_IsFre&z0NToTX8-^I