はまやんはまやんはまやん

hamayanhamayan's blog

cthulhu [LORD OF SQLINJECTION]

Lord of SQLInjection

<?php
include "./welcome.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_cthulhu where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("cthulhu");
highlight_file(__FILE__);

特徴は以下。

  • id,pwが入力可能
    • prob,_,.,(),adminがフィルタリング
  • 問題文に書いてあるが、ModSecurityによるWAFが導入されている
  • idに何かを入れればいい

とりあえずidに' or 1 #を入れると、Forbiddenと帰ってくる。WAFか。
ModSecurity Core Rule Set v3.1.0でググってみると、情報が出てくる。
Bypass the latest CRS v3.1.0 rules of SQL injection · Issue #1181 · SpiderLabs/owasp-modsecurity-crs

-1'<@=1 OR {x (select 1)}='1が紹介されている。
idに-1'<@=1 OR {x (select 1)}='1'#を入れるとAC。