实验吧 web题--代码审计类

2023-11-18

一、因缺思汀的绕过


1、web题常规套路就是查看源代码,于是右击查看源代码发现:<!--source: source.txt--><br/>。构造url:http://ctf5.shiyanbar.com/web/pcat/source.txt 查看php代码。

2、关键php代码:

if (mysql_num_rows($query) == 1) { 
    $key = mysql_fetch_array($query);
    if($key['pwd'] == $_POST['pwd']) {
        print "CTF{XXXXXX}";
    }else{
        print "浜﹀彲璧涜墖锛�";
    }
}else{
	print "涓€棰楄禌鑹囷紒";
分析代码发现:满足if (mysql_num_rows($query) == 1) 和if($key['pwd'] == $_POST['pwd']) 即可得到flag。也就是说要满足返回的结果集影响数为1,同时 $key['pwd']和 $_POST['pwd']相等。

3、构造sql语句:'or 1 limit 1# 可以满足第一个判断。limit 1 可以控制只查询一行,影响数为1。为了同时满足两个判断可以构造语句:'or 1=1 group by pwd with rollup limit 1 offset 2 #。语句group by pwd with rollup 的意思是在数据库中添加分组使pwd==null;offset 2的意思是从第二行开始查询。

4、查询框中输入:'or 1=1 group by pwd with rollup limit 1 offset 2 #得到flag。

二、拐弯抹角

1、题目列出七个条件:

不能出现 ./

不能出现 ../

只能使用小写字母和 . 还有 /

不能出现 //

必须包含/index.php,并且以此结尾

禁止p后面出现.这个符号

$URL必须与/indirection/index.php有所不同


2、通过伪静态技术构造index.php/index.php可以绕过所有判断条件。第二个index.php会被当作参数处理,第一个index.php被解析。


3、最后的url:http://ctf10.shiyanbar.com:8888/indirection/index.php/index.php

三、Forms

1、查看代码,发现<input type="hidden" name="showsource" value=0>
2、F12查看器修改表单内容。将 <input type="hidden" name="showsource" value=0>中hidden去掉,value设为1.提交表单之后出现源代码:
$a = $_POST["PIN"];
if ($a == -19827747736161128312837161661727773716166727272616149001823847) {
    echo "Congratulations! The flag is $flag";
} else {
    echo "User with provided PIN not found.";
}
3、将$a输入到文本框,提交可得到flag

四、once more

1、直接View the source code查看php代码

2、

<?php
if (isset ($_GET['password'])) {
	if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
	{
		echo '<p>You password must be alphanumeric</p>';
	}
	else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)
	{
		if (strpos ($_GET['password'], '*-*') !== FALSE)
		{
			die('Flag: ' . $flag);
		}
		else
		{
			echo('<p>*-* have not been found</p>');
		}
	}
	else
	{
		echo '<p>Invalid password</p>';
	}
}
?>
password长度小于8,数值大于9999999,同时包含字符‘ *-* ’,即可得到flag。根据提示,可以利用科学计数法满足长度和数值的要求。

3、1e8(10的8次方)即可满足长度和数值的要求。还有要求就是包含 *-* ,同时,password必须是数字和字母,所以用%00将1e8和*-*隔开。地址栏会自动进行url编码,会将%00编码成%2500,所以要在地址栏中构造出?password=1e8%00*-*

五、Guess Next Session

1、直接View the source code查看php代码

2、关键的代码是

if ($_GET['password'] == $_SESSION['password'])
        die ('Flag: '.$flag);
得到flag必须满足$_GET['password'] == $_SESSION['password']。
3、可以将提交的password设为空,把session也设为空就可以满足判断条件。直接点击guess,并用burp抓包,将包中的PHPSESSID改为空即可得到flag

六、FALSE

1、直接View the source code查看php代码

2、关键代码

if ($_GET['name'] == $_GET['password'])
        echo '<p>Your password can not be your name!</p>';
    else if (sha1($_GET['name']) === sha1($_GET['password']))
      die('Flag: '.$flag);
 满足name和password不同,哈希值相同就能得到flag。

