顯示具有 shell 標籤的文章。 顯示所有文章
顯示具有 shell 標籤的文章。 顯示所有文章

2025/06/30

之前有提到 ZAP 使用shell scan 網站的方法 
今天找到單純使用docker的做法

最常用的方法如下 stable full-scan

docker run --cpus="18" --memory 30000MB --rm -v /tmp:/zap/wrk/:rw -t ghcr.io/zaproxy/zaproxy:stable zap-full-scan.py -t https://192.168.24.206 -r 192.168.24.206.html


以下是使用 docker stable     baseline scan
 
docker run --cpus="18" --memory 30000MB --rm -v /tmp:/zap/wrk/:rw -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py -t https://192.168.24.206 -r 192.168.24.206.html


以下是使用 docker nightly update     baseline scan

docker run --cpus="18" --memory 30000MB --rm -v /tmp:/zap/wrk/:rw -t zaproxy/zap-nightly zap-baseline.py -t http://10.1.1.1 -r 10.1.1.1.html


實際跑起來快 而且方便許多

一樣用shell 來跑 

一行一個網站       

https://aa.bb.com
https://dd.ee.com

寫到  /tmp/site_to_test


#!/bin/bash

while read line
do

    echo "$line"

    docker run --cpus="18" --memory 30000MB --rm -v /tmp:/zap/wrk/:rw -t zaproxy/zap-nightly zap-baseline.py -t http://10.1.1.1 -r 10.1.1.1.html

#    docker run --cpus="18" --memory 30000MB --rm -v /tmp:/zap/wrk/:rw -t ghcr.io/zaproxy/zaproxy:stable zap-full-scan.py -t $line -r `echo $line|cut -d '/' -f 3`.html

done < /tmp/site_to_test 

如果沒使用 --rm 全部執行完成後會殘留很多 docker process
列出所有 docker process

docker ps -a

找到如下 process

CONTAINER ID   IMAGE                             COMMAND                   CREATED              STATUS                      PORTS                                       NAMES
0ec0935c4233   ghcr.io/zaproxy/zaproxy:nightly   "zap-full-scan.py -t…"   About a minute ago   Exited (2) 44 seconds ago

清除CONTAINER ID

docker rm 0ec0935c4233

列出所有docker image

docker images

REPOSITORY                TAG       IMAGE ID       CREATED        SIZE
ghcr.io/zaproxy/zaproxy   nightly   432cd81f7738   22 hours ago   2.11GB

清除 IMAGE ID image

docker rmi  432cd81f7738


2024/07/01

之前使用的 honeyports 因為OS升到 almalinux 9不能使用了
almalinux 9 不再支援 python2
另外再找了一個差不多功能 有提供 python跟shell 可以使用
不過一樣有python2的問題
所以改用shell

程式要改一下

honeyport.sh 裡第20行是設定要listen在port 31337
如果有listen在其他 port 必須修改此行 存成不同檔案 再執行

為了能批次執行 改成如下

#PORT=31337;
PORT=$1;


再來寫個shell 如下 把要listen的 port 加上去

#!/bin/bash

#revice port want to listen
port="21 22 23 ......."

for i in $port
do
        /root/honeyport.sh $i &
done

執行後就可以在log 找到相關ip並進行處理了 


https://github.com/securitygeneration/Honeyport

2020/08/27

cacti 轉換到 librenms 的過程還有一個問題就是cacti可以自己寫shell 餵值來畫圖

目前還沒看到librenms有支援

所以想到應該可以把shell 拿到的值轉成snmp丟出來

查了一下文件

總共有三種方式可以做

pass

exec

extend

在snmpd.conf裡有說明及範例

但目前 exec 試不出來

extend 看來最方便使用

在/etc/snmp/snmpd.conf 最後加上

extend script1 /tmp/test

test的內容如下

#!/bin/sh

echo "aaa"

echo "bbb"

重啟 snmpd

systemctl restart snmpd


接下來使用 snmpwalk snmpwalk 捉值就可以了


snmpwalk -v2c -c public localhost 'NET-SNMP-EXTEND-MIB::nsExtendOutLine."script1".1'

得到

NET-SNMP-EXTEND-MIB::nsExtendOutLine."script1".1 = STRING: aaa


