สวัสดีปีใหม่ ปีใหม่ทั้งที หาอะไรเล่นสนุกๆ ดีกว่า วันนี้ผมมีปัญหามาให้ทำเกี่ยวกับ sql injection 4 ข้อ เริ่มกันเลยดีกว่า
เหมือนครั้งที่แล้ว setup web server กับ mysql เอาเองนะครับ โดยใน mysql ให้สร้าง db ชื่อว่า thtutz แล้วก็ table ชื่อ members โดยมี column id, username, password แล้วใส่ user เข้าไปอย่างน้อย 2 users นะครับ ผมได้เตรียม sql batch ไว้แล้ว (db_setup.sql) แค่ run ด้วย mysql root
หลังจาก create table ใน mysql server แล้วก็เอา php code ต่อไปนี้ ไปลองทำ sql injection ดูนะครับ
ข้อ 1 (login_sqli1.php) อันนี้ทดสอบ basic
<?php $db = mysql_connect('localhost', 'thtutz', 'password') or die('Could not connect to db'); mysql_select_db('thtutz') or die('Could not select thtutz'); $sql = "SELECT * FROM members WHERE password='".md5($_GET['password'])."' AND username='".$_GET['username']."'"; $result = mysql_query($sql, $db); if ($result === FALSE) die('Invalid SQL query'); if (mysql_num_rows($result) == 1) { echo "Congrats, WIN!!!\n"; } else { echo "The number of rows is not 1\n"; } mysql_close($db);
ข้อ 2 (login_sqli2.php) อันนี้ warm up
<?php $db = mysql_connect('localhost', 'thtutz', 'password') or die('Could not connect to db'); mysql_select_db('thtutz') or die('Could not select thtutz'); $sql = "SELECT * FROM members WHERE username='".$_GET['username']."'"; $result = mysql_query($sql, $db); if ($result === FALSE) die('Invalid SQL query'); if (mysql_num_rows($result) == 1) { $row = mysql_fetch_array($result); if ($row['password'] == md5($_GET['password'])) { echo "Congrats, WIN!!!\n"; } else { echo "Invalid username or password\n"; } } else { echo "The number of rows is not 1\n"; } mysql_close($db);
ข้อ 3 (login_sqli3.php) ข้อนี้ยากที่สุดที่ผมคิดได้ เกี่ยวกับ login โดยไม่มีการทำ filter
<?php $db = mysql_connect('localhost', 'thtutz', 'password') or die('Could not connect to db'); mysql_select_db('thtutz') or die('Could not select thtutz'); $sql = "SELECT * FROM members WHERE username='".$_GET['username']."'"; $result = mysql_query($sql, $db); if ($result === FALSE) die('Invalid SQL query'); if (mysql_num_rows($result) == 1) { $row = mysql_fetch_array($result); if ($row['username'] == $_GET['username'] && $row['password'] == md5($_GET['password'])) { echo "Impossible to be here with SQL injection\n"; echo "Congrats, WIN!!!\n"; } else { echo "Invalid username or password\n"; } } else { echo "The number of rows is not 1\n"; } mysql_close($db);
ข้อ 4 (login_sqli4.php) เอาความคิดมาจาก LEETMORE CTF 2010
<?php // idea from LEETMORE ctf 2010 $db = mysql_connect('localhost', 'thtutz', 'password') or die('Could not connect to db'); mysql_select_db('thtutz') or die('Could not select thtutz'); $sql = 'SELECT * FROM members WHERE password="' . md5($_GET['password'], true) . '"'; $result = mysql_query($sql, $db); if ($result === FALSE) die('Invalid SQL query'); if (mysql_num_rows($result) > 0) { echo "Congrats, WIN!!!\n"; } else { echo "Incorrect password\n"; } mysql_close($db);
คราวนี้ใจดีมี hint ให้ หวังว่าจะช่วยได้
็Hint:
1. http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/
2. google
ใช้เวลากับมันหน่อยนะครับ (ข้อ3 กับ ข้อ4) เพราะผมเองก็ต้องทำเป็นชั่วโมง (ตั้งโจทย์เองแท้ๆ)
ครั้งนี้ ผมให้เวลา 2-3 สัปดาห์ แล้วค่อยเฉลย เหมือนเดิมทำได้แล้วอย่า post เฉลยนะครับ
Update: ผมได้ publish เฉลยแล้วนะครับ ถ้าคิดไม่ออกแล้วก็ กดเลยครับ
ขอบคุณสำหรับความรู้ดีๆที่แบ่งปันครับ
ReplyDelete4D vip slot machines | xn--o80b910a26eepc81il5g.online
ReplyDelete4D vip slot machines. 메리트카지노 Play 샌즈카지노 the best online slots for free. Get top หาเงินออนไลน์ experience and play your favorite casino games at a safe, secure and affordable