湖湘杯

Re

Hideit

findcrypt搜到salsa20。先进行xxtea解密,在salsa20,所以输入为空后,输入正确的随机数。直接拿到最后的字节流,进行异或即可。

image

1
2
3
4
5
6
s1 = [0x8D, 0xE2, 0x3D, 0xC2, 0x19, 0xF2, 0x2D, 0xCA, 0x18, 0x14, 0xCF, 0x52, 0x77, 0x5A, 0x9C, 0x13, 0xAA, 0xCC, 0x04, 0x5B, 0x92, 0xC1, 0x0C, 0x68, 0x45, 0x58, 0xF9, 0x47, 0x68, 0xD9, 0x35, 0xC5]
s2 = [0xEB, 0x8E, 0x5C, 0xA5, 0x62, 0xB4, 0x1C, 0x84, 0x5C, 0x59, 0xFC, 0x0D, 0x43, 0x3C, 0xAB, 0x20, 0xD8, 0x93, 0x33, 0x13, 0xA1, 0x9E, 0x39, 0x00, 0x76, 0x14, 0xB5, 0x04, 0x58, 0x9D, 0x06, 0xB8]
flag = ""
for i in range(32):
flag += chr(s1[i] ^ s2[i])
print(flag)

PWN

tiny_httpd

这是一个超级轻量级的框架百度上有相关注释

  1. 服务器启动,main函数调用startup函数绑定服务端口(指定端口/随机端口)
  2. main函数进入无限循环,并且由于recv调用而被阻塞,等待HTTP请求。收到请求时,将会派生一个线程运行accept_request函数,然后循环到recv调用,main函数线程继续被阻塞
  3. 在accept_request函数中,通过定制的get_line方法,取出HTTP方法和URL,对于 GET 方法,如果有携带参数,则 query_string 指针指向 url 中后面的 GET 参数。
  4. tinyhttpd的服务器文件是放置在以工作目录为相对路径的htdocs文件夹先,对于取出的url,先格式化到path字符数组中,如果是以/结尾的,或者url是目录的情况下,那么默认地在url后加上index.html表示访问主页。
  5. 如果文件路径合法(也就是文件存在),对于无参数的 GET 请求,读取整个HTTP请求并丢弃,然后直接输出服务器文件到浏览器,即用 HTTP 格式写到套接字上,然后关闭连接。其他情况(带参数 GET,POST 方式,url 为可执行文件),则调用 excute_cgi 函数执行 cgi 脚本。
  6. 读取整个 HTTP 请求并丢弃,如果是 POST 则找出 Content-Length. 把 HTTP 200 状态码写到套接字。
  7. 建立两个管道,cgi_inputcgi_output, 并 fork 一个进程。
  8. 在子进程中,把 STDOUT 重定向到 cgi_outputt 的写入端,把 STDIN 重定向到 cgi_input 的读取端,关闭 cgi_input 的写入端 和 cgi_output 的读取端,设置 request_method 的环境变量,GET 的话设置 query_string 的环境变量,POST 的话设置 content_length 的环境变量,这些环境变量都是为了给 cgi 脚本调用,接着用 execl 运行 cgi 程序。
  9. 在父进程中,关闭 cgi_input 的读取端cgi_output 的写入端,如果 POST 的话,把 POST 数据写入 cgi_inputcgi_input 已被重定向到子进程的STDIN,读取 cgi_output 的管道输出,然后把cgi_output的输入写入到套接字中。接着关闭所有管道,等待子进程结束。

img
img

我们对题目给的源码进行结合分析,发现并没有对path变量进行任何的过滤,因此POST可以造成目录穿越漏洞

最后交由execl(path, NULL);执行

最后服务器监听反弹shell

image

image

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2021-2023 H.greed
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信