之前的前置知识已经掌握了不少了,除了在hackthissite做了basic的题,就差不多可以上手CTF的基础题了.先刷公认比较好的实验吧web安全板块的.也算简单的write up吧,参考了其他人的会写出来.

0x00. Forbidden

题目链接. 这题描述比较简单,403权限把我们拒了,然后提示HongKong,我首先想到的是tower那样….根据你ip来增加新的二级域名比如 hk.tower.im 然而发行并不对…

那么再观察了一下f12发现内容很少. 但是机智的我发现了一个 language的地方. 本来是要抓包然后重传的,强大的firefox这里可以直接修改重传,直接改成 Zn-hk,发送. 然后查看响应

就会发现藏在里面的flag了. 直接秒了.

0x01.猫捉老鼠

题目链接. 这题之前提示了Catch.Catch.Catch 看来是让我们关注抓这字了 . 进入页面.就一个输入框: Input Your pass key [ ] Submit . 看不出什么,随便输入一个,提示check failed.空空如也.

那么先想使用bs来抓包吧. 如图,然后我试着构造catch, cat, mouse的参数… 甚至tom…jerry,但是无一成功..

没办法看一下提示…我去….居然倒在了最后一步.仔细看看上图抓包后的 Content-Row: MTUwOTQ2MTg3OA== 这里有一串非常奇怪的字符.那么试着直接提交不行,应该就是提交的参数了. 试着复制提交,得到flag

0x02. 这题好像有点难

题目链接 这里题目比较直接了,进来给了个php代码,从里面可以比较简单看出来,要让参数变为 1.1.1,1

那么,关键是如何发送参数使得 HTTP_CLIENT_IP 这个值符合呢. 查阅一下发现存在X-Forwarded-For: 1.1.1.1 client-ip: 1.1.1.1 这两个可能的字段伪造ip.于是伪造一波,两边都实现了.

0x04.看起来有点难

题目链接 一看登录就先猜测sql注入.然后尝试 admin=x 发现后面被过滤,说明存在注入漏洞,sqlmap开扫.发现admin字段存在注入. 开始入侵,常规题.

1

2

3

4

5

6

71.users : test@localhost

2.dbs :available databases [2]:

- information_schema

- test

3. tables: admin

4. column: username & password

5. key-->got

0x05.头有点大

题目链接 .首先题目说提示已经很多了,那么直入正题吧.

You don’t have permission to access / on this server.

Please make sure you have installed .net framework 9.9!

Make sure you are in the region of England and browsing this site with Internet Explorer

很直接,那么我们直接改header,一个是.net版本. 一个是地点. 一个是浏览器标识. 比较麻烦的就是第一个.

先把其他改了.

0x06. PHP大法

链接就不贴了…窗口有,题目如图,通过查看代码知道是二次编码而来.秒了.

0x07. WTF,这是什么鬼

这题有点意思. 直接上图.

发现都是字符括号间的斗争. 暂时没有头绪. 首先通过纯文字有答案,多是经过了编码. 然后看看js有没有直接的什么编码库这么丑的..然后各种试了一下,用bs的decode也用了.没有结果.发现重合的比较多,但是并不是完全重合.排除了重合的可能. google搜一下 !+[]+[+[]]] .然后发现一个JSFuxk. 然后把页面丢进去run

得到flag : Ihatejs #………….真的是wtf

0x08. 程序逻辑问题

题目链接 .进入是一个登陆界面已经有了usr跟passwd. 但是发现没什么用,点开f12.发现有个

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27<?php

