- เปิด Google Sheets : GASWS1
- สร้าง Sheet ใหม่ ชื่อ “Log”
- เมนู Tools > Script Editor…
- เมนู File > New > Script File
- ตั้งชื่อ: myscript4
- เขียนโค๊ดตามนี้
function check_website(url) { var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true}); return response.getResponseCode(); } function doLog(timestamp, responseCode, timeDiff) { var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Log")); sheet.appendRow([timestamp, responseCode, timeDiff]); } function getTime() { var startTime = new Date() ; var responseCode=check_website("http://www.psu.ac.th"); var endTime = new Date() ; var timeDiff = endTime-startTime; doLog(Utilities.formatDate(new Date(), "GMT+7", "yyyyMMdd-HHmmss") , responseCode , timeDiff); }
- เมนู Resources > All yours triggers
คลิก No triggers set up. Click here to add one now.
ตั้งค่า
Run = getTime
Event = Time-driven
แล้วเลือกเป็น Minutes timers และ Every minute
จากนั้นคลิกปุ่ม Save
Author: kanakorn.h
-
Case Study: ตรวจสอบ Website Availability ด้วย Google Apps Script
-
อ่าน/เขียนข้อมูลกับ Google Sheets
- เปิด Google Sheets : GASWS1
- เมนู Tools > Script Editor…
- เมนู File > New > Script File
- ตั้งชื่อ: myscript3
- สร้าง function insertData1() ตามนี้
function insertData1() { var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Sheet1")); sheet.getRange(1, 1).setValue("Hello World"); sheet.getRange("A2").setValue("สวัสดี"); var v1=[ ["ชื่อ","นามสกุล","อายุ"] ]; var v2=[ ["สมชาย"] ,["Robert"] ,["39"] ]; sheet.getRange("A3:C3").setValues(v1); sheet.getRange("A4:A6").setValues(v2); }
- เมนู Run > insertData1
- สร้าง function insertData2() ตามนี้
function insertData2() { var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Sheet1")); sheet.appendRow([new Date(),"something"]); }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > insertData2
- เมนู Resources > All yours triggers
คลิก No triggers set up. Click here to add one now.
ตั้งค่า
Run = insertData2
Event = Time-driven
แล้วเลือกเป็น Minutes timers และ Every minute
จากนั้นคลิกปุ่ม Save - ไปที่ Google Sheets “GASWS1”
- สร้าง Sheet ใหม่ ชื่อ “ReadData”
- เมนู Tools > Script Editor…
- สร้าง function readData1() ตามนี้
function readData1(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("ReadData")); var url="https://docs.google.com/spreadsheets/d/1oztRXjC2KJzrqC3LtiRnUPrEgohX4VTYHixylvtCdzY/edit?usp=sharing"; var db=SpreadsheetApp.openByUrl(url); var table=db.setActiveSheet(db.getSheetByName("WGHCEPA")); var data=table.getRange("A1:J10").getValues(); for (var i=0; i<data.length;i++){ sheet.appendRow(data[i]); } }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > readData1
- สร้าง function readData2() ตามนี้
function readData2(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("readData")); var id="1oztRXjC2KJzrqC3LtiRnUPrEgohX4VTYHixylvtCdzY"; var db=SpreadsheetApp.openById(id); var table=db.setActiveSheet(db.getSheetByName("WGHCEPA")); var data=table.getDataRange().getValues(); for (var i=0; i<data.length;i++){ sheet.appendRow(data[i]); } }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > readData2
- สร้าง function insertData3() ตามนี้
function insertData3(){ var url="https://docs.google.com/a/psu.ac.th/spreadsheets/d/1bQyyQrB3PPyawWVb3afMi0Kgz1KUibIfMblv351BtQI/edit?usp=sharing"; var db=SpreadsheetApp.openByUrl(url); var table=db.setActiveSheet(db.getSheetByName("Sheet1")); // เปลี่ยนเป็น ชื่อ นามสกุล และคณะ/หน่วยงานของท่าน var mydata=["ชื่อ","นามสกุล","คณะ/หน่วยงาน"]; table.appendRow(mydata); }
- เมนู File > Save หรือ กดปุ่ม Ctrl+s
- เมนู Run > insertData3
-
Google Apps Scripts Workshop – Level 1
- เริ่มต้นใช้งาน GAS Editor
- อ่าน/เขียนข้อมูลกับ Google Sheets
- Case Study: ตรวจสอบ Website Availability ด้วย GAS
- แทนที่ข้อความ ด้วยค่าใน Google Sheets
- การสร้างไฟล์ PDF จากข้อความที่ต้องการ
- การส่งอีเมลถึงผู้รับตามที่กำหนด พร้อมแนบข้อความ/ไฟล์ที่ต้องการ
- การส่งไฟล์ทางอีเมลแบบ Top Secret!
- การแสดงผลจำนวน Quota การส่งอีเมลที่ยังเหลืออยู่ในรอบ 24 ชั่วโมง
-
Shell Script : Grouping and Summation
มี Log ขนาดใหญ่ แล้ว ต้องการจะวิเคราะห์ข้อมูลของนาทีที่ผ่านมา เลือกเฉพาะรูปแบบที่ต้องการด้วยคำสั่ง
grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'
ได้ผลมาประมาณนี้
ต้องการเอาข้อมูล X และ Y จากรูปแบบนี้ from=<X> และ nrcpt=Y ใช้ความรู้จาก Shell Script: Extract exact pattern from string ใช้คำสั่งต่อไปนี้
grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'|sed -n 's/.*\sfrom=<\(.*\)>.*\snrcpt=\(.*\)\s(.*/\1:\2/p'
ได้ผลมาประมาณนี้
ต้องการจับกลุ่มตาม คอลัมน์ที่ 1 แล้วหาผลรวมของคอลัมน์ที่ 2 ในแต่ละกลุ่ม ใช้คำสั่ง
grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'|sed -n 's/.*\sfrom=<\(.*\)>.*\snrcpt=\(.*\)\s(.*/\1:\2/p' | awk 'BEGIN{FS=OFS=":"}{a[$1]+=$2}END{ for (i in a) print i,a[i]}'
ได้ผลดังนี้
Reference:
http://unix.stackexchange.com/questions/169215/group-by-and-sum-in-shell-script-without-awk
-
Shell Script : Extract exact pattern from string
มี string ดังนี้ ในตัวแปร line
line=’Apr 18 06:04:57 webmail squirrelmail: Message sent via webmail: by username.s (psu.ac.th) at 41.203.69.5 on 04/17/2015 23:04:57: Message-ID: 98f9739438686e127bcb8547fea7ed82.squirrel@webmail.psu.ac.th Total 9 recipients Message-ID: 98f9739438686e127bcb8547fea7ed82.squirrel@webmail.psu.ac.th’
ต้องการค่าที่อยู่ระหว่าง Total … recipients
ใช้คำสั่งนี้
total=$(echo $line | sed -n ‘s/.*Total \([[:digit:]]*\) recipients.*/\1/p’)
ตัวแปร $total จะมีค่า 9 ตามที่ต้องการ
อธิบาย
คำสั่ง
sed -n ‘s/PATTERN/&/p’
จะแสดงข้อความที่ตรงกับ Pattern เท่านั้น ไม่แสดงข้อความอย่างอื่่นReference:
http://www.grymoire.com/Unix/Sed.html#uh-15 -
Spam-20150420-01
หากท่านได้รับ Email ในลักษณะดังภาพต่อไปนี้ … นี่เป็นจดหมายหลอกลวง !!!
สิ่งที่ต้องทำ !
- ห้ามคลิกลิงค์ใดๆ: เพราะมันจะนำไปสู่เว็บไซต์หลอกลวงเอาข้อมูลส่วนตัว รหัสผ่าน และข้อมูลทางการเงินได้ หรือ อาจจะถูกฝังโปรแกรมดักจับข้อมูลในเครื่องของท่านได้ โดยไม่มีการเตือน
- ห้าม Reply, Forward : เพราะท่านกำลังทำให้เกิดการแพร่กระจาย และ ตกเป็นเป้าหมายต่อไปทันที
- ให้ลบทิ้งทันที
หากคลิก หรือ พลาดบอกรหัสผ่านไปแล้ว
- ให้ตั้งรหัสผ่านใหม่ทันที !!! และต้องแตกต่างจากเดิมโดยสิ้นเชิง
- หาก Reply ไปตอบโต้กับผู้ส่ง ท่านต้องระวังตัวมากขึ้น เพราะจะมีจดหมายหลอกลวงอื่นๆจำนวนมากที่จะวิ่งเข้ามาหาท่าน
ทางมหาวิทยาลัย จะไม่ส่งจดหมายแจ้งเตือน/สอบถามรหัสผ่านจากท่านเด็ดขาด
ดูลักษณะ จดหมายหลอกลวงได้ที่นี่ http://sysadmin.psu.ac.th/tag/spamtoday/ -
วิธีทำระบบกล้องวงจรปิดที่บ้านแบบประหยัด + ดูผ่าน Internet โดยไม่ต้องทำ Port Forward
อยากมีกล้องวงจรปิดที่บ้านแบบประหยัดงบ เชิญอ่าน …
แนวคิด: ใช้งานสิ่งที่มีอยู่ ซื้อเท่าที่จำเป็น บันทึกวิดีโอได้ตามช่วงเวลาที่กำหนด (06:00-18:00) นอกช่วงเวลาบันทึกเฉพาะเมื่อมีความเคลื่อนไหว (Motion Detection) (00:00-06:00) ระบบสามารถลบวิดีโอที่อายุเกินกำหนดได้ และสามารถดูได้จาก Internet โดยไม่ต้องทำ Port Forward (บ้านที่มี ADSL ไม่สามารถ Fix IP ได้ แถมบางค่ายให้ NAT IP มาที่ Router อีก ยิ่งทำยาก)
สิ่งที่มีอยู่แล้ว:
กล้อง: สามารถใช้งาน Smart Phone เก่าๆ เช่น Samsung Galaxy Mini + ติดตั้งโปรแกรม IPCamera โดย Fix IP: 192.168.2.21
PC: Notebook เครื่องเก่า เป็น Windows 7 ติดตั้งโปรแกรม Open Source ชื่อ iSpy หรือ จะใช้ VLC ก็ได้ (ค่อยเขียนบทความต่อไป สำหรับคนที่จะใช้ Linux Server)
Wireless Network:
TP-Link TD-W8961ND
ซื้อเพิ่ม:
กล้อง Network Camera: D-Link DCS-930L ราคา 1,290 บาท โดย Fix IP: 192.168.2.22
เลือกรุ่นนี้เพราะ พื้นที่ที่ต้องการจับภาพไม่จำเป็นต้องมี Infrared ไว้ดูตอนกลางคืน สามารถตั้งเวลาที่จะเชื่อมต่อจาก Internet ได้ (เพื่อความปลอดภัย) ,มี Motion Detect ซึ่งเพียงพอต่อความต้องการแล้ว และ กล้องของ D-Link มีสิ่งที่เรียกว่า mydlink Cloud Access ทำให้สามารถเชื่อมต่อกล้องจาก Internet ได้โดยไม่ต้องทำ Port Forward (หากใครไม่ชอบ ก็ปิดได้)
การติดตั้ง:
กล้องของ Android ที่ติดตั้ง IPCamera Apps ไป จะสามารถเข้าถึงวิดีโอได้ที่ http://a.b.c.d:8080/video โดยสามารถตั้ง Username/Password ได้ตามต้องการ
กล้องของ D-Link DCS-930L เมื่อแกะกล่อง ก็เสียบสายไฟ แล้วไปกดปุ่ม WPS ที่ Router ระบบก็จะเชื่อมต่อกล้องเข้ากับระบบแล้ว หรือถ้าไม่มี WPS ก็ต่อสาย LAN เข้ากับ Port ของกล้อง และ Fix IP ของ Network Card ของคอมพิวเตอร์ ให้เป็น 192.168.0.2 แล้วเปิดเว็บไปที่ http://192.168.0.20 เพื่อเข้าไปบริหารจัดการกล้อง จากนั้น เมื่อจะเข้าถึงวิดีโอได้ที่ http://a.b.c.d/video/mjpeg.cgi โดยสามารถตั้ง Username/Password ได้ตามต้องการ
ที่ Router ให้เข้าไปใน Router Configuration เพื่อ Fix IP กับ MAC Address ของกล้อง เป็นอันเรียบร้อย
โปรแกรม iSpy: กดปุม Add กล้องตาม URL ที่กล่าวข้างต้น จากนั้น ตั้งค่า Schedule เพื่อกำหนดว่า เวลา 06:00-18:00 ของทุกวัน ให้บันทึกวิดีโอต่อเนื่อง ค่าเริ่มต้นจะบันทึกวิดีโอเป็นไฟล์ ความยาว 15 นาที (900 วินาที) ซึ่งสามารถปรับแต่งได้ตามต้องการ ส่วนเวลา 00:00-06:00 ก็สั่งให้ทำ Motion Detect จับภาพเฉพาะเมื่อมีการเคลื่อนไหว (สามารถระบายตำแหน่งที่ต้องการให้จับความเคลื่อนไหวได้ด้วย) แล้วก็ Save … จบ โปรแกรมนี้สามารถเพิ่มกล้องได้ 32 ตัว ไม่จำกัดว่ายี่ห้อกล้อง ขอให้สามารถเข้าถึงวิดีโอได้ผ่าน Network ก็พอแล้ว
การเข้าถึงกล้องจาก Internet:
สำหรับ D-Link Network Camera ก็ให้ติดตั้ง Clients แล้วใส่ Username/Password ของ mydlink Account ก็สามารถดูได้แล้วผ่าน Cloud Access
ส่วน iSpy นั้น ถ้าจะเข้าถึงจากภายนอก ก็ต้องจ่ายเงินนิดหน่อย และต้องทำการ Port Forward (พอดีไม่ได้ทำตรงนี้)
เดี๋ยวค่อยเล่ารายละเอียดโปรแกรม iSpy และ การใช้ VLC เพื่อบันทึกวิดีโอจากล้องในตอนต่อไป
-
วิธีการใช้งาน ADSL ร่วมกันกับข้างบ้าน
ใครใช้ ADSL หรือ ซื้อ Internet ไว้ใช้งานที่บ้านบ้าง ??? มีราคาตั้งแต่ 590 บาทต่อเดือน (ไม่รวม VAT) ขึ้นไป เมื่อมีแล้วก็ใช้งานได้รวดเร็วทันใจ … แต่คำถามคือ … ใช้งานคุ้มค่าหรือไม่ ??? แล้วจะดีไม๊ ถ้ารู้ว่า ยังใช้ไม่คุ้มค่า แล้วสามารถหารค่าใช้จ่ายร่วมกับข้างบ้านได้ หรือ กรณีบ้านเดียวกันนี่แหล่ะ แต่เป็นบ้านทรงสูงเช่น บ้านเป็นตึกหลายชั้น จะเดินสาย LAN ไปชั้นบนๆก็ไม่สะดวก ไม่สวยงาม สามารถใช้ Solution นี้ได้ (แบ่งสัดส่วนกันตามสะดวกใจ)
โจทย์: บ้าน A พบว่า ตัวเองใช้งาน ADSL 10Mbps ไม่ค่อยคุ้ม เลยคุยกับบ้าน B ว่า แบ่งใช้งานกันไม๊ ? บ้าน B ก็พบว่า ตัวเองถ้าติดตั้ง ADSL ใหม่ก็ใช้ไม่คุ้มเช่นกัน จึงหาทางออกร่วมกัน บ้าน A และ B คั่นด้วยถนนหมู่บ้าน กว้าง 10 เมตร ไม่สามารถลากสาย LAN ข้ามมาได้ ส่วน ADSL Router ของ A อยู่กลางบ้าน และปล่อยสัญญาณ WiFi เต็มพิกัด
ที่กลางบ้าน B วัดความแรง WiFi ของบ้าน A ได้ -88 dB แต่ถ้ามาที่หน้าบ้านของ B จะวัดได้ -65 dB ซึ่งพอจะไหว
แนวคิด: จะใช้เทคนิค WiFi Repeater ด้วย ADSL Router ตัวเก่ารับสัญญาณ WiFi มาแล้วกระจายผ่าน LAN ส่งให้ ใช้ WiFi Router อีกตัว ทำหน้าที่เป็น Access Point
อุปกรณ์ที่ใช้ และการตั้งค่า:
บ้าน A: 3BB ADSL WiFi Router (Router IP: 192.168.1.1) ตั้ง SSID เป็น AHOMEบ้าน B:
1. Xyzel NBG-419N ทำงานในโหมด WISP (Wireless Internet Service Provider) ทำหน้าที่รับสัญญาณ WiFi มากระจายผ่าน LAN (Router IP: 192.168.2.1) และเปิด DHCP Range 192.168.2.2 – 192.168.2.99 จากนั้น เสียบสาย LAN เข้าที่ Port 1 (ถ้าจะให้ตัว Router อยู่ภายในบ้าน ควรซื้อสาย Antenna ยาวสัก 3 เมตร ราคาประมาณ 199 บาท เพื่อให้เสาอากาศไปอยู่นอกบ้าน แล้วเชื่อมสายสัญญาณเข้ามาที่ตัว Router)2. TP-Link TD-W8961ND เปลี่ยนเป็น Access Point Mode (Router IP: 192.168.2.100) ตั้ง SSID เป็น BHOME ปิด DHCP Server แล้วเสียบสาย LAN เข้ามาที่ Port 1
ผลการทำงาน:
บ้าน B: เมื่อเชื่อมกับ BHOME จะได้สัญญาณความแรง -50dB ทั้งบ้าน สามารถทดสอบ Speed Test ได้ 7 Mbps
-
วิธีตรวจสอบเว็บไซต์ที่โดน Hack #16
ShellShock หรือในอีกชื่อคือ Bashdoor (เลียนเสียง Backdoor) ซะงั้น เป็นช่องโหว่ใน Shell ที่ใช้กันทั่วไปในตระกูล *NIX ทั้ง UNIX, Linux รวมถึง Mac OS X[1] ด้วย โดยอาศัยความสามารถในการเขียน Function ใส่ใน Environment Variable ได้ โดยไม่มีการตรวจสอบข้อมูลที่แถมมาทำให้สามารถแทรกคำสั่งของระบบปฏิบัติการได้
ช่องโหว่นี้เริ่มประกาศเป็น CVE-2014-6271[2] โดย Bash Shell ที่ได้รับผลกระทบเริ่มตั้งแต่รุ่น 1.14.0 ถึง 4.3 ย้อนกลับไปตั้งแต่ปี 1999 กันเลยทีเดียว !! มีผลกระทบกับ CGI-base Web Server (ได้แก่ Apache), OpenSSH Server, DHCP Clients และ Qmail Server โดยเป็น Bug ตาม CWE 78[3] Improper Sanitization of Special Elements used in an OS Command (‘OS Command Injection’)
วิธีตรวจสอบ Bash Version ใช้คำสั่ง
bash --version
หากพบว่า ต่ำกว่า 4.3 ก็ให้ลองคำสั่งต่อไปนี้
env x='() { :;}; echo Vulnerable' bash -c 'echo Hello World'
ถ้าตอบมาว่า
Vulnerable Hello World
ก็แสดงว่า เป็นเครื่องนี้มีช่องโหว่ครับ
อธิบายเพิ่มเติม
1. คำสั่งในการสร้าง Environment Variable คือ
env x=' … '
โดยในที่นี้จะมีตัวแปร x เป็น Environment Variable
2. ต่อมา ในตัวแปร x สามารถสร้าง Function ได้ ในรูปแบบ
env x='() { :;};'
ภายใน { } จะใส่คำสั่งอะไรก็ได้ แต่ในตัวอย่างนี้ เครื่องหมาย : มีความหมายเหมือนกับ true อะไรทำนองนั้น
3. ปัญหาอยู่ตรงที่ว่า Bash Shell ที่มีปัญหา ไม่ได้ตรวจสอบว่า Environment Variable ที่สร้างแบบ Function นี้ สิ้นสุดแค่การสร้าง function ทำให้สามารถแทรกคำสั่งเพิ่มเติมได้ หลังเครื่องหมาย ;
env x='() { :;}; echo Vulnerable'
ลองใช้คำสั่ง
env x='() { :;}; cat /etc/passwd'
จะแสดงตัวแปร Environment Variable ทั้งหมด และพบตัวแปร x มีค่าเป็น function อยู่ แต่จะยังไม่มีอะไรเกิดขึ้น
4. แต่เมื่อมีการเรียก Bash Shell ทำงาน ด้วยคำสั่ง
env x='() { :;}; echo Vulnerable' bash -c 'echo Hello World'
ก็จะเป็นการเรียกคำสั่งในตัวแปร x ออกมาด้วยนั่นเอง
กรณีผลกระทบของ DHCP Client คือ ถ้าเครื่อง DHCP Server ตัวอย่างเช่น dnsmasq[4] สามารถตั้งค่า dhcp-option-force ซึ่งจะส่งคำสั่งไปยัง DHCP Client ที่ใช้ Bash Shell ทำงานตามต้องการได้ เช่น
dhcp-option-force=100,() { :; }; echo ‘You are going to be shocked..ShellShock !!!’>/tmp/
ในส่วนของ Web Security หากติดตั้ง Apache [5]และใช้งาน CGI บนเครื่องที่มี Bash Shell ที่มีช่องโหว่นี้ ก็จะเกิดปัญหา โดยอาศัยตัวแปร Agent String วิธีการทดสอบมีดังนี้
1. ที่เครื่องเว็บเซิร์ฟเวอร์ที่มี Apache และใช้งาน CGI มี test.cgi ง่ายๆดังนี้
#!/bin/bash echo "Content-type: text/plain" echo echo echo "Hi"
2. ถ้าเรียกผ่าน Web Server มี IP Address เป็น 192.168.56.101 และจะเรียก URL ของ CGI ดังนี้
http://192.168.56.101/cgi-bin/test.cgi
การเรียกผ่าน Web Browser ก็จะทำงานตามปรกติ
3. แต่ถ้าใช้ wget ผ่านทาง command linet ไป โดยกำหนด option -U เพื่อบอกว่า Agent String ที่ติดต่อไปคืออะไร ก็จะสามารถแทรกคำสั่งเพิ่มเติมได้ เพราะ Apache CGI ใช้ Bash Shell ในการทำงานนี้ เช่นใช้คำสั่ง
wget -U "() { :;};echo \"Content-type: text/plain\"; echo; echo; /bin/cat /etc/passwd" http://192.168.56.101/cgi-bin/test.cgi
คำสั่งนี้ จะติดต่อไปยัง Web Server โดยแทนที่จะบอกว่าติดต่อไปจาก Agent อะไรธรรมดาๆ ก็จะแทรก Shell เข้าไปด้วย โดยตัวอย่างนี้ จะได้ /etc/passwd ออกมา เก็บไว้ที่เครื่อง ชื่อไฟล์ test.cgi
ดังนั้น รีบ Patch ซะ
ขอให้โชคดี
[1] “Shellshock (software bug) – Wikipedia, the free encyclopedia.” 2014. 20 Jan. 2015 <http://en.wikipedia.org/wiki/Shellshock_(software_bug)>
[2] “CVE-2014-6271 – CVE Details.” 2014. 20 Jan. 2015 <http://www.cvedetails.com/cve/CVE-2014-6271/>
[3] “CWE – CWE-78: Improper Neutralization of Special …” 2006. 20 Jan. 2015 <http://cwe.mitre.org/data/definitions/78.html>
[4] “shellshock dhcp exploitation – Security StackExchange.” 2014. 20 Jan. 2015 <http://security.stackexchange.com/questions/68877/shellshock-dhcp-exploitation>
[5] “What is a specific example of how the Shellshock Bash bug …” 2014. 20 Jan. 2015 <http://security.stackexchange.com/questions/68122/what-is-a-specific-example-of-how-the-shellshock-bash-bug-could-be-exploited>