snmpwalk -v2c -c public localhost 'NET-SNMP-EXTEND-MIB::nsExtendOutLine."script1".1'

得到

NET-SNMP-EXTEND-MIB::nsExtendOutLine."script1".1 = STRING: bbb


最後產出 OID

snmptranslate -On 'NET-SNMP-EXTEND-MIB::nsExtendOutLine."script1".1'

得到

.1.3.6.1.4.1.8072.1.3.2.4.1.2.7.115.99.114.105.112.116.49.1


https://blog.xuite.net/jyoutw/xtech/516688911-Centos+6+%E5%BB%BA%E7%AB%8B%E8%87%AA%E5%AE%9A%E7%BE%A9%E7%9A%84+SNMP+OID

2020/08/19

 在shell使用lftp時出現一個問題

就是如果server連不上就會一直卡住

因為是使用crontab去撈資料

所以會有很多process都卡住

為了解決這個問題

必須設定timeout

在user的家目錄

mkdir .lftp

cd .lftp

vi rc

內容如下 可依需求修改

set net:timeout 5

set net:max-retries 2

set net:reconnect-interval-base 5


醬就ok了

2020/01/04

目前手边還有一台 graylog2 的 ova
因為是 ubuntu 14.04的版本
而且 elasticsearch 也EOL
之前就一直想upgrade
只是一直沒動作

因為有10T的資料
不太可能花時間去搬
目前想保留然後再架一台新的graylog3 ova

graylog2改ip要重跑 graylog-ctl reconfigure

但跑了二次 跑完後就掛了

所以改用另一個方式
在graylog2上起一個output output 把資料送到 graylog3
同時保留二份
然後graylog2再慢慢砍資料
最後把graylog2 關几
把graylog3改成graylog2的ip
graylog3改ip只要重開几就好
不用再其他設定 很方便

找出最舊index並刪除的 shell 如下

#!/bin/bash

i=`/usr/bin/curl -u admin:passwd 'http://10.0.0.1:9200/_cat/indices/graylog*?v'|grep close|awk '{print $2}'|sort -rn -t_ -k 2|tail -n 1`
echo $i
/usr/bin/curl -XDELETE "http://10.0.0.1:9200/$i/"


另外 graylog3 ova 使用的是 ubuntu 18.04
預設的網路設定方式是 netplan
用的實在不順
如果要改回 /etc/network/interfaces
要先安裝 ifupdown

sudo apt install ifupdown

設定好 /etc/network/interfaces