其中$_GET['name'] == $_GET['password']是==,只比较内容,只要内容不同就能满足。
sha1($_GET['name']) === sha1($_GET['password']是===,比较类型和值内容。错误相同也是相同,这里sha1默认的字符串变量输入,如果是别的变量输入,则会报错,因此采用数组比较好。

2、直接输入http://ctf5.shiyanbar.com/web/false.php?name[]=1&password[]=2 得到flag。

七、程序逻辑问题

1、查看源代码,发现index.txt,点进去查看代码

2、关键代码:

if($_POST[user] && $_POST[pass]) {
	$conn = mysql_connect("********, "*****", "********"); //有了user和pass才能连接数据库
	mysql_select_db("phpformysql") or die("Could not select database");
	if ($conn->connect_error) {
		die("Connection failed: " . mysql_error($conn));
} 
$user = $_POST[user];
$pass = md5($_POST[pass]); //将pass进行md5加密

$sql = "select pw from php where user='$user'"; //从php表中查询user='$user'的pw字段值
$query = mysql_query($sql);
if (!$query) {
	printf("Error: %s\n", mysql_error($conn));
	exit();
}
$row = mysql_fetch_array($query, MYSQL_ASSOC); //查询结果以MYSQL_ASSOC格式赋值给变量row
//echo $row["pw"];
  
  if (($row[pw]) && (!strcasecmp($pass, $row[pw]))) { //查询的pw的值与输入的pass的值一样
	echo "<p>Logged in! Key:************** </p>";
}
else {
    echo("<p>Log in failure!</p>");
	
  }
  
  
}
要满足 ($row[pw]) && (!strcasecmp($pass, $row[pw])),但是并不知道user对应的pw值,可以使用union联合查询,使union前面的值为false,执行union后面的语句。
利用hackbar构造post语句:
user=soso' and 1=2 union select "D0717F47123F763C266CA3A759DCAF30" &pass=soso
其中, D0717F47123F763C266CA3A759DCAF30为soso的md5值

八、PHP大法

1、打开题目发现:Can you authenticate to this website? index.php.txt
构造url:http://ctf5.shiyanbar.com/DUTCTF/index.php.txt

得到php代码

<?php
if(eregi("hackerDJ",$_GET[id])) {
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
  echo "<p>Access granted!</p>";
  echo "<p>flag: *****************} </p>";
}
?>

2、对输入的id进行url解码,如果解码的结果是hackerDJ就可以得到flag
因为地址栏会自动进行一次url解码,所以需要对hackerDJ进行两次url编码,然后构造url:
http://ctf5.shiyanbar.com/DUTCTF/index.php?id=%25%36%38%25%36%31%25%36%33%25%36%62%25%36%35%25%37%32%25%34%34%25%34%61

九、貌似有点难

1、View the source code

2、关键的一句:

if ($GetIPs=="1.1.1.1"){
echo "Great! Key is *********";
}

3、burp中直接抓包 增加X-Forwarded-For:1.1.1.1,发送包,即可得flag

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实验吧 web题--代码审计类 的相关文章

  • 我可以在为服务器提供 API 的同时提供静态文件吗?

    所以我对网络开发还很陌生 现在我和我更加面向网络的朋友开始了一个项目 他向我扔了各种各样的框架 我们正在做 Vuejs jade stylus 和 jeet 对于新手来说 这当然非常令人困惑 因为没有 Vuejs 示例使用 jade 没有
  • 如何在 C# Windows 应用程序中引用网站用户控件?

    我在 Windows C 应用程序中有一个解决方案 其中我也有一个网站 在网站中我有 1 个用户控件 现在我希望在同一解决方案的其他 C 项目中使用用户控件 怎么做 那是不可能的 您必须为 Windows 应用程序重新创建它 您可以重用的是
  • 客户端Web - 如何随时获取当前记录ID

    我正在努力 基于工作流程状态的不同权限 https stackoverflow com questions 10994216 different permissions based on workflow state问题 但我正在努力解决这
  • 如何检测访问者使用的是HTTP/2还是SPDY?

    我正在寻找一个可以检测访问者的浏览器是否启用了 SPDY 或 HTTP 2 的脚本 就像是this https www ist http2 aktiviert de 理论上 一次nextHopProtocol降落在资源计时 https w3
  • Vaadin 与 Bootstrap

    我计划制作一个应用程序 该应用程序在客户端具有复杂表单和逻辑验证的视图 我计划使用 AJAX 进行提交并具有一些视觉吸引力 我想要那些具有 Bootstrap 和 或 CoffeeScript 和 Vaadin 开发经验的人的推荐 我有两个
  • 如何通过 HTML 输入标签获取文件的引用? (角度2)

    我想在 Firebase 中上传图片 但要做到这一点 我必须先获取文件 例如 如何通过 HTML 获取我的计算机的图像 我正在尝试这样做 但我不知道这样做的回报是什么 帮帮我吧伙计们
  • Ant Design Collapse - 关闭按钮

    我是 Ant Design 的初学者 在使用 Ant Design 库中的 Collapse 和 Form 时遇到了这个问题 我已经设置了我的页面 其中添加新项目的表单位于折叠中 并且折叠下方有一个项目列表
  • 网页编码,设置矛盾[重复]

    这个问题在这里已经有答案了 如果一个网页有 但http标头有 Content Type text html charset UTF 8 那么假设什么编码呢 在 HTML5 中 优先级定义为 用户浏览器设置 字节顺序标记 HTTP 标头 or
  • 执行预检请求时是否需要 Access-Control-Allow-Origin CORS 标头?

    我们在我们的网站上看到了著名的 CORS 错误 XMLHttpRequest 无法加载https my site com api https my site com api 请求的资源上不存在 Access Control Allow Or
  • 最长和最短的 HTML 字符实体名称是什么? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 管子周围有
  • URL中的gs_upl是什么意思?

    在任何谷歌搜索 URL 中 gs upl 是什么意思 例如 那么 gs upl 1045l1663l0l3648l4l4l0l0l0l0l258l682l0 3 1l4l0 在这里意味着什么 从构建的脚本gs upl j 我找到 funct
  • 电话链接在 iframe 中不起作用,但在 iOS 9 Web 中的 div 中起作用。如何使电话链接在 iOS 9 safari 中正常工作?

    您好 我正在尝试 iOS9 中 iframe 内的电话链接 iOS9 中的 safari 中无法打开手机应用程序 当我在里面尝试相同的链接时 它就在那里工作 我正在尝试下面的锚标记 将此代码放入 div 中时会打开手机应用程序 但同样的代码
  • 使用内容安全策略防止 Internet Explorer 11 上的内联 JavaScript

    是否可以使用 ASP NET WebForm 上的 CSP 来阻止 Internet Explorer 11 上的内联 JavaScript 我知道 IE 11 不支持内容安全策略级别 2 但它支持级别 1 0 我尝试了很多方法 但没有明确
  • 使用节点http代理转发http代理

    我正在使用 node http proxy 库来创建转发代理服务器 我最终计划使用一些中间件来动态修改 html 代码 这就是我的代理服务器代码的样子 var httpProxy require http proxy httpProxy c
  • HTML if 语句在 CDN 失败时加载本地 JS/CSS

    当从 CDN 或任何外部服务器加载 CSS JS 文件时 有可能 即使概率很低 由于外部故障而丢失该文件 在这种情况下 html 页面将因缺乏适当的 CSS 和 JS 而被损坏 有没有一种实用的方法可以在 CDN 故障时加载本地版本 IF
  • asp.NET 2.0网站无法访问App_Code中的类

    将我的网站部署到服务器后 我在访问课程时遇到问题 请注意 这是一个网络Site不是网络应用 错误是 编译器错误消息 CS0246 找不到类型或命名空间名称 Order 是否缺少 using 指令或程序集引用 版本信息 Microsoft N
  • System.Web.HttpException 无法加载类型“[命名空间].???”

    这开始于无法加载类型 全局 错误 在我尝试了一些方法后 没有找到删除 Global asax 文件的位置 现在错误是无法加载类型 namespace 在哪里 是我尝试加载的每个页面的类名 该网站 在 VS2008 本地开发计算机中执行时 工
  • 为什么要使用除 div 以外的任何东西? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用“邮递员”chrome 应用程序的肥皂请求正文

    假日网络服务 的肥皂请求正文会是什么样子 http www holidaywebservice com HolidayService v2 HolidayService2 asmx wsdl http www holidaywebservi
  • php 中的 stackoverflow 上有这样的成就系统吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 从概念上讲 如何使用 PHP 和 MySQL 为网站编写一个成就系统 唯一真正的方法是不断执行 MySQL 查询来测试成绩等吗 您有两

随机推荐