django (ดี)จังโก้ ดีอย่างไร #01

ขอไม่ลงรายละเอียดว่า อะไรคือ Web Framework, MVC, MVT พวกนั้นนะครับ อ่านเองที่ https://www.djangoproject.com/ และ เขียนวิธีติดตั้งบน Windows ไว้คร่าว ๆ ที่ ขั้นตอนการติดตั้ง django บน Windows และในที่นี้ใช้ Visual Studio Code เป็น Editor (สั่งด้วยคำสั่ง code …) โจทย์ สมมุติในทีม มีคน 10 คน ต้องการ ระบบบันทึกการปฏิบัติงาน จัดเก็บข้อูล วันเวลาของงานที่ทำ, ประเภทของงงาน (ตาม TOR), รายละเอียดของงานที่ทำ, ระยะเวลาที่ใช้ไป (ชั่วโมง) แต่ละคน ต้อง Login เข้ามาก่อน จึงจะบันทึกปฏิบัติงานได้ วิถีแบบ django สร้าง project ชื่อ myproject django-admin startproject myproject สร้าง App ชื่อ worklog cd myproject python manage.py startapp worklog สร้าง Model ว่าจะเก็บข้อมูลอะไรบ้าง แก้ไขไฟล์ code worklog/models.py แล้วสร้าง Class ชื่อ Worklog เพื่อกำหนด Field เป็นช่องทางการเก็บค่าตามโจทย์ (Reference: https://docs.djangoproject.com/en/2.1/ref/models/fields/)–> ขั้นตอนนี้ เขียนใน Visual Studio Code เสร็จแล้ว Save and Exit from django.db import models from django.utils.timezone import now # Create your models here. class Worklog(models.Model): timestamp = models.DateTimeField(default = now()) typeOfWork = models.ForeignKey(‘TypeOfWork’, on_delete=models.CASCADE) work_text = models.TextField(default=””) manhour = models.FloatField(default=0) def __str__(self): return self.work_text class TypeOfWork(models.Model): typeOfWork_text = models.CharField(max_length=200) def __str__(self): return self.typeOfWork_text บอกให้ django สร้างโครงสร้างฐานข้อมูลตามโมเดล (จาก Command Prompt) python manage.py migrate เพิ่ม App ‘worklog’ เข้าสู่ myproject แก้ไขไฟล์ code myproject/settings.py เพิ่ม ‘worklog’ ในส่วนของ INSTALLED_APPS–> ขั้นตอนนี้ เขียนใน Visual Studio Code เสร็จแล้ว Save and Exit INSTALLED_APPS = [ ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django.contrib.messages’, ‘django.contrib.staticfiles’, ‘worklog’ ] สร้าง Super User สักคนนึง python manage.py createsuperuser ตั้งชื่อว่า admin และ รหัสผ่านตามต้องการ เพิ่มโมเดล TypeOfWork และ WorkLog เข้าสู่หน้าของ Admin โดยการแก้ไขไฟล์–> ขั้นตอนนี้ เขียนใน Visual Studio Code เสร็จแล้ว Save and Exit code worklog/admin.py

Read More »

วิธีแก้ไข Excel เปิดไฟล์ CSV แล้วอ่านภาษาไทยไม่ออก