if($_POST[user] && $_POST[pass]) {

$conn = mysql_connect("********, "*****", "********");

mysql_select_db("phpformysql") or die("Could not select database");

if ($conn->connect_error) {

die("Connection failed: " . mysql_error($conn));

}

$user = $_POST[user];

$pass = md5($_POST[pass]);

$sql = "select pw from php where user='$user'";

$query = mysql_query($sql);

if (!$query) {

printf("Error: %s\n", mysql_error($conn));

exit();

}

// 只有一条数据row[0] MYSQL_ASSOC:只得到关联索引的数组

$row = mysql_fetch_array($query, MYSQL_ASSOC);

//strcasecmp()无视大小写比较两个字符串,相同返回0

if (($row[pw]) && (!strcasecmp($pass, $row[pw]))) { //关键行

echo "

Logged in! Key:**************

";

}

else {

echo("

Log in failure!

");

}

}

?>

用sqlmap的post构造请求,得到最后的 admin : 111 是账号密码. 然后分析逻辑. 发现并不对,因为它要求md5加密后的数据库pass跟明文相等,这当然是不可能的. 明文 111 加密后32位. 所以可以看出题目是想要我们自己拼凑一个一样的. 注意pass不能毙掉,不然就获取不到值了.

user=’ union select md5(1)#

&pass=1

在post中构造利用联合查询的特性,把$sql的值手动覆盖.还原语句为,注意单引号中间的是入参.为了观看明显,我特意把单引号前后打了空格,可以认真看看.

1

2

3

4

5

6

7

8#php语句

select pw from php where user='$user'

#sql语句1 (√)

select pw from php where user=' ' union select md5(1)# ' '

#sql语句2 (√)

select pw from php where user=' ' union select md5(1)' '

#sql语句2 (x) :因为admin是正确的值,所以返回值有两个,取第一个那么结果还是111而非md5(1)

select pw from php where user='admin' union select md5(1)' '

0x09.字符串解密

这题就是程序反推题了. 直接给了你代码跟加密后的密文,让你推之前应该是.读懂程序.变成人话.

1

2

3

4

5

6

7

8

9

10

11void encode(String str){ //php函数语法,转换为了java格式,不然看起来太蛋疼.函数都是php的注意.

String strR = strrev(str);

for(int i = 0;i < strR.len;i++){

String c = substr(strR,str,1);

String d = ord(c)+1;

c = chr(d);

String e = e + c;

}

return str_rot13(strrev(base64_encode(e)));

}

// key = a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws

那么分步骤逆向推:

str_rot13的逆向

ROT13 编码把每一个字母在字母表中向前移动 13 个字母。数字和非字母字符保持不变。

直接在线网站;n1mYotDfPRFRVdEYjhDNlZjYld2Y5IjOkdTN3EDNlhzM0gzZiFTZ2MjO4gjf

strrev逆向.

可以写个脚本..当然图快就在线

fjg4OjM2ZTFiZzg0MzhlNDE3NTdkOjI5Y2dlYjZlNDhjYEdVRFRPfDtoYm1n

base64Decode

~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg

醉了.循环手工岂不是要命.还是老实写一下php代码吧…(逃避可耻且无用系列

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18<?php

$str="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function decode($str)

{

$_ = "";

$str=base64_decode(strrev(str_rot13($str)));

for($_0=0;$_0

{

$_c = substr($str,$_0,1);

$__ = ord($_c)-1;

$_c = chr($__);

$_ = $_.$_c;

}

echo strrev($_);

}

decode($str);

?>

0x0A. 文件上传绕过1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16-----------------------------75873129122758

Content-Disposition: form-data; name="dir"

/uploads/

-----------------------------75873129122758

Content-Disposition: form-data; name="file"; filename="evil.php"

Content-Type: application/octet-stream

phpinfo();

?>

-----------------------------75873129122758

Content-Disposition: form-data; name="submit"

Submit

-----------------------------75873129122758--

不允许上传非图片格式,那么我们bs抓包,修改格式信息为如下

1

2

3

4

5

6

7

8

9

10

11

12-----------------------------16829464029676

Content-Disposition: form-data; name="dir"

/uploads/

-----------------------------16829464029676

Content-Disposition: form-data; name="file"; filename="evil.png"

Content-Type: image/png

phpinfo();

?>

-----------------------------16829464029676

发现发送之后还是不行.必须得把名字也改掉. 那跟最开始直接把文件改名一样. 问题是如何读取到改了之后的evil.png文件. 这里上传完成后提示

Upload: evil.png

Type: image/png

Size: 0.021484375 Kb

Stored in: ./uploads/8a9e5f6a7a789acb.php

必须上传成后缀名为php的文件才行啊!

提示我们必须上传php文件….那我们试试文件包含漏洞? 写了个简单测试8a9e5f6a7a789acb.php并没有…陷入江局…看一下提示. 0x00文件截断漏洞 .唔这个的确之前没听过.查一波.说明之前文件上传漏洞那有很多地方没有细究清楚.

php中strtotower,web安全之CTF之旅(一)相关推荐

  1. CTF之旅WEB篇(3)--ezunser PHP反序列化

    一.审题 对方朝你扔过来一串代码(当然这次又是蹭的题只说过程和思路): <?php highlight_file(__FILE__); class A{public $name;public $ ...

  2. 论剑场中部分web题的WP

    好久不更,最近在学习ctf,今天更一波new bugctf论剑场中部分web题的WP,有一部分是借鉴大佬的博客! web25 有一个输入框,一个下载链接,随便输入显示wrong!,下载链接进去后转ht ...

  3. eclipse中导入web项目详细配置

    前言 在eclipse中导入web项目所需要的操作 一. 导入项目 选择 File 中的 import 选择 svn 中的从 svn 检出项目(本地项目就选 General -> Existin ...

  4. 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法

    title: 把myeclipse中的web项目导入eclipse中不能编程web项目的解决办法 tags: grammar_cjkRuby: true --- 右键单击项目,properties-- ...

  5. 配置Tomcat和在Eclipse中创建Web工程

    配置Tomcat服务器信息: 在Tomcat的安装目录下有一个conf目录,里面存放着Tomcat服务器的配置文件,其中最为核心的配置文件是server.xml,在这个文件里我们可以配置服务器的各种参 ...

  6. ASP.NET MVC4中调用WEB API的四个方法

    当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法.就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强 ...

  7. unity 程序win7在进程里运行_Win7系统中unity web player是什么程序

    unity web player是什么程序,可不可以卸载?下面教程给大家详细讲解"unity web player"程序.以及可以不可以卸载!一起去看看吧! 如果你安装好Win7没 ...

  8. 宿主如何访问虚拟机中的web服务器

    宿主:win10专业版 虚拟机:VMware 12 pro 虚拟机系统:Ubuntu 16.04 LTS Web服务器:Apache(xampp) (图中选的是桥接模式,NAT模式也行.) Ubunt ...

  9. 在TMG2010中发布Web服务器场

    在许多情况下,我们使用TMG2010(或ISA Server 2006)发布单一的Web服务器,这适合对可靠性与性能要求不高的单位.如果用户对网站的响应要求比较高,并且要求实时在线并且需要提供容灾能力 ...

最新文章

  1. 《数据科学:R语言实现》——3.9 排列数据
  2. rsyslog+loganalyzer+evtsys搭建集中式监控系统
  3. 初识Mysql(part16)--我需要知道的2条Mysql语句之子查询
  4. mysql中where条件判断语句_MySQL Where 条件语句介绍和运算符小结
  5. idea的jsp如何显示语法高亮_如何啃下Python学习中的三块硬骨头?
  6. 【报告分享】2022全面数字化发展下的消费市场洞察.pdf(附下载链接)
  7. CentOS 报no acceptable C compiler found in $PATH的解决办法
  8. python的ide怎么安装_python安装以及IDE的配置教程
  9. html5动态创建canvas,[canvas]通过动态生成像素点做绚丽效果
  10. 最牛茅台投资人的一席真言
  11. 通过JAVA编写DOMINO服务器端插件程序
  12. 《TCP/IP详解》中文版下载地址
  13. 微信网页怎么用电脑打开
  14. springboot-security安全登录
  15. 深度学习PyTorch笔记(9):自动求导
  16. 小米4C 安装Xposed框架失败解决方案
  17. 国科大 计算机学院 雁栖湖校区(研一上)
  18. quartus——使用vhdl语言实现层次化设计
  19. C语言运算符与表达式
  20. JMP 17 全新发布,让分析工作流程更简便

热门文章

  1. I wanna go home
  2. 云服务器数据盘数据丢失,磁盘数据恢复,testdisk工具的使用
  3. 微信网页开发,动态修改页面Title
  4. JavaScript工作学习总结
  5. 【Cocos2D-X 游戏引擎】初窥门径(14)CCTableView
  6. 第1讲:树莓派及配件购买指南【子豪兄的零基础树莓派教程】
  7. 颜色的前世今生5·色调和补色
  8. Mysql一个字段存储多个url_MySql一个字段用;隔开,存储了多个照片路径,如何用JS显示所有图片在页面上。...
  9. 移动硬盘显示无法访问由于IO设备错误,无法运行此项请求,里面的文件怎么恢复
  10. JavaWeb学习 JavaScript语法快速学习