<![CDATA[Latest posts for the topic "Luật chống lại Timing Attack (PHP)"]]> /hvaonline/posts/list/12.html JForum - http://www.jforum.net Luật chống lại Timing Attack (PHP) blind sql injection/timing attack sau đây là luật em xây dựng để ngăn chặn việc ấy xãy ra. Timing attack là gì em nêu ở dưới nguồn từ https://www.owasp.org/. Rất mong được cùng mọi người thảo luận xung quanh vấn đề. 1. Phá luật được em tạo ra bên dưới như thế nào. 2. Cách sửa đổi các luật ấy để có thể không block nhầm dữ liệu và sửa thế nào cho hợp lý. Code:
<?php

$str = "99' union select top 1 table_name from --etes twa another data"; //data

if(preg_match("/^([\'\)\"a-zA-Z0-9])+([0-255[:ascii:]])+select+([0-255[:ascii:]])+([\-])+([0-255[:ascii:]])+$/",strtolower($str))||preg_match("/^([\'\)\"\(a-zA-Z0-9])+([0-255[:ascii:]])+benchmark+([0-255[:ascii:]])+([\-])+([0-255[:ascii:]])+$/",strtolower($str))){
	echo("Attack report !.");
}
?>
Timing Attack A Timing Attack depends upon injecting the following MySQL query: Code:
SELECT IF(expression, true, false)
Using some time-taking operation e.g. BENCHMARK(), will delay server responses if the expression is True. Code:
BENCHMARK(5000000,ENCODE('MSG','by 5 seconds'))
- will execute 5000000 times the ENCODE function. Depending on the database server performence and its load, it should take just a moment to finish this operation. The important thing is, from the attacker's point of view, to specify high number of BENCHMARK() function repetitons, which should affect the server response time in a noticeable way. Example combination of both queries: Code:
1 UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(50),BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null) FROM users WHERE user_id = 1;
If the server response was quite long we may expect that the first user password character with user_id = 1 is character '2'. Code:
(CHAR(50) == '2')
Using this method for the rest of characters, it's possible to get to know entire password stored in the database. This method works even when the attacker injects the SQL queries and the content of the vulnerable page doesn't change. Obviously, in this example the names of the tables and the number of columns was specified. However, it's possible to guess them or check with a trial and error method. Other databases than MySQL also have implemented functions which allow them to use timing attacks: 
]]>
/hvaonline/posts/list/39497.html#242948 /hvaonline/posts/list/39497.html#242948 GMT
Luật chống lại Timing Attack (PHP) http://weakpoint.org/sqli.php Link test blind sql ijection / timing attack. 2 luật trên đã được em sửa như sau. Code:
/^(?(?=[0-255[:ascii:]])[0-255[:ascii:]]|[\'\)\"a-zA-Z0-9])+select+([0-255[:ascii:]])+([\-\;\#\/\d00])+(?(?=[0-255[:ascii:]])[0-255[:ascii:]])+$/
Code:
/^(?(?=[0-255[:ascii:]])[0-255[:ascii:]]|[\'\)\"a-zA-Z0-9])+benchmark+([0-255[:ascii:]])+([\-\;\#\/\d00])+(?(?=[0-255[:ascii:]])[0-255[:ascii:]])+$/
Rất mong nhận được sự quan tâm. ]]>
/hvaonline/posts/list/39497.html#242996 /hvaonline/posts/list/39497.html#242996 GMT
Luật chống lại Timing Attack (PHP) /hvaonline/posts/list/39497.html#243961 /hvaonline/posts/list/39497.html#243961 GMT Luật chống lại Timing Attack (PHP) /hvaonline/posts/list/39497.html#244091 /hvaonline/posts/list/39497.html#244091 GMT Luật chống lại Timing Attack (PHP) /hvaonline/posts/list/39497.html#246108 /hvaonline/posts/list/39497.html#246108 GMT Luật chống lại Timing Attack (PHP)

vd_ wrote:
Nếu là SELECT, BENCHMARK, SeLect ... thì sao? Tốt nhất là bạn nên sanitize các param đưa vào câu SQL thay vì kiểm soát toàn bộ url. Ví dụ chỗ nào cần là number only thì dùng regex để kiểm tra hoặc cast về integer. 
Mình chỉ block 2 cái đó thôi, bạn muốn viết hoa viết thường thế nào cũng được. Check bằng url mình đưa ấy thank :D.]]>
/hvaonline/posts/list/39497.html#246156 /hvaonline/posts/list/39497.html#246156 GMT
Luật chống lại Timing Attack (PHP) /hvaonline/posts/list/39497.html#246165 /hvaonline/posts/list/39497.html#246165 GMT Luật chống lại Timing Attack (PHP)

khuongduybui wrote:
Cái Timing Attack này nghe qua cũng thú vị nhưng nó chẳng qua là một kiểu bruteforce, chỉ cần mã hóa cẩn thận chút và thay đổi mã thường xuyên thì nó mò cả đời cũng không ra. Có nguy hiểm chăng là người ta có thể lợi dụng nó để DOS hệ thống của bạn. Mà điều này thì đã thuộc vào chống SQL injections rồi nên mình thấy chỉ cần escape string là được, không cần mấy cái regexp rắc rối này, trừ khi bạn định để cho users trực tiếp nhập SQL queries vào ( :O ) 
Ưhm ! có thể can thiệp từ cpanel để đặt quyền cho 1 user nhưng cấm SELECT thì cấm thế nào giờ. Ghi nhận ý kiến của bạn.]]>
/hvaonline/posts/list/39497.html#246490 /hvaonline/posts/list/39497.html#246490 GMT
Luật chống lại Timing Attack (PHP)

vd_ wrote:
@chiro8x my bad, bạn đã dùng strtolower() để xử lý được hoa thường, tuy nhiên tui vẫn giữ ý kiến là giải pháp tốt nhất vẫn là kiểm tra các thông số đưa vào SQL thay vì nối chuỗi để thành sql. Việc kiểm tra các keyword sql cũng như kiểm tra param đưa vào xem coi có trùng với pattern của sql không là một việc khá phức tạp, không thể chỉ dùng 1 hoặc 2 regex là có thể giải quyết được (bạn xem thêm ModSecurity Core Rule Set, phần rule SQL injection để thấy một số regex phát hiện sql injection). Bạn cũng tham khảo thêm http://blog.spiderlabs.com/2011/07/modsecurity-sql-injection-challenge-lessons-learned.html để thấy một số kỹ thuật tránh detection.  
Chủ đề mình đưa ra chỉ nói về timing attack thôi. Không giấu gì bạn đang làm web game sử dụng ajax và jquery nên chỉ cần chống cái timing attack là chủ yếu, nhưng mình sẽ tìm hiểu thứ bạn nói.]]>
/hvaonline/posts/list/39497.html#246491 /hvaonline/posts/list/39497.html#246491 GMT