一、代码审计include("flag.php"); highlight_file(__FILE__); class FileHandler { protected $op; protected $filename; protected $content; function __construct() { $op = "1"; $filename = "/tmp/tmpfile"; $content = "Hello World!"; $this->process(); } public function process() { if($this->op == "1") { $this->write(); } else if($this->op == "2") {
一、PHP伪协议种类与函数PHP支持的伪协议种类file:——访问本地文件系统http:——访问http(s)网站ftp:——访问FTPphp:——访问IO流zlib:——压缩流data:——数据(RFC 2397)glob:——查找匹配的文件路径模式phar:——PHP归档ssh2:——Secure Shell 2rar:——RARogg:——音频流expect:——处理交互流一般用于文件包含的函数:include()require()include_once()require_once()highlight_file()show_source()flie()readfile()file_get_contents()file_put_contents()fopen() (比较常见)二、php://条件:allow_url_fopen:off/on allow_url_include :仅php://input、php://stdin、php://memory、php://temp 需要onphp:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php:/
一、信息收集打开靶场,发现表单,尝试数据1很明显,这是一道SQL注入题目。验证添加单引号,报错信息证明是字符型注入。再添加and 1=1#,返回正常页面。再尝试1' and 1=2#,返回报错证明存在SQL注入漏洞,尝试联合查询。发现关键词屏蔽,我们注意到where被屏蔽,证明常规注入手法已经失效。二、堆叠注入黑名单没有屏蔽show,尝试使用堆叠注入。查询表名0';show tables;#查询列名0';show columns from words;#,发现正常显示数据。查询列名0';show columns from \`1919810931114514\`;#,发现flag字段。三、爆数据这里爆数据的思路是通过修改查询的表名称来使前台返回数据,也是这个题的考点。我们通过管理数据库命令是无法查询到flag中的内容的,我们可以考虑通过rename命令,将1919810931114514表重命名为words表,再为其添加一个id列,保证我们可以正常查询到其中内容。payload:1'; rename table words to word1; rename table `1919810
一、信息收集打开靶场,发现页面源码。if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR']; } if(!isset($_GET['host'])) { highlight_file(__FILE__); } else { $host = $_GET['host']; echo $host."<br />"; $host = escapeshellarg($host); echo $host."<br />"; $host = escapeshellcmd($host); echo $host."<br />"; $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']); echo 'you ar
一、password=md5($pass,true)绕过这个是只能用于基于MySQL数据库进行的登录判断SQL注入绕过。这个问题的发生是在这个场景下。场景:$pass = md5($_POST['pass'],true); $sql = "SELECT * FROM admin where pass='$pass'"; $result = $conn->query($sql); if ($result->num_rows != 0) { echo "success"; //后续操作 } else { echo "password error or user not found!"; }这个场景看上去很安全是吧?直接将用户提交的密码字符串经过MD5加密后直接拼接在SQL语句中,按照常规思想确实没有办法进行SQL注入,但是这里我们可以构造一个十分巧妙的输入来使where子句永真。md5($pass, true)函数这个函数会返回$pass的MD5原始16字符二进制格式。这也是我们这次绕过的原理。
Equinox
一个乐于分享的网安人