web入门
给她 1
参考文档
https://blog.csdn.net/weixin_51412071/article/details/124270277
查看链接
sql注入
<?php
$pass=sprintf("and pass='%s'",addslashes($_GET['pass']));
$sql=sprintf("select * from user where name='%s' $pass",addslashes($_GET['name']));
?>
直接用这里的payload也可以,但是要构造万能密码,把and换为or就行%1$' and 1=1#
?name=admin&pass=%1$' or 1=1--+
找到此页面的cookie
转为16进制解码得到
flag.txt
尝试将Cookie中的file赋值为/flag,即
将/flag换成16进制
Cookie: file=2f666c6167
成功
签到题
<?php
if(isset($_GET['url'])){
system("curl https://".$_GET['url'].".ctf.show");
}else{
show_source(__FILE__);
}
?>
代码审计
构造url
get传入url
system表示php直接执行系统的命令
"|"是管道命令操作符,简称管道符。
使用管道符"|"可以将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,
第二个命令的输出又会作为第三个命令的输入,依此类推.
构造
http://edbb7af6-9f4a-445e-9578-93b24d1559c6.challenge.ctf.show/?url=;ls;
则为:
curl https://;ls;.ctf.show
例如:
靶场如下:
执行ls
执行cat查看flag
假赛生
<?php
session_start();
include('config.php');
if(empty($_SESSION['name'])){
show_source("index.php");
}else{
$name=$_SESSION['name'];
$sql='select pass from user where name="'.$name.'"';
echo $sql."<br />";
system('4rfvbgt56yhn.sh');
$query=mysqli_query($conn,$sql);
$result=mysqli_fetch_assoc($query);
if($name==='admin'){
echo "admin!!!!!"."<br />";
if(isset($_GET['c'])){
preg_replace_callback("/\w\W*/",function(){die("not allowed!");},$_GET['c'],1);
echo $flag;
}else{
echo "you not admin";
}
}
}
?>
题目显示register.php和login.php提示
注册admin
使用admin (空格)注册
注册成功
尝试登录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-II03qPFW-1668255264184)(C:\Users\WenTesla\AppData\Roaming\Typora\typora-user-images\image-20221016162350810.png)]
证实登录页面的php后台属于 上述
接着注入c
preg_replace_callback 函数执行一个正则表达式搜索并且使用一个回调进行替换。
mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )
这个函数的行为除了可以指定一个 callback 替代 replacement 进行替换字符串的计算,其他方面等同于 preg_replace()。
参数说明:
- $pattern: 要搜索的模式,可以使字符串或一个字符串数组。
- $callback: 一个回调函数,在每次需要替换时调用,调用时函数得到的参数是从subject 中匹配到的结果。
- $subject: 要搜索替换的目标字符串或字符串数组。
- $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
- $count: 可选,为替换执行的次数。
有关正则匹配的知识
\w:用于匹配字母,数字或下划线字符;
\W:用于匹配所有与\w不匹配的字符;
“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次;
其实没有过滤空格此处为空即可