ผู้ใช้จะใช้คำประมาณว่า “เป็นภาษาต่างดาว” เอ่อ … ภาษาต่างดาวเนี่ยเป็นไงครับ ? อย่างคนเขียนคำว่า “私はあなたを愛している” ทำไมเราถึงรู้ว่า นี่คือภาษาญี่ปุ่น หรือ “我愛你”  ทำไมเราถึงรู้ว่า นี่เป็นภาษาจีน หรือ “Я люблю тебя” เป็นภาษารัสเซีย เปลี่ยนเป็นคำว่า “เป็นภาษาที่อ่านไม่ออก” หรือ “ไม่ออกมาเป็นภาษาไทย” จะถูกต้องกว่านะครับ ปัญหา ผู้ใช้เปิดไฟล์ที่แน่ใจได้ว่า Export จากระบบมาเป็น Unicode/UTF-8 แน่นอน เหตุ Microsoft Excel เค้าจะ Default ใช้ Charset เป็น Windows-874 วิธีการแก้ไข สร้างไฟล์ Excel ใหม่ คลิกเมนู Data -> From Text/CSV(ของใครเมนูภาษาไทย เทียบเคียงเอาเองนะครับ) เลือกไฟล์ CSV ที่ต้องการ เบื้องต้นตอนจะ Import จะได้เห็นสิ่งที่ Excel ทำ คือ Default เป็น Windows-874 ต่อไป เปลี่ยนที่ File Origin เป็น Unicode/UTF-8หรือ แล้วแต่ที่ต้นทาง Export มา ก็จะได้ ภาษาไทยสวยงาม เมื่อคลิก Load ก็จะได้ข้อมูลที่เป็น “ภาษาไทย” อ่านออกแล้ว หวังว่าจะเป็นประโยชน์ครับ

Read More »

วิธีทำให้โปรไฟล์บน Google Scholar เป็น Public

Google Scholar เป็นบริการหนึ่งของ Google ทำให้เรามีโปรไฟล์  “อีกช่องทางหนึ่ง” เพื่อแสดงผลงานที่ได้รับการเผยแพร่ หรือตีพิมพ์ในที่ต่าง ๆ  อ่านเพิ่มเติม https://scholar.google.com/intl/en/scholar/about.html ปัญหาอยู่ที่ว่า ในการสร้างครั้งแรกโปรไฟล์ (Profile) ของท่าน จะยังไม่ Public หมายความว่า จากหน้า Google จะค้นหาไม่เจอ Google Scholar Profile ของท่านนั่นเอง ( พอดีมีอาจารย์ท่านหนึ่งถามมา เห็นว่าเป็นประโยชน์ จึงเขียนบันทึกนี้ไว้ให้ ) วิธีการทำให้เป็น Public Profile จากหน้า Profile ของท่าน คลิกที่รูป ดินสอ (Edit) ด้านหลังชื่อ คลิก Make my profile public แล้วคลิกปุ่ม Save แต่ต้องรอสักหน่อย เคยอ่านเจอมาว่า ใช้เวลาประมาณ 4 weeks กว่าจะค้นหาบน Google เจอ

Read More »

ELK #07 LogStash

