select * from tables where id_banner = 1 or num_blok = 21
select * from tables where id_banner = 0x31206f72206e756d5f626c6f6b203d203231
SELECT 0x12 + 0x34;
-- 70
18446744073709551615
.SHOW WARNINGS;
select * from tables where id_banner = 50
? 0x32
– текст, цифру «2». Точно так же 0x53
вам даст заглавную букву "S", например. parseInt( '0x32', 16)
. На SQL просто SELECT 0x32;
31206f72206e756d5f626c6f6b203d203231
даёт совершенно осмысленный код 1 or num_blok = 21
var s = '31206f72206e756d5f626c6f6b203d203231', out = [], i;
for( i = 1; i < s.length; i+=2) out.push( String.fromCharCode( parseInt( s.substr(i-1,2), 16)));
out.join("") // 1 or num_blok = 21
$hex = hex2bin("31206f72206e756d5f626c6f6b203d203231");
var_dump($hex);
// 1 or num_blok = 21
$db_query="select * from table where id_banner = $num_ban ";
$q_ident=mysql_query($db_query);
$num_ban = $_GET['id']
, но она никак не фильтруется, а только есть проверка is_numeric. Исходя из моего запроса, мне говорят, что у меня возможно есть уязвимость . Вот и я перебираю все варианты $_GET['id']
злодей подсовывает нечто. Куда дальше это значение идёт, как проверяется? Строка "0x123abc" на проверке is_numeric() даёт false
. Если дальше вы отвергаете и не обрабатываете такой запрос, всё в порядке. is_numeric('0x123abc') === FALSE
var_dump(is_numeric('0x123abc'));
выводит true ?