desperadoccy的小窝


  • 首页

  • 归档

  • 关于

  • 标签

  • 分类

  • 友链

  • 搜索

curl_exec及parse_url绕过

发表于 2020-01-30 | 分类于 CTF , web

0x00简介

最近肺炎爆发,被迫宅在家。闲来无事,做了道web题,正巧碰到了盲点,记录一下。
题目允许用户输入一个图片url,并通过curl发起请求返回图片给用户。
源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
include "config.php";
session_start();
if(!isset($_SESSION['username'])) {
header('Location: index.php');
exit();
}

function insert_img() {
if (isset($_POST['img_url'])) {
$img_url = @$_POST['img_url'];
$url_array = parse_url($img_url);
if (@$url_array['host'] !== "localhost" && $url_array['host'] !== "timgsa.baidu.com") {
return false;
}
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $img_url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($c);
curl_close($c);
$avatar = base64_encode($res);

if(filter_var($img_url, FILTER_VALIDATE_URL)) {
return $avatar;
}
}
else {
return base64_encode(file_get_contents("static/logo.png"));
}
}
?>
阅读全文 »

BUUCTF_web做题记录

发表于 2019-12-28 | 分类于 CTF , wp

[HCTF 2018]WarmUp

一条源码审计,访问source.php后可查看源码。查看源码可发现后端将传进来的file参数进行修改,然后查看是否属于白名单,但通过后require的却还是原值。所以要做的就是绕过验证。
分析源码

1
2
3
4
5
6
7
8
 $_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}

显然,构造一个hint.php?*类似这样的payload即可绕过。
查看php文档中对include函数有如下解释

如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。

即当file=hint.php?/*时,它会将这个文件名当作文件路径,然后忽略其。至此,便可构造file=hint.php?/../../../../../ffffllllaaaagggg拿到payload

阅读全文 »

GoogleHack初学

发表于 2019-11-11 | 分类于 ctf

前言

一直以为GoogleHack不会运用到ctf中,只有日常渗透时会用。而最近的几场线上赛,有很多题目魔改之前的赛题。在线上赛题目较多的情况下,遇到这种题目应尽量用最短的时间做出来,而搜索是有技巧的,像我之前一阵乱搜,太浪费时间精力了。所以特写此篇博客学习下。
PS:赛后有题做不出来问大师傅,大师傅说网上随便搜搜就出来了,而我根本搜不到。哇的哭出来了。

阅读全文 »

CVE-2019-11043 PHP远程代码执行漏洞

发表于 2019-10-31 | 分类于 CTF , web

漏洞描述

CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码。
向Nginx + PHP-FPM的服务器 URL发送 %0a 时,服务器返回异常。
该漏洞需要在nginx.conf中进行特定配置才能触发。具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
location ~ [^/]\.php(/|$) {



...



fastcgi_split_path_info ^(.+?\.php)(/.*)$;



fastcgi_param PATH_INFO $fastcgi_path_info;



fastcgi_pass php:9000;



...



}
阅读全文 »

2019届全国大学生软件测试大赛web WP

发表于 2019-10-28 | 分类于 CTF , wp

前言

这个比赛是帮曹师傅代打的,曹师傅去xctf总决赛了。orz,曹师傅太强了。
总体感觉这个比赛难度正巧是我的水平,做起来很舒服,又不太难,又不无脑。但是由于比赛时间紧,好多题目直接pass,所以有几道题目记不太清了。

阅读全文 »

file_difference

发表于 2019-10-24 | 分类于 other

前言

windows和Linux的文件存储系统有着很大区别,而这些区别有时候也正是漏洞产生的原因

阅读全文 »

nslookup入门

发表于 2019-10-22

nslookup domain [dns-server]

查询域名的A记录

nslookup -qt=type domain [dns-server]

其中,type可以是以下这些类型:

  1. A 地址记录
  2. AAAA 地址记录
  3. AFSDB Andrew文件系统数据库服务器记录
  4. ATMA ATM地址记录
  5. CNAME 别名记录
  6. HINFO 硬件配置记录,包括CPU、操作系统信息
  7. ISDN 域名对应的ISDN号码
  8. MB 存放指定邮箱的服务器
  9. MG 邮件组记录
  10. MINFO 邮件组和邮箱的信息记录
  11. MR 改名的邮箱记录
  12. MX 邮件服务器记录
  13. NS 名字服务器记录
  14. PTR 反向记录
  15. RP 负责人记录
  16. RT 路由穿透记录
  17. SRV TCP服务器信息记录
  18. TXT 域名对应的文本信息
  19. X25 域名对应的X.25地址记录

nslookup -d [其他参数] domain [dns-server]

查询域名缓存

简析反序列化漏洞

发表于 2019-10-20 | 分类于 CTF , web

php反序列化漏洞,又叫php对象注入漏洞。

序列化与反序列化

php中两个函数serialze()和unserialize()。

serialize

serialize()函数是将传入的参数转换为字符串,以便方便传递和使用。
测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class test{
var $name = 'hello world';
var $score = 97;
var $id = "161830218";
var $etc = [1=>"new test",'a'=>'test'];
}
$class = new test;
$class_ser = serialize($class);
print_r($class);
echo "\n";
var_dump($class);
echo "\n";
print_r($class_ser);
echo "\n";
var_dump($class_ser);
?>
阅读全文 »

树的遍历(非递归)

发表于 2019-10-17 | 分类于 algorithm

前言

太菜了,树的遍历忘的一干二净。上机时脑子空荡荡,知识在垃圾堆。特别写一篇博客理一下。

前序遍历

三种遍历方式中算法最为简单的一个,一直向左遍历,将遍历到的点输出,如果有右节点,就进入右节点,开始新一轮循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void preoder(BT* T)
{
if (!T) return;
ST stack1;
stack1.top = 0;
BT* p = T;
while (stack1.top || p)
{
while (p)
{
printf("%c ",p->data);
stack1.t[stack1.top++] = p;
p = p->left;
}
if (stack1.top)
{
p = stack1.t[--stack1.top];
p = p->right;
}
}
printf("\n");
}
阅读全文 »

PHP限制字符构造webshell

发表于 2019-10-08 | 分类于 CTF , web

前言

在整理2019SUCTF的赛题时,其中有一题代码审计,限制字符、字符串长度,让你构造一个webshell。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
function get_the_flag(){
// webadmin will remove your upload file every 20 min!!!!
$userdir = "upload/tmp_".md5($_SERVER['REMOTE_ADDR']);
if(!file_exists($userdir)){
mkdir($userdir);
}
if(!empty($_FILES["file"])){
$tmp_name = $_FILES["file"]["tmp_name"];
$name = $_FILES["file"]["name"];
$extension = substr($name, strrpos($name,".")+1);
if(preg_match("/ph/i",$extension)) die("^_^");
if(mb_strpos(file_get_contents($tmp_name), '<?')!==False) die("^_^");
if(!exif_imagetype($tmp_name)) die("^_^");
$path= $userdir."/".$name;
@move_uploaded_file($tmp_name, $path);
print_r($path);
}
}

$hhh = @$_GET['_'];

if (!$hhh){
highlight_file(__FILE__);
}

if(strlen($hhh)>18){
die('One inch long, one inch strong!');
}

if ( preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F]+/i', $hhh) )
die('Try something else!');

$character_type = count_chars($hhh, 3);
if(strlen($character_type)>12) die("Almost there!");

eval($hhh);
?>

自己太菜,根本想不到骚操作,一顿搜索、查看题解之后有了此篇总结。

阅读全文 »
1…345…8
desperadoccy

desperadoccy

desperado个人博客,一个瞎学的软工狗。

72 日志
26 分类
36 标签
RSS
GitHub E-Mail
© 2019 — 2022 desperadoccy
访问人数 人 总访问量 次