จากที่ได้กล่าวถึงมายาวนานในเรื่อง ELK  และ  ELK #02 ที่ได้กล่าวถึงการติดตั้ง LogStash ไว้เบื้องต้น ในบทความนี้จะมาลงลึก ถึงกระบวนการทำงานของ LogStash ซึ่งเป็นส่วนสำคัญในการเปลี่ยนข้อมูล Unstructured ให้เป็น Structured ตอนนี้ เราจะทำงานใน /etc/logstash/conf.d/ Simple input – output plugin สร้างไฟล์ 01-input-file.conf มีเนื้อหาดังนี้ input { file { path => [“/tmp/input.txt”] mode => “tail” } } ในส่วนนี้ เป็นการกำหนดว่า ให้ LogStash อ่านไฟล์ /tmp/input.txt โดยให้อ่านบรรทัดล่าสุด (ต่อจาก Checkpoint ก่อนหน้า) เข้ามา โดยถ้าไม่กำหนด mode => “tail” ระบบจะอ่านไฟล์ก็ต่อเมื่อ มีการสร้างไฟล์ใหม่เท่านั้น สร้างไฟล์ 98-output-file.conf มีเนื้อหาดังนี้ output { file { path => “/tmp/output.txt” } } ในส่วนนี้ เป็นการกำหนดว่า ให้ LogStash เขียนไฟล์ /tmp/output.txt เมื่อปรับเปลี่ยน configuration ต้องทำการ Restart Service service logstash restart ลองส่งข้อมูลเข้าไปในไฟล์ /tmp/input.txt ด้วยคำสั่ง echo “Hello World 1” >> /tmp/input.txt ดูผลลัพธ์ใน /tmp/output.txt cat /tmp/output.txt {“path”:”/tmp/input.txt”,”@version”:”1″,”message”:”Hello World 1″,”@timestamp”:”2018-09-11T03:42:33.645Z”,”host”:”elk1″} แสดงให้เห็นว่า ระบบ LogStash สามารถรับข้อมูลจากไฟล์ และส่งข้อมูลออกไปยังไฟล์ได้ Filter Plugin ก่อนอื่น Stop Service ด้วยคำสั่ง service logstash stop ในการจัดการข้อมูลก่อนบันทึก เช่นการกรอง การจัดรูปแบบ LogStash ทำงานผ่าน Filter Plugin ซึ่งมีหลายรูปแบบ (https://www.elastic.co/guide/en/logstash/current/filter-plugins.html) แต่ในที่นี้ จะใช้ grok เหมาะกับข้อมูล Unstructured อย่าง syslog เป็นต้น ซึ่งมักจะเป็น Log ที่ให้มนุษย์อ่านได้ง่าย แต่ไม่ค่อยเหมาะสำหรับให้คอมพิวเตอร์เอาไปใช้งานต่อ ซึ่ง LogStash มีไว้ให้แล้วกว่า 120 ตัว ต่อไป สร้าง 44-filter-basic.conf มีเนื้อหาดังนี้ filter { grok { match => { “message” => “%{IP:ipaddress} %{NUMBER:size}” } } } จากนั้น Start Service ด้วยคำสั่ง (รอสักครู่ด้วย) service logstash start แล้วส่งข้อมูลต่อไปนี้ต่อท้ายไฟล์ /tmp/input.txt echo “192.168.1.1 120” >> /tmp/input.txt และเมื่อดูผลใน /tmp/output.txt จะพบบรรทัดสุดท้าย {“message”:”192.168.1.1 120″,”@version”:”1″,”path”:”/tmp/input.txt”,”@timestamp”:”2018-09-11T04:56:03.662Z”,”size”:”120″,”host”:”elk1″,”ipaddress”:”192.168.1.1″} แสดงให้เห็นว่า สามารถใช้ filter นี้ แยกแยะข้อมูลเบื้องต้นได้ Example : Postfix Log ก่อนอื่น Stop Service ด้วยคำสั่ง service logstash stop เนื่องจาก Log แต่ละชนิด แต่ละซอฟต์แวร์มีความหลากหลายมาก แต่ดีที่มีผู้เชี่ยวชาญเค้าเขียน Pattern เอาไว้ให้ ให้ใช้คำสั่งต่อไปนี้ สร้างไดเรคทอรี่ /etc/logstash/patterns.d/ และ ดาวน์โหลด มาเก็บไว้

Read More »

อย่าเชื่อเครื่องมือมากเกินไป …

