攻防世界[Web]-高手进阶
每次进题做题页面时,源源码题目的源源码编号变动,导致写WriteUp时需反复调整顺序,源源码因此已将编号去除,源源码python方法源码建议多用搜索功能。源源码
初始页面应为index.php,源源码但URL显示为1.php,源源码实际操作中输入index.php后同样跳转到1.php。源源码使用burpsuite抓取响应头,源源码在URL中访问index.php,源源码进一步分析。源源码
题目页面提供了一串提示,源源码说明robots.txt的源源码作用与潜在风险。尝试直接访问robots.txt,发现实际暴露了flag.php文件。robots.txt主要供爬虫遵循规则,但flag.php文件即使被禁止爬取,仍可通过浏览器直接访问并获取flag。网页顶部导航源码
部分题目未完成,之前有参考WriteUp,从现在开始会特别标注。这些题目给出的线索有限,如robots.txt、login.php、admin.php等文件不存在。查看WriteUp后发现存在phps[1]这种后缀的文件,可直接通过浏览器查看源代码。通过HTTP响应,需要将id参数设置为“admin”,通过GET方式传递,由于两次解码过程,需将admin编码为%%%6d%%6e,再对%%%6d%%6e进行一次url编码%%%d%%e。通过GET方式提交,成功获取flag。
题目是php_rce,搜索发现ThinkPHP5存在远程代码执行漏洞。c 猜词源码构造payload验证漏洞,最终成功验证并修改payload查找flag。直接输出flag,确认漏洞利用。
题目页面显示ThinkPHP5的默认页面,基于题目名php_rce,搜索发现存在漏洞。构造payload验证并修改查找flag,最终直接输出flag。
题目页面仅显示PHP代码,主要过程是获取通过GET方式传递的page参数。检查page参数中是否包含php://字段,若存在则删除。代码最后会include page参数中的内容。由于对include函数不熟悉,参考文档后得知支持多种协议。构造payload使用data://协议传入一句话木马,查找flag文件。
尝试直接查找flag文件,屏幕亮度调节源码未果。继续尝试列出当前目录文件,最终发现目标文件并直接输出结果。
题目提示存在SQL注入,尝试在输入框中验证,发现确实存在。使用sqlmap扫描数据库信息,结果为MariaDB,root用户非DBA。查找WriteUp后得知是手工注入方法。在写入payload后,发现flag文件位置在id=的HTTP响应中。
题目页面显示php代码,需要通过GET方法传递base编码的序列化demo对象。主要步骤为创建Demo实例、序列化。完成payload构造后,通过GET方法提交。
访问题目网站,12鬼麻将源码源码中给出提示,访问source.php进行代码审计。发现hint.php文件,提示flag在ffffllllaaaagggg中。检查checkFile函数逻辑,尝试绕过,发现是字符串截取逻辑错误。修改payload,通过两次url编码的?前设置白名单文件,绕过后直接获取flag。但路径解析问题还需进一步研究,如何处理source.php%f与../../../../ffffllllaaaagggg的路径关系。
python代码,1的平方减2的平方加3的平方减4的平方……一直到减的平方,输出结果?
按照题目要求有两种方法可以得到结果方法一
sum1=0
flag=1
for i in range(1,):
sum1=sum1+flag*i*i
flag=-flag
print(sum1)
源代码(注意源代码的缩进)
方法二
print(sum([i*i for i in range(1,) if i%2==1]+[-(i*i) for i in range(1,) if i%2==0]))
web中找flag技巧
这些技巧主要有搜索已知信息、检查源代码、利用开发者工具和尝试常见位置。
1、搜索已知信息:使用关键词进行搜索,会找到相关的线索或提示。
2、检查源代码:通过阅读代码可以发现一些隐藏的信息或提示,特别是在HTML、JavaScript和CSS代码中。
3、利用开发者工具:可以找到一些线索,如在控制台中查看错误消息或网络请求。
4、尝试常见位置:如隐藏的链接、隐藏的表单字段或注释中,会发现隐藏着的flag。
手撕CTFHub-Web(七):RCE
在深入探讨 RCE(远程代码执行)的实现过程中,我们首先聚焦于 PHP 中的 eval 函数。eval 函数允许执行 PHP 字符串,通常通过接收 POST 或 GET 方法提交的数据,如 cmd 参数。这允许执行如 `system('ls')` 这样的命令,以查看当前目录。然而,没有对输入进行过滤,这直接导致了攻击者可以连接到菜刀(web shell)服务器。
当在根目录发现 flag 文件时,我们注意到一个名为 shell.txt 的一句话木马文件。通过接收 file 参数并利用 strpos 函数,我们可以绕过对 flag 文件的直接包含限制。构造请求 `?file=./shell.txt` 来包含 shell.txt,并使用菜刀连接,我们得以在根目录下获取 flag。
接着,我们转向 PHP://input 的概念,它允许将 POST 请求中的数据作为 PHP 代码执行。构造 `?file=php://input` 的请求并提交 POST 数据,我们可以执行命令并从根目录中找到 flag 文件。
远程包含提供了一种通过外部服务器的包含命令执行代码的方法。通过在 file 参数中填写自己的服务器上的包含一句话木马的 txt 文件地址,我们可以绕过服务器端的限制,直接在根目录下找到 flag。
在尝试直接读取源代码时,发现与 PHP://input 类似的问题。根据题目描述和提示,我们猜测使用 PHP://filter 协议可以读取 flag 文件。构造请求 `/?file=php://filter/read=convert.base-encode/resource=/flag`,读取 flag 文件的 base 内容,然后对得到的内容进行 base 解码以获取 flag。
进入命令注入的探讨,exec 函数用于执行 cmd 参数指定的命令,并将执行后的返回状态写入 res。尽管尝试使用管道符|连接命令,但没有返回任何内容,可能是因为存在无法显示的字符。使用 base 编码并导出命令后,解码得到 flag。
面对 cat 命令的过滤,我们使用连接符''、\ 或 $@ 来绕过过滤,构造命令 `.0.0.1|ca''t ./ flag_.php|base`,获取 base 编码后的内容并解码得到 flag。
过滤空格的处理中,我们使用连接符`<`构造命令 `.0.0.1|cat<./flag_.php|base`,获取 base 编码后的内容,解码后得到 flag。
目录分隔符的过滤处理需要特别注意,使用分号`;`来分割命令。由于 `/` 被过滤,我们先用 `cd` 进入 flag_is_here 文件夹,然后用 `cat` 读取 flag 文件 flag_.php。构造命令 `.0.0.1;cd flag_is_here;cat flag_.php` 获取 flag。
运算符的过滤包括 |、& 和 ||,通过使用分号`;`来分隔命令,我们绕过了这些过滤。构造命令 `.0.0.1;cat flag_.php` 并查看源代码页面以获取 flag。
综合过滤练习要求我们整合多种技术,以应对复杂的过滤策略。借助一篇文章中提供的 Linux 绕过方法,我们了解到使用 `%0a` 作为分隔符可以执行命令。请注意 `%0a` 是 URL 编码,必须在 URL 中使用,否则将被二次编码。构造请求 `?ip=.0.0.1%0als` 可以执行成功并发现目录 flag_is_here。接下来,用 `%` 代替空格并使用连接符`'’`绕过对关键词 cat 和 flag 的过滤,构造命令 `?ip=.0.0.1%0acd%fl''ag_is_here%0aca''t%fl''ag_.php` 并查看源码获取 flag。
求jsp登录源码 急急急急急急急急急急急
登陆页面 index.jsp源码:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>login</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form action="LoginServlet" method="post">
用户名:<input type="text" name="username" ><br>
密码:<input type="password" name="userpass"><br>
<input type="submit" value="登陆"> <input type="reset" value="取消">
</form>
</body>
</html>
-------------
LoginServlet.java 源码:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
/
*** Constructor of the object.
*/
public LoginServlet() {
super();
}
/
*** Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/
*** The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获得jsp页面传输的参数
String username=request.getParameter("username");
String userpass=request.getParameter("userpass");
//判断
if(username.equals("user")&&userpass.equals("")){
response.sendRedirect("1.jsp");
}else if(username.equals("admin")&&userpass.equals("")){
response.sendRedirect("2.jsp");
}else{
response.sendRedirect("index.jsp");
}
}
/
*** The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
/
*** Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
-------------
1.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP '1.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is 1.jsp <br>
</body>
</html>
-------------
2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP '1.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is 2.jsp <br>
</body>
</html>
2024-12-29 03:42
2024-12-29 03:41
2024-12-29 03:05
2024-12-29 02:11
2024-12-29 02:08