抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

代码执行类的题目,如在指定时间内计算给定方程的数值,方程题一般时间人工计算会超时,只能通过抓取页面内的方程,然后通过代码执行的方式计算好然后提交来解决;或给定一串 php 代码,通过指定变量输入系统指令执行代码获取目录和读取 flag 里的内容。

获取页面信息包

  • 1.quests包 pip install获取,获取页面信息包
1
2
sess = requests.session()
req = sess.get(url)
  • 2.通过 re 正则表达式截取内容,通过(.) 即 (.?)匹配
1
2
pattern = "the answer is:(.*)</br> a=(.*)</br> b=(.*?)</br>"
result = re.search(pattern, req.text)
  • 3.然后可获取匹配到值,通过eval()函数计算数值
1
2
3
4
5
6
a, b = int(result.group(2)), int(result.group(3))
result = eval(result.group(1))
4.通过post发送请求获取 答案
data = { 'answer': result }
rsp = sess.post(url, data=data)
print(rsp.text)

命令执行

如给定一串代码,

1
2
3
4
<?php
$a = 'assert';
$a($_POST['a']);
?>

然后通过发送 post 请求传参,传入 phpinfo() 或者系统命令执行相关命令来获取 flag

linux中,&和&&,|和||的区别

  • & 表示任务在后台执行,如要在后台运行 redis-server,则有 redis-server &

  • && 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'    

  • | 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l

  • || 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"

  • | 被过滤 用换行符 %0a

空格绕过技巧

命令执行时,后台函数可能会过滤掉空格等特殊字符,可通过如下方式绕过过滤

  • ${IFS}
  • < <>
  • %09
  • {cat, 1.txt}
  • .\
  • %CommonProgramFilesL~10,1%

判断服务器为linux或windows

  • windows 对大小写不敏感,将 x 改为 X,如果不变,则为 windows
  • windows 查看文件使用指令 type,

文件名绕过技巧

flag 文件被绕过,可通过如下方法绕过

  • nl / fl``ag, nl / fl[a-z]g, a=fl;b=ag;nl /$a%b

  • echo base64字符串 | base64 -d 通过 base64 加密后再解密

  • echo cat /flag|base64echo base64字符串 | base64 -d 通过 base64 加密后再解密

评论