เมื่อเดือนมีนาคม 2561 ผมได้ทำการทดสอบเครื่องมือเจาะระบบ “N”  (ใช้ทดสอบว่าระบบเป้าหมายมีช่องโหว่ใดให้โจมตีบ้าง) ภายใต้ภาระกิจ “Honeypot” เพื่อทดสอบว่า เครื่องมือดังกล่าว สามารถรับรองความปลอดภัยของระบบปฏิบัติการของเครื่องเซิร์ฟเวอร์ ก่อนที่จะอนุญาตให้เข้าถึงได้จากอินเตอร์เน็ตได้หรือไม่ *** การทดลองนี้อยู่ในสภาวะควบคุมที่รัดกุม เป็นระบบที่สร้างขึ้นมา แยกออกจากระบบอื่นที่อาจจะได้รับผลกระทบ และเป็นการทดลองเพื่อวัดความสามารถของเครื่องมือ ไม่ได้มุ่งโจมตีผู้ใด หรือระบบใด *** วิธีการทดสอบ จัดให้มีเครื่องทดสอบ ชื่อ honeypot.in.psu.ac.th อยู่บน VM และใช้เครื่องมือเจาะระบบ “N” ตรวจสอบ 2 ครั้ง โดยครั้งแรก (Baseline 01) เป็นการติดตั้งระบบปฏิบัติการ Ubuntu 16.04 LTS แบบ Default และ Update ให้เป็นปัจจุบันที่สุด แล้วรีบแจ้งให้ “N” ตรวจสอบ ครั้งที่ 2 (Baseline 02) ทำการติดตั้ง Web Server, PHP, MySQL และติดตั้งช่องโหว่อย่างง่ายที่พัฒนาขึ้นเอง (https://github.com/nagarindkx/honeypot) ลงไป โดยภาพรวมดังภาพที่ 1 แล้วรีบแจ้งให้ “N” ตรวจสอบ honeypot.in.psu.ac.th ประกอบด้วยโครงสร้างไฟล์ ดังภาพที่ 2 เมื่อคลิก Login with SQL Injection Vulnerable  จะได้ภาพที่ 3 ซึ่งจะส่งไปที่ไฟล์ badform.html โดยในฟอร์มนี้จะมีช่องโหว่ SQL Injection ทำให้สามารถเข้าเป็น admin ได้โดยลองใส่ username/password ดังนี้ ซึ่งจะได้ผลว่า สามารถเข้าเป็น admin ได้โดยไม่ต้องทราบรหัสผ่านที่แท้จริง แต่อาศัยการเขียน SQL Statement ที่ไม่รัดกุม และไม่ตรวจสอบ Input ก่อน ดังภาพที่ 4 เมื่อคลิก  Simple Non Persistent XSS   จะได้ภาพที่ 5  ซึ่งจะส่งไปยัง simple.php โดยจะเห็นได้ว่า สามารถใส่ชื่อ นามสกุล ลงไปใน URL ได้เลย ผ่านตัวแปร name  (ต้องลองใช้กับ FireFox ถ้าเป็น Google Chrome จะมี XSS Auditor ไม่ได้รับผลกระทบ)   ช่องโหว่นี้ ทำให้ Hacker นำเว็บไซต์นี้ไป ดักเอา Cookie Session ของผู้อื่น หรือ Session HiJacking ดังภาพที่ 6 ด้วย URL นี้http://honeypot.in.psu.ac.th/simple.php?name=%3Cscript%3Ealert(escape(document.cookie))%3C/script%3E หรือ เปลี่ยนเปลี่ยน URL ที่ “Click to Download” ไห้ยังเว็บไซต์ที่ต้องการได้ เช่นเป็น hacked.com เป็นต้น ดังภาพที่ 7 ด้วย URL นี้http://honeypot.in.psu.ac.th/simple.php?name=%3Cscript%3Ewindow.onload=function()%20{%20var%20link=document.getElementsByTagName(%22a%22);%20link[0].href=%27http://hacked.com%27}%3C/script%3E เมื่อคลิก Login to Test Permanent XSS จะได้ภาพที่ 8  ซึ่งจะส่งไปยัง goodlogin.php ซึ่ง เป็น Form ที่ป้องกัน SQL Injection และ ไม่ยอมรับ username/password ว่าง หากไม่ทราบรหัสผ่านจริงๆ ก็จะเข้าไม่ได้ ดังภาพที่ 9 หาก Login เป็น user1 สำเร็จ จะสามารถเปลี่ยน Display Name ได้ ดังภาพที่ 10 ทดลองด้วย username: user1password: user1123** หาก user1 ต้องการดัก Session HiJack

Read More »