Jump to content
ssyc

我想详细知道sql注入的类型

Recommended Posts

就是这些类型怎么用,怎么判断,

Link to post
Share on other sites

0x01最基础的注入-union注入攻击

判断是get型还是post型注入;

找到正确的闭合规则;

order by 查询字段数;

union select 1,2.....查看显示位是第几位,没有的话就试试把id=1的显示位让出来,让其等于id=-1;

第二、三位显示出来了,那么即可在这两个位置写入sql语句;

查询当前数据库,当前mysql用户 union select 1,user(),database();

查询当前数据库里面的表 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="data_name";

查询到敏感表名user,继续查询表里面的字段 union select 1,2,group_concat(column_name) from information_schema.columns where table_name="user";

查询字段,例如“id”、"passwd"的内容 union select 1,id,passwd from user;

拿到用户、密码登入后台。

0x02 Boolean注入攻击-布尔盲注

查看现象,能报错,但没有报错信息,正确查询也显示不了查询内容就属于布尔盲注,只存在两种状态,对或错;

由页面的两种不同返回的状态来判定我们的闭合规则;

为了方便,我们这里假设返回正确用“yes”,返回错误用“no”来表示这两种状态

找到闭合规则后,我们在闭合规则里面  and 1=1 和 and 1=2 测试一下,看看最后返回是不是两种状态;

布尔盲注要用到length()和substr()语句,用两种状态来猜解数据库、表名等的长度和正确字母;

先用 and length(database())>2 来猜数据库的长度,使用的是二分法;

再用 and substr(database(),1,1)='t' 来确定第一个字母,可用burp跑,26个字母,哪个字母返回yes则代表第一个字母就是它;

 and substr(database(),2,1)='t' 代表当前数据库的第二个字母;

最后结合长度,成功的将数据库猜解出来;

后面的操作跟union注入的步骤差不多了,只是sql语句写在 上文的 database() 处。

0x03 报错注入攻击

只要注入点有sql报错信息,那么就可以使用报错注入;

还是一样,引号报错,然后找到闭合规则,页面正常显示,则可以在闭合规则中开始写入报错注入的sql语句;

updatexml报错获取当前数据库:

and updatexml(1,concat(0x7e,(select database()),0x7e),1)

floor报错获取当前数据库:

and (select 1 from (select count(*),concat((database()),floor (rand(0)*2))x from information_schema.tables group by x)a)

两种方式都可行,如果第一个不行就试试第二个

接着可以利用select语句替换掉上面database()来继续获取数据库中的表名、字段名,查询语句和union注入攻击的语句相同;

只不过这里不能再使用group_concat了,因为报错注入只显示一条结果,所以需要使用limit语句;

0x04 时间注入攻击-时间盲注

没有明确的现象,不管是对是错都返回一个状态;

但是如果用sleep(5)方法,能让响应时间延迟为5秒以上,那么就为时间盲注;

我们用sleep(5)函数构造了一个时间延时的状态,因此,我们又有了两种状态,像布尔盲注一样可以根据这两种状态来判定数据库、表名和字段名的长度和正确的每个字母;

同样的找到正确的闭合规则,当然,这个闭合规则得配合着 and sleep(5)语句来构造,哪一个闭合规则执行了sleep(5),那么就是正确得闭合规则;

时间盲注配合着  if(A,B,C)  语句结合使用,含义是:如果A是 true,则返回B(也就是执行B),否则返回C(执行C);

那么判断当前数据库名的长度的语句为:

if (length(database())>1,sleep(5),1)

就是说如果数据库长度大于1,那么响应延时5秒,否则执行select 1(也就是不延时),由此来推出数据库长度。

判断当前数据库名的第一个和第二个字母的语句:

if(substr(database(),1,1)='s',sleep(5),1)

if(substr(database(),2,1)='s',sleep(5),1)

只有第一个字母等于26个字母中正确的字母时,才会延时5秒,因此可以通过burp或者sqlmap来跑。

根据数据库名长度以此内推即可得出完整的数据库的库命、表名、字段名和具体内容。

 0x05 堆叠查询注入攻击

可以使用堆叠注入的地方也可以使用布尔盲注与时间盲注;

同样先找出正确的闭合规则,然后也看两种状态来猜解库名、表名等;

类似与下面在分号后面可执行新的语句:

;select if(length(database())>1,sleep(3),1) ;select if(substr(database(),1,1)='r',sleep(3),1)

堆叠的;分号后可以执行新的sql语句,因此在知道网站根目录的情况下可以直接写日志拿shell。

0x06 二次注入攻击

二次注入一共有两个url,url一用来注入,也就是注入点,插入sql语句的地方,另外一个url用来返回信息;

也就是url一插入了sql语句,url一的响应里面就会返回这条信息对应的id值,然后url二就传入这个新id值,然后访问,响应回来之后将会爆出sql语句查询的结果,正确或者错误的sql信息;

就相当于url是一个用户注册的地方,用户注册后会在数据库里面加入新id存放用户的注册信息,那么这个id可以传给url二来访问,url二就可以显示出用户的注册信息,但如果注册信息含义恶意sql语句,url二就会显示出敏感的数据库信息;

跟union注入攻击差不多,只是回显的信息需要在另外的url中显示出来了;

后面就是union注入攻击的常规操作。

0x07 宽字节注入攻击

如果遇到单、双引号被转义,变成了反斜杠,导致参数id无法逃逸单引号的包围;

一般情况下,此处就不存在sql注入漏洞的;

但是如果数据库的编码为GBK时,就可以使用宽字节注入,因此在不知道是否是GBK编码时,都可以尝试去使用宽字节注入;

宽字节的格式是在地址后先加一个  %df  ,再加单引号,因为反斜杠的编码为%5c,在GBK编码中,%df%5c是繁体字“連”,因此,单引号成功逃逸,爆出sql错误;

因此构造闭合规则时,在单引号前面加上  %df 就行了;

之后在闭合规则中写入同union注入的一些查询语句就行了;

0x08 base64注入攻击

如果遇到url的参数id的值看起来像base64的,先拿去url解码,然后如果是base64,拿去base64解码,解出来的应该就是id的值(1,2等数字);

那么如果要对这个url进行sql注入测试,就需要对id后面的所有值进行base64编码;

注入的方式步骤都是跟union注入一样的,只不过后面的所有值(整个payload)都要进行base64编码后传给url的c参数提交,包括闭合规则。

0x09 HTTP请求头参数注入-cookie注入攻击

抓包对一个url的http请求头的所有参数进行sql注入测试,里面的所有参数都有可能存在注入点,如果响应包出现sql报错,那么测试的这个参数就是注入点;

常见的http头部注入的参数有:

【Referer】、【X-Forwarded-For】、【Cookie】、【X-Real-IP】、【Accept-Language】、【Authorization】

如果测试到cookie参数的时候,响应有报sql错误,那么就是cookie注入攻击;

和union注入的差别就在于注入点不一样,之后使用union注入的方法即可。

0x10 HTTP请求头参数注入-XFF注入攻击

XFF注入即HTTP头部的X-Forwarded-for参数存在sql注入;

例如测试此参数的值  X-Forwarded-for:127.0.0.1'  响应有sql报错,那么此处就是注入点;

之后使用union注入的方法完成即可。

0x11 知道绝对路径的注入

如果通过一些方式爆出了网站的根目录,并且知道此站点存在sql注入;

猜测此数据库可能有file权限,那么我们就可以使用语句:into outfile 来写shell到网站的根目录下,之后用菜刀连接;

如果数据库没有file权限,那么我们用sqlmap的参数 --is-dba  来查看当前数据库的用户是否有管理员权限;

如果有管理员权限,我们就可以使用sqlmap里面的参数命令  --os-shell  来上传、反弹shell,最终getshell;

如果file、管理员权限都没有,那么另寻思路,日志、缓存写入等。

  • Like! 1
  • Agree! 1
Link to post
Share on other sites

Follow: 世界中文黑客论坛由CNHACKTEAM[CHT]创建,汇集国内外技术人员,这是一群研究网安黑客攻防技术领域的专家.

法务要求丨Legal丨закон丨القانون

请在学习期间遵守所在国家相关法律,否则后果自负!

Пожалуйста, соблюдайте законы страны, в которой вы находитесь, во время обучения, или будут последствия!

勉強期間中に該当する国の法律を守ってください。そうでなければ結果は自己責任です。

Please abide by the relevant laws of your country during your study, or you will be responsible for the consequences!

官方旗下项目丨About our project

声明:为净化国内外网络安全请勿发布违反国家国定的文章,团队不参与任何涉及黑色产业/攻击/渗透各国正规网站活动,只做网络安全研究,研究网络攻防技术。

世界中文黑客论坛由CNHACKTEAM(CHT)创建,汇集国内外技术人员,这是一群研究网络安全、黑客攻防技术领域的专家,你也可以加入我们!

黑客攻防  技术问答  0day  Hack News  CHT Team  使用指南  商城/Mall  商城订单查询  捐赠/donations  在线用户  X  联系邮箱email:[email protected]

友情链接丨Link丨Связь дружбы

CNHACKTEAM   CHT team official website     www.hac-ker.com     hacked.com.cn     www.77169.net     www.ddosi.com

申请或请未补上链接者联系我们的邮箱,谢谢!

×
×
  • Create New...

Important Information

Please use your computer to visit our website; Please agree to our website rules!Guidelines