再 rm -rf /etc/netplan/*

重開几即可

2018/03/22

graylog偶爾還是會發生buffer滿載的情況
想說來監控一下
目前觀察到當 process buffer 和 output buffer都滿就會往回塞到disk journal 因此就直接monitor disk jounrnal

第一步就是要把graylog目前的相關資料取出來

但因為graylog只提供jason的格式 並不方便操作
所以再使用 jq 轉換 以利值的讀取
指令如下 直接取出值

curl -u user:passwd 'http://1.2.3.4:9000/api/system/metrics'|jq . |grep -A 1 journal.entries-uncommitted |grep value |awk '{print $2}'

再利用以上的值來比對設定的基準 高於就發alarm

https://stedolan.github.io/jq/

2018/01/07

延續昨天的問題
程式跑一個晚上砍不到10000筆 XD
早上停掉
找了一下資料
改用另一種跑法

一樣是先把要砍的欄位資料撈出來
之後以一萬筆為單位拆開 做完後從資料中清除
如下

先把找出來的cid先排序 才能使用 comm 指令

sort data > data_s
mv data_s data

get_10000

sed -n '1,10000p' data > data_del
#grep -v -f data_del data > data_tmp
comm -1 -3 data_del data > data_tmp
mv -f data_tmp data

利用上述的檔案生成sql 語法

del_data_10000

for i in `cat data_del`
do
    echo -n $i" ,"
done > 000

echo -n 999999999 >> 000

mysql -u user -p123456 snort -e"delete from event where cid in (`cat 000`);"



一次跑100個loop

#!/bin/bash

for i in {1..100};
do
    echo $i" times"

    ./get_10000
    echo "get ok"
    ./del_data_10000
    echo "del ok"

    wc data
    echo " "

done

速度快多了

2018/01/06

前一陣子不知是因為FP還是真的有那麼多攻擊
導致snort的資料庫塞了一堆 OS-WINDOWS Microsoft WINS arbitrary memory modification attempt 有五百多萬筆 XD

rule 是以下這個

alert udp $EXTERNAL_NET any -> $HOME_NET 1027:5000 (msg:"OS-WINDOWS Microsoft WINS arbitrary memory modification attempt"; sid:13826; gid:3; rev:6; classtype:attempted-admin; reference:cve,2008-1451; reference:url,technet.microsoft.com/en-us/security/bulletin/MS08-034; metadata: engine shared, soid 3|13826;)

然後整個web畫面就慢的夭壽慢 一直放著沒處理
今天想想來處理

首先先把 acid_event 這個 table 裡有關 OS-WINDOWS Microsoft WINS arbitrary memory modification attempt 的 cid 找出來

select cid from acid_event where sig_name='OS-WINDOWS Microsoft WINS arbitrary memory modification attempt';

然後寫個 shell 到 event table 去全砍了

#!/bin/bash

for i in `cat 123`
do

    echo $i
    mysql -u user -p123456 snort -e"delete from event where cid=$i;"

done

或直接寫個sql 
DELETE FROM tb1 WHERE tb1.a in (SELECT k from tb2);

接下來再 使用之前寫過的清資料的方法

再跑一次

2017/12/21

最近在graylog上碰到搜尋都OK
除了要匯出成csv會很慢
不過這個問題應該跟接下來要討論的是同一個問題

使用rest撈資料時發生有時撈得到有時撈不到的情況
但確定指令沒下錯 而且確定語法一定有資料可以出來
於是寫了一個shell來試

#!/bin/bash
i=1
while :
do
echo $i
curl -m 240 -u user:pwd 'http://10.0.0.1:9000/api/search/universal/keyword?query=nf_dst_address%3A192.168.12.220&keyword=last%2020%20hours&fields=message&limit=1'
        i=`expr $i + 1`
sleep 3
done

出現以下的結果

1
2
3
4
"timestamp","message"
"2017-12-20T10:09:23.000Z","NetFlowV5 [210.65.47.55]:443 <> [192.168.12.220]:42702 proto:6 pkts:1 bytes:52"
5
"timestamp","message"
"2017-12-20T10:09:23.000Z","NetFlowV5 [210.65.47.55]:443 <> [192.168.12.220]:42702 proto:6 pkts:1 bytes:52"
6
"timestamp","message"
"2017-12-20T10:09:23.000Z","NetFlowV5 [210.65.47.55]:443 <> [192.168.12.220]:42702 proto:6 pkts:1 bytes:52"
7
8
"timestamp","message"
"2017-12-20T10:09:23.000Z","NetFlowV5 [210.65.47.55]:443 <> [192.168.12.220]:42702 proto:6 pkts:1 bytes:52"
9
"timestamp","message"
"2017-12-20T10:09:23.000Z","NetFlowV5 [210.65.47.55]:443 <> [192.168.12.220]:42702 proto:6 pkts:1 bytes:52"
10
11
12
"timestamp","message"
"2017-12-20T10:09:23.000Z","NetFlowV5 [210.65.47.55]:443 <> [192.168.12.220]:42702 proto:6 pkts:1 bytes:52"
13
"timestamp","message"
"2017-12-20T10:09:23.000Z","NetFlowV5 [210.65.47.55]:443 <> [192.168.12.220]:42702 proto:6 pkts:1 bytes:52"

而且在管理介面上看到的狀況如下圖



















找了很多資料 調了很多參數都沒用 直覺是個bug

2017/06/05

昨天突然在想是不是可以在graylog上直接用值畫出圖形
因為在fields展開後有四個選項可以操作













上圖的 Generate chart 應該就可以畫圖
而 Statistics 是相關的記錄及統計
但當點下去時出現









只能針對數字定義的欄位才能使用
看來必須要設定Extractor對message拆解並定義後才行了
因此先吐一筆測試資料到graylog

echo "testiiiiii 20"|nc 10.0.0.1 1234

再利用這筆資料來產生Extractor





















如上圖 主要的重點是必須定義該拆解出來的欄位值是數字
目前支援的定義如下圖 依所需值不同的位數來選擇不同的定義
目前的範例是定義為int



















定義好後接下來進到graylog的資料就會被拆解如下圖
num_test這個欄位就拆解出來而且被定義為int











接下來就可以使用 Generate chart 及 Statistics 產生如下的二張報表














在圖上就可以看到用數值畫出來的圖及統計的結果了
Generate chart還可以依不同需求產生不同的圖










cacti上寫shell也可以達到相同的目的
但操作上會複雜許多
目前想到可以利用個這個來畫出溫度及統計並利用alert功能來進行
溫度超標的通知
應該是滿方便的

http://docs.graylog.org/en/2.2/pages/extractors.html

2017/03/14

如何在shell中直接下mysql的指令

mysql -u root -p1234 database -e"select * from data;" >> $tmp/data_from_db

如果不想顯示column 名稱 要加上 -N

mysql -u root -p1234 database -N -e"select * from data;" >> $tmp/data_from_db

2016/11/24

在linux shell中常常會需要判斷某個檔案內是否有特定字串
或是某個指令執行有沒有成功
視情況以進行接下來的處理
之前都是用grep把結果導到/tmp
再用test去判斷檔案是否存在
其實也可以用$?來判斷
$?是shell中一個特別的變數
如果上一個指令成功則為0
反之則為1
範例如下

grep error file
[ $? == 0 ] && echo "not ok"

假設file 內有error這個字串
則印出 not ok

http://c.biancheng.net/cpp/view/2739.html

2016/10/08

假設檔案內的文字或字串是以特殊符號分隔
如 , . ; - 或空白等等
要如何在shell中隔開後取出
此時就必須利用IFS

範例如下

#!/bin/bash                                                                                                                                                                                                    
IFS=" "
export IFS;

words="abb cdd eff"

for word in $words; do
    echo "$word"
done

輸出為
abb
cdd
eff

http://blog.roga.tw/2011/05/2516

2016/08/12

一直以來在shell中都比較習慣使用cut來切割字串
但在log裡總是會碰到一個問題
就是在月份的單日會多一個空格
此時cut就會有問題
導致程式出狀況
awk就不會有這個問題

ex:

Aug  7 03:30:11 mail snmpd[2067]: Connection from UDP

Aug 12 08:30:10 mail snmpd[2067]: Connection from UDP

用cut和awk就會出現不同的結果
如下

cat ex |cut -d ' ' -f 3
7
08:30:10

cat ex |awk '{print $3}'
03:30:11
08:30:10

因此在取空格時 建議使用awk 比較不會有因空格造成的問題

http://www.xlgps.com/article/350744.html

2016/06/10

在shell 中呼叫 python 可以把變數一起丟給python

#!/bin/bash
var1=a
var2=b
python test.py $var1 $var2


test.py 內容如下

import sys
print sys.argv[0] # prints python_script.py
print sys.argv[1] # prints var1
print sys.argv[2] # prints var2


輸出結果為
test.py
a
b

在shell中 awk是不能直接使用shell定義的變數的
必須在awk的一開頭定義
範例如下

#!/bin/bash
a=3
b=4

awk -v a=$a -v b=$b '$1 == a {print $2}' test_data

2016/02/24

今天有人問到如何把指令的結果同時輸出到螢幕及檔案
使用tee

date | tee -a today

2015/11/19

今天有個需求
要知道目前所有使用的 poe switch 的型號
找了一下cacti好像沒辦法直接看到資料
database裡好像也沒有一個table有放
看來只好自己撈了

先把ip取出來

select hostname from host;

整理後存成 switch
再寫個shell

#!/bin/bash
for i in `cat switch`
do
echo $i
snmpwalk -v 2c -c public $i iso.3.6.1.2.1.1.1.0
done

完成

2014/11/09

今天有朋友問到要如何限制user登入後只能在home directory活動
找到一個方式很簡單
只要在/etc/passwd把user 的shell改成rbash就好了
超方便

http://www.cyberciti.biz/faq/restrict-linux-users-to-their-home-directories-only/

2014/08/23

測 i/o 小script

#!/bin/bash
rm 1.iso
dd if=/dev/zero of=1.iso bs=1G count=8
while [ true ]
do
        date >> io_test_log
        rm 2.iso
        cp 1.iso 2.iso
        date >> io_test_log
        echo "=========================" >> io_test_log
done