前面耽搁了一周半,一周半没碰电脑,真是爆炸,回来做做题练练手。做了几道wargame.kr的题,做了几道就不想做了,感觉还是偏基础了,意义不很大,但是博客还是要发的啊。。
这里就只有前面估计十来道的wp,后面的没做了,挺无聊的感觉。
不过适合刚刚接触web不久的筒子们,里面的姿势都还蛮经典的。
already got (200pt)
直接在响应头里面就看到flag了。
QR Code Puzzle (300pt)
也是直接看源码,图片的位置被url编码了,解码,访问,扫二维码,拿到flag
#flee button (450pt)
也是看源码,访问相应的网页就可以了
http://wargame.kr:8080/flee_button/?key=ad55
login filter (450pt)
先看源码
<?php
if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}
/*
create table user(
idx int auto_increment primary key,
id char(32),
ps char(32)
);
*/
if(isset($_POST['id']) && isset($_POST['ps'])){
include("../lib.php"); # include for auth_code function.
mysql_connect("localhost","login_filtering","login_filtering_pz");
mysql_select_db ("login_filtering");
mysql_query("set names utf8");
$key = auth_code("login filtering");
$id = mysql_real_escape_string(trim($_POST['id']));
$ps = mysql_real_escape_string(trim($_POST['ps']));
$row=mysql_fetch_array(mysql_query("select * from user where id='$id' and ps=md5('$ps')"));
if(isset($row['id'])){
if($id=='guest' || $id=='blueh4g'){
echo "your account is blocked";
}else{
echo "login ok"."<br />";
echo "Password : ".$key;
}
}else{
echo "wrong..";
}
}
?>
这里看到mysql_real_escape_string
再加上utf-8
的编码,就知道没办法绕过过滤。那么就想办法绕过比较,发现大小写没有过滤,直接提交
id=GUEST&ps=guest
即可。
wtf_code (450pt)
拿到发现是whitespace,直接上脚本解码就行了
def t2i(str):
out = 0
for i in range(0,8):
out += int(str[i])*(2**(7-i))
return out
f = open('source_code.ws','r')
x = f.readline()
x = f.readline()
ans=""
k = 0
while x:
out = ''
for c in x:
if c==' ':
out += '0'
else:
out += '1'
x = f.readline()
l = len(out)
if 8 <= l <= 11 and k%2 ==0:
print out
c = t2i('0'+out[l-8:l-1])
#print chr(c)
ans+= chr(c)
k+=1
f.close()
print ans
db_is_really_good
首先在write.php
确定了是sqlite数据库。
然后加上个/
找到规律就是sqlite
数据库的db
文件位置在/db/wkrm_username.db处,直接访问http://wargame.kr:8080/db_is_really_good/db/wkrm_admin.db
拿到数据库文件,随便找个软件打开就知道了
访问拿到flag
fly me to the moon
直接抓发往high-scores.php
的包,改成绩改个很大的数就可以了。
md5_compare
比较老套的MD5弱类型比较了
md5_password
也是经典姿势
strcmp
type_confusion
多提交两次就行了。
tmitter
在join.php
看到hint,应该是要以admin注册强行改密码什么的,加上id长度限制为32
输入admin a
(ps:中间很多空格,总位数大于32,最后一个a防trim(),这样它截断32位再trim就成功了)
注册成功,登陆拿flag
SimpleBoard
直接看代码,
重点就在这个过滤这里
所以在每次构造idx
同是,需要每次也把cookie
改下,改成/
+$idx
就行了,然后就是简单的联合查询,POC如下: