Code-Audit(代码审计)习题记录

这篇具有很好参考价值的文章主要介绍了Code-Audit(代码审计)习题记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍:

自己懒得搭建靶场了,靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习,可以随地访问,本文所有的题目均来源于网站HSCSEC-Code Audit

1、习题一 

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

题目内容如下:

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记


1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY= 
<?php 
 
error_reporting(0); 
require __DIR__.'/lib.php'; 
 
echo base64_encode(hex2bin(strrev(bin2hex($flag)))), '<hr>'; 
 
highlight_file(__FILE__);

 

查看题目,发现是对$flag 参数进行了一系列加密,得到字符1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY= 因此,如果要还原成flag 就必须对加密的字符串,一一解密。即 base64_decode() -> bin2hex()->strrev()->hex2bin()

因此,撰写代码如下:

<?php 
$s = "1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY="; 
echo(hex2bin(strrev(bin2hex(base64_decode($s))))) 
?>

放在php 代码运行平台运行得到flag

在线运行PHP

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

flag{582a0f2c7e302244b110cc461f5cb100}

2、习题二

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

题目内容如下

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

<?php 
error_reporting(0); 
require __DIR__.'/lib.php'; 
if(isset($_GET['time'])){ 
  if(!is_numeric($_GET['time'])){ 
    echo 'The time must be number.'; 
  }else if($_GET['time'] < 60 * 60 * 24 * 30 * 2){ 
    echo 'This time is too short.'; 
  }else if($_GET['time'] > 60 * 60 * 24 * 30 * 3){ 
    echo 'This time is too long.'; 
  }else{ 
    sleep((int)$_GET['time']); 
    echo $flag; 
  } 
  echo '<hr>'; 
} 
highlight_file(__FILE__);

分析代码后,发现,只有当传入参数time的值必须为数字,而且值的大小必须介于在60 * 60 * 24 * 30 * 2=5,184,000 和60 * 60 * 24 * 30 * 3=7,776,000之间,才能拿到flag,比如说6000000 但是这样就直接sleep 的三个月,恰好科学计数法 6000000= 6e6满足数据要求,而且只需要sleep 6秒即可,因此构造payload 如下

?time=6e6

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

得到flag{yhngdasdaaljlj} 

3、习题三

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

题目内容如下:

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

但是只是显示了这一个英文字母,查看一下源码,发现有一个index.txt

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记 访问一下index.txt,发现了代码

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

<?php 
error_reporting(0); 
echo "<!--index.txt-->"; 
require __DIR__.'/lib.php'; 
if(!$_GET['id']) 
{ 
    header('Location: index.php?id=1'); 
    exit(); 
} 
$id=$_GET['id']; 
$a=$_GET['a']; 
$b=$_GET['b']; 
if(stripos($a,'.')) 
{ 
    echo 'Hahahahahaha'; 
    return ; 
} 
$data = @file_get_contents($a,'r'); 
if($data=="1112 is a nice lab!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4) 
{ 
    echo $flag; 
} 
else 
{ 
    print "work harder!harder!harder!"; 
} 
?>

分析代码,首先初始化会跳转 index.php?id=1 然后 得到三个参数 id,a, b, 如果a的值包含有. 就输出Hahahahahaha,然后不含. 就得到内容定义参数为data 。

如果data的值是1112 is a nice lab! 并且id==0 b 的值的长度大于5 ,eregi("111".substr($b,0,1),"1114") 用111拼接完b的值的第一个字母后的值在1114中 ,要么b的首个字符为4要么为空,并且b的第一个字母的值不能是4 那么只能为空,然后输出flag

解法

1、对于id 的值来说,是一个数字,有$id==0,这里利用弱类型比较可以传字符也可以用0e去绕过,为了使id==0可以给id一个字符 比如 id=abc

2、对于b来说,如果b的第一个字符拼接完111后满足正则 1114 ,并且b的首个字符不能为4 ,因此可以用%00截断,因为 %00的长度为 1 所以b=%0012345 满足长度大于5

eregi 函数在较旧版本的PHP中用于执行不区分大小写的正则表达式匹配。

3、对于a来说,可以使用$a可以使用伪协议php://input也可以用data类型url$a=php://input   

#然后POST一个内容为1112 is a nice lab!的body ,也可以使用 $a=data:,1112 is a nice lab!    #data类型url

$a 使用data类型url 构造如下

?id=abc&a=data:,1112 is a nice lab!&b=%0012345

Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

flag{dsayandahckasda}

使用伪协议php://input

?id=abc&a=php:%2f%2finput&b=%250012345

 Code-Audit(代码审计)习题记录,ctf-代码审计,笔记

flag{dsayandahckasda} 文章来源地址https://www.toymoban.com/news/detail-834919.html

到了这里,关于Code-Audit(代码审计)习题记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决Hadoop审计日志hdfs-audit.log过大的问题

    新搭建的Hadoop环境没怎么用,就一个环境天天空跑,结果今天运维告诉我说有一台服务器磁盘超过80%了,真是太奇怪了,平台上就跑了几个spark测试程序,哪来的数据呢? 既然是磁盘写满了,那首先就要找到具体是什么数据写满的磁盘。 用df查看,是根目录,还不是数据盘;

    2024年02月14日
    浏览(72)
  • 代码审计笔记之开篇

    代码审计是从软件测试发展而来,早起一般采用常规软件测试与渗透测试的手段来发现源码漏洞,但是随着软件规模的越来越大,架构越来越复杂,安全漏洞和后门也越来越多越来越隐蔽,这使得传统的软件测试方法很难检出源码源码中的安全漏洞,于是 通过源码来识别程序

    2024年02月06日
    浏览(35)
  • Upload-labs 1-21关 靶场通关笔记(含代码审计)

    目录 Pass-01(JS前端验证)  方法一:删除JS验证   方法二:先上传符合要求的图片 再在burp里面修改后缀即可 Pass-02(MIME验证) 前置知识$_FILES Pass-03(php3、phtml绕过黑名单) Pass-04(.htaccess绕过黑名单)  前置知识 .htaccess 思路一  思路二 思路三 ​编辑 Pass-05(.user.ini黑名单

    2023年04月09日
    浏览(49)
  • 日志审计与分析练习题

    1.  ( 单选题) 【单选题】以下关于日志的描述不正确的是( ) A. 日志是在事故发生后查明“发生了什么”的一个很好的“取证”信息来源,但无法为审计进行跟踪 B. 日志是由各种不同的实体产生的“安全记录”的集合 C. 通常为计算机系统、设备、软件等在某种情况下记录的信息

    2024年02月08日
    浏览(55)
  • 小迪安全20WEB 攻防-PHP 特性&缺陷对比函数&CTF 考点&CMS 审计实例

    #研究对象 PHP代码漏洞(代码问题) # 知识点: 1 、过滤函数缺陷绕过 2 、 CTF 考点与代码审计 一、原理-缺陷函数-使用讲解-本地 内置函数: 大部分是比较函数(过滤时使用的函数) (1)、== 与 === : 参考: PHP 浅谈 == 和=== 中,数字和字符串比较的问题。_php 数字==字符串

    2024年01月19日
    浏览(56)
  • 【问题记录】VS Code 无法自动补全 Unity 脚本代码

    目录 一,设置 Unity 脚本文件使用 VS Code 打开 二,查看 Unity 要求的 dotnet 版本 三,下载对应版本的 dotnet 四,最后设置 VS Code 智能补全 Unity 代码 五,附加链接 Unity 内置支持在 VS Code 中打开脚本,作为Windows和macOS上的外部脚本编辑器。所以在 Unity 界面中的工具栏点击  Edit

    2024年02月09日
    浏览(58)
  • CTF wed安全(攻防世界)练习题

    进入网站如图: 翻译:在这个小小的挑战训练中,你将学习Robots exclusion standard。网络爬虫使用robots.txt文件来检查它们是否被允许抓取和索引您的网站或只是其中的一部分。 有时这些文件会暴露目录结构,而不是保护内容不被抓取。 好好享受吧!   步骤一: 进入robots.txt文

    2024年04月17日
    浏览(45)
  • 渗透测试练习题解析 4(CTF web)

    考点:git 泄露 进入靶场后只有一串文字,源代码、抓包之类的都没有敏感信息出现,直接用 kali 的 dirsearch 扫描 发现存在 .git 目录,猜测应该是源码泄露,使用 GitHack 扒一下源码,这里我试了很多次,前面都没成功,后面不知道为什么又成功了,应该是网络问题(你们试了

    2024年02月20日
    浏览(39)
  • 渗透测试练习题解析 3(CTF web)

    考点:反序列化漏洞利用 进入靶场,查看检查信息,发现存在两个参数 func 和 p 查看页面源代码 payload:func=file_get_contentsp=php://filter/resource=index.php 整理后,就是 PHP 代码审计了 gettime 中使用了 call_user_func() 函数 也就是说 $func 会被 当成回调函数来执行 ,而 $p 则当做 $func 的

    2024年02月22日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包