渗透接单

渗透测试xss攻击,渗透工具,网络攻击,网站黑客

专业接单黑客(免费)联系方式 真诚合作靠谱黑客接单平

一些常用的sql注入语句。下面我将介绍如何使用手工注入MYSQL,MSSQL数据库. 一般漏洞产生的原因 : 程序执行中未对敏感字符进行过滤,使得攻击者传入恶意字符串与结构化数据查询语句合并,并且执行恶意代码. 创建text数据表MYSQL代码: 

复制代码

代码如下:

create database if not exists `test`; USE `test`; /*数据表 `account` 的表结构*/ DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `accountId` bigint(20) NOT NULL auto_increment, `accountName` varchar(32) default NULL, `accountPass` varchar(32) default NULL, PRIMARY KEY (`accountId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*数据表 `account` 的数据*/ insert into `account` values (1,'account1','account1'); /*数据表 `admin` 的表结构*/ DROP TABLE IF EXISTS `admin`; CREATE TABLE `admin` ( `adminId` bigint(20) NOT NULL auto_increment, `adminName` varchar(32) default NULL, `adminPass` varchar(32) default NULL, PRIMARY KEY (`adminId`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*把数据插入数据表 `admin` 的数据*/ insert into `admin` values (1,'admin','admin'); 

2.漏洞的利用 这个就是数据库里的记录了.以后黄色为关键语句,红色为输入的部分. 大家注意看resultSet = statment.executeQuery("select * from account where accountId = '"+ request.getParameter("id") +"'"); 这里的request.getParameter("id") 是获取GET传参的id 参数,也就是mysqlInject.jsp?id=1 这里的id. 这样这个SQL语句就变成了select * from account where accountId = '1' 了.如果加以变换呢? 2.1漏洞的检测 我们把id 写成mysqlInject.jsp?id=1' 那么SQL 语句就变成select * from account where accountId = '1'' 了,这样的话SQL语句就会报错,因为SQL语句的值是需要2个包含 符号,比如’和”如果只是数字可以什么都不写.如果不报错的话就说明程序替换,过滤或者其他方法来防护了.那么我们可以继续来测验, mysqlInject.jsp?id=1' and ''=' 那么 SQL语句就变成了select * from account where accountId = '1' and '' = '' ,应该返回正常.有些人说我的为什么返回不正常呢? 有2种原因,第一是程序把恶意字符过滤了;第 二是程序的语句和我写的不一样select * from account where accountId = 1' and ''='. 这个问题在下边会谈到. 2.2 Union查询猜此次查询列的数量 这里有的人会说猜此次查询列的数量有什么用?如果只是检测当然没有,但是你想进一步的利用那么就有大的用处了,文章后边会讲到的,耐心.如果懂SQL的人应该知道UNION查询 吧?UNION查询就是联合查询,执行第二条查询语句将返回值和本次查询合并. 大家想想,如果要和本次查询值合并需要一个什么条件呢?需要联合查询的列数和此次查询的列数相等.如果不想等的话就会无法合并,那么就会报错.通过这一特点聪明的你应 该会想出这么才列数了吧? 那么我们要的就是使得UNION查询出来的列数与本次查询出来的列数相等.也就是说不报错就会相等. 先从第一列开始猜,那么要把这个语句union select 1构造在地址程序的语句当中.那么语句就是mysqlInject.jsp?id=1' and union select 1 and ''=' 这样的.有些人问为什么后 边(绿色的部分)要加上and ''=' 呢? 也许大家记了吧,我们的SQL语句是需要两个包含符号的,语句select * from account where accountId = '1' 我们输入的是在1那个位置,所 以要去除后边的',否则语句会报错的.在本程序里也就是' 如果你要想消除' 有很多办法,为了让大家明白所以我现在使用and ''='.先说一说有几种办法消除这个' 1. 使用 and '' = ' 虽然不够方便,但是在复杂SQL语句里不会报错的. 2. 使用注释 # 或者 /**/, 这样可以把后面的东西全部注释掉,但是有一个大问题,就是在执行复杂SQL语句的时候有可能会报错. 有些人测试,咦?为什么我加了#还是会报错呢?因为本次是使用GET传参,在地址栏传参.大家想想,当初下载带#名称的数据库是什么样子呢?哦,对了,#是地址栏的结束符,就是说# 包括#以后的字符全部不传入.所以#在GET模式下注入注入不起作用. 那么有些工具写的在构造注射的时候为什么是mysqlInject.jsp?id=1'/**/and/**/union/**/select/**/1/**/and/**/''/**/= /**/'/* 呢? 因为在程序里边有函数可以把传入 参数里面的空格去除,如果去除了空格,将会是程序产生了错误的语句,那么就会一直报错了.所以有些工具就是用/**/这种东西来取代空格了.那 /**/ 又是什么呢? /**/ 是一种注 释,叫做文档注释,就是从/* 开始直到*/ 结束,中间任何代码都会成为注释,所以是程序员在写大量注释时候所使用的一种注释.那最后的/* 是什么呢? 那个是用来解决 SQL语句 包 含符号没有成双成对的. 

  • 评论列表:
  •  黑客技术
     发布于 2023-08-20 03:13:22  回复该评论
  • 掉,但是有一个大问题,就是在执行复杂SQL语句的时候有可能会报错. 有些人测试,咦?为什么我加了#还是会报错呢?因为本次是使用GET传参,在地址栏传参.大家想想,当初下载带#名称的

发表评论:

«    2023年7月    »
12
3456789
10111213141516
17181920212223
24252627282930
31
文章归档
标签列表

Powered By

Copyright Your WebSite.Some Rights